方法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;
}
答案 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 ...;
}