抛出异常的问题

时间:2015-04-09 06:45:12

标签: java

方法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 个答案:

答案 0 :(得分:4)

看看这个条件:

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

如果角色不是空格,如果它不是标签,则会通过。单个字符不能同时包含空格标签,因此至少一个子条件将为true。您想要&& - 虽然我提取了对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 ...;
}