2016-01-25 1 views
0

У меня возникла проблема со следующим кодом. Моя идея - проверить недопустимые символы в моей строке, прежде чем продолжить. Но почему-то мой методInvalidChar всегда возвращает true, хотя это не должно. Строка состоит только из четырех специальных прописных букв. Я проверяю, есть ли другие.Сравнение символа от символьного массива до символьных констант

public static int method (String someString) { 

    // array of characters from String  
    char[] charArray = someString.toCharArray(); 

    // are there invalid characters in the Array? 
    if (involvesInvalidChars(charArray)) { 
      return -1; 
    } 
... // code following 
} 

private static boolean involvesInvalidChars (char[] charArray) { 

    // for each char in the array  
    for (char ch : arrayOfChars) { 

    // check for invalid chars 
    if ((ch != 'A') || (ch != 'C') || ...) { 

     return true; 
    } 
    } 
    return false; 
} 

ответ

0

(ch != 'A') || (ch != 'C') всегда верно на самом деле (нет char что А и С).

Изменить ||&&.

+0

Спасибо! Теперь я чувствую себя глупо :) – suffi

0

1)

if ((ch != 'A') || (ch != 'C') || ...) { 

должен быть

if ((ch != 'A') && (ch != 'C') && ...) { 

Потому что вы хотите недопустимый символ не быть любой символов, а не только один характер.

2) Там более простой способ сделать это, для прописных алфавитов, попробуйте следующее:

for(char ch: arrayOfChars) 
    if((int)ch < 65 || (int) ch > 90) 
     return false; 

Здесь мы сравнивающие ASCII коды вместо каждого символа по отдельности, что является более эффективным в письменной форме и в противном случае. Вы также можете добавить строчные символы и т. Д. В этот диапазон.

0

Вы должны изменить недопустимые символы проверьте:

// check for invalid chars 
if ((ch != 'A') && (ch != 'C') && ...) { 

    return true; 
} 

Ваше текущее состояние всегда возвращает истину

0

Вы подаете метод багги, чтобы решить вашу проблему -

  1. Вы не должны используйте короткое замыкание или оператор (||) между проверками условий. Он всегда возвращает true. Вы должны использовать & &

  2. Вы должны использовать регулярное выражение, чтобы решить вашу проблему

    частные статические логические involvesInvalidChars (String String)

    { шаблон шаблон = Pattern.compile ("[ABCD]");

    Matcher matcher = pattern.matcher (string); return matcher.find();

    }