Проблемы с броском исключения

1

метод 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;

    }
  • 1
    потому что он ВСЕГДА неравен пробелу ИЛИ табулятору
Теги:

1 ответ

4
Лучший ответ

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

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 ...;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню