2015-04-09 3 views
1

метод public static List<Signal> fromString(String inps) создает и возвращает значения List of Signal, найденные во входной строке. Если найдены какие-либо символы, отличные от "01xX \t" (включая 'whitespace'), я должен поднять значение ExceptionLogicMalformedSignal. Когда я передаю 1 x \tX 00 в качестве входных данных, он выдает исключение, если это не так. Что не так с логикой кода? Спасибо заранее! HI, LO, X - объекты перечисления.Проблемы с исключением исключения

public static List <Signal> fromString(String inps) 
    { 
     List<Signal> values = new ArrayList<Signal>(); 
     for(int i = 0; i < inps.length(); i++) 
     { 
      if(inps.charAt(i) == '1') 
       values.add(HI); 
      else if(inps.charAt(i) == '0') 
       values.add(LO); 
      else if(inps.charAt(i) == 'X') 
       values.add(X); 
      else if(inps.charAt(i) == 'x') 
       values.add(X); 
      else if (inps.charAt(i) != ' ' || inps.charAt(i) != '\t') 
       throw new ExceptionLogicMalformedSignal(inps.charAt(i), "Invalid character!"); 




     } 
     return values; 

    } 
+1

, потому что это ВСЕГДА не равный пробелу ИЛИ табулятор – SomeJavaGuy

ответ

4

Посмотрите на это условие:

if (inps.charAt(i) != ' ' || inps.charAt(i) != '\t') 

Это пройдет, если символ не является пространством или если это не вкладка. Один символ не может быть как пробелом , так и tab, поэтому не менее один из из этих условий будет правдой. Вы хотите && - хотя я бы извлечь вызов charAt:

char c = inps.charAt(i); 
if (...) 
... 
else if (c != ' ' && c != '\t') 

... или я бы просто использовать switch заявление, которое будет понятнее IMO:

switch (inps.charAt(i)) { 
    case '1': 
     values.add(HI); 
     break; 
    case '0': 
     values.add(LO); 
     break; 
    case 'x': 
    case 'X': 
     values.add(X); 
     break; 
    case ' ': 
    case '\t': 
     break; 
    default: 
     throw ...; 
} 
Смежные вопросы