2014-11-20 2 views
0

Im пытается написать метод, который принимает идентификатор формы «xxxx-xxxx» (x - любое число 1-9) и проверяет, действительно ли введенный идентификатор. Например, 1111-1111 будет действительным, но 111p-1111 или 11111-1111 не будет. Однако после того, как я написал этот метод, он выглядит как истинный, даже если ID имеет форму 111p-1111.java ID check method

public static boolean idCheck(String ID){ 
    char[] idChar = ID.toCharArray(); 
    boolean firstHalf = false; 
    boolean secHalf = false; 
    for (int i = 0; i < 5; ++i){//Check first half 
     if ((idChar[i] > 47 && idChar[i] < 58)){//Checks ascii vals to see if valid ID 
      firstHalf = true; 
     } 
    } 

    for (int i = 5; i < idChar.length; ++i){//Check second half 
     if ((idChar[i] > 47 && idChar[i] < 58)){//Checks ascii vals to see if valid ID 
      secHalf = true; 
     } 
    } 

    //If all values are valid, returns true. 
    if (firstHalf == true && secHalf == true && idChar[4] == '-' && ID.length() == 9){ 
     return true; 
    } 

    return false; 
} 
+1

Да потому, что если один из части содержит ряд, вы установили логическую переменную в действительности. Ваша лучшая ставка, вероятно, заключается в том, чтобы установить firstHalf и secondHalf как true, а затем в вашем цикле for, если это не число, установите для переменной boolean значение false и разбейте цикл. Если вы знакомы с регулярными выражениями, вы можете использовать совпадения с регулярным выражением, говорящим «соответствовать 4 цифрам - 4 цифры», –

ответ

1

Ваши if заявления смотрят только на один номер, чтобы определить, если он задает логическое значение истина. Итак, если any чисел в каждой половине допустимы, логическое значение будет установлено в true.

Возможно, вам лучше использовать регулярные выражения. regexr.com - отличный ресурс для начала! :)

Что-то вроде:

[1-9]{4}-[1-9]{4} (You can also use \d) 
2

Используя регулярное выражение, было бы намного проще в этом случае:

\d{4}-\d{4} 

В Java:

static boolean idCheck(String id) { 
    return id.matches("\\d{4}-\\d{4}"); 
} 

Если вы не знакомы с регулярными выражениями, вот объяснение:

  • \dСовпадение цифра 0-9
    • {4}Повторите последние лексемы в 4 раза (соответствует 4-х цифр)
  • -Match дефис буквально
  • \dСовпадение цифры 0-9
    • {4}Повторить последний жетон 4 раз (соответствует 4 цифры)
0

Вы только проверить, если есть хотя бы один символ, который соответствует, не, если какой-либо из входных символов не удается.

Чтобы иметь быстрое решение, которое легко понять, для любого разработчика Java после вас вы могли бы использовать Regex и проверить, если ваш вход соответствует:

public static boolean idCheck(String id){ 
    return Pattern.matches("\\d{4}-\\d{4}", id); 
} 

Если вы хотите сохранить свой путь проверки вы должны начинайте с trueboolean s и проверьте, остаются ли они истинными.

boolean firstHalf = true; 
boolean secHalf = true; 

и оттуда использование firstHalf &= true для обновления и использовать else{ firstHalf = false; } ветвь.

Чтобы сохранить свой метод, который я предпочел бы, чтобы всегда обратно быстро, если вы знаете, результат:

public static boolean idCheck(String id) 
{ 
    //check length 
    if (id.length() != 9) 
     return false; 

    char[] idChar = id.toCharArray(); 
    //check for dash 
    if (idChar[4] != '-') 
     return false; 

    //check first half 
    for (int i = 0; i < 5; ++i) 
    { 
     if (!(idChar[i] > 47 && idChar[i] < 58)) 
      return false; 
    } 

    //check second half 
    for (int i = 5; i <= 10; ++i) 
    { 
     if (!(idChar[i] > 47 && idChar[i] < 58)) 
      return false; 
    } 
}