метод public static List<Signal> fromString(String inps)
создает и возвращает значения List of Signal
найденные во входной строке. Если "01xX \t"
какие-либо символы, отличные от тех, что "01xX \t"
в "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;
}
Посмотрите на это условие:
if (inps.charAt(i) != ' ' || inps.charAt(i) != '\t')
Это будет проходить, если символ не является пространством или если он не является вкладкой. Один символ не может быть как пространством, так и табуляцией, поэтому по крайней мере одно из условий будет истинным. Вы хотите &&
- хотя я бы charAt
вызов 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 ...;
}