我正在制作Tic Tac Toe的基本游戏,以字符串的形式接受玩家输入(即a2)。根据字母,第一个char被设置为一个名为row的int,对于第二个char而言,相同的名称为col(对于数组grid [row] [col])。我有一个代码块,如果第一个char不是a,b或c,并且第二个char不是1,2或3,则抛出自定义异常:
if(input == null) {
throw new NullInputException();
}
else if(input.length() != 2) {
throw new InvalidInputException();
}
else if(!(input.substring(0,1).equalsIgnoreCase("a") &&
input.substring(0,1).equalsIgnoreCase("b") &&
input.substring(0,1).equalsIgnoreCase("c") ||
input.substring(1).equals("1") &&
input.substring(1).equals("2") &&
input.substring(1).equals("3"))) {
throw new InvalidInputException();
}
问题是,即使输入有效,此代码也会抛出错误,我不知道为什么。我尝试使用.charAt()而不是.substring(),以及使用条件语句搞砸了。我的问题是:如何解决这个问题,以便它接受有效的输入?
其他问题无济于事: fill two dimensional array with parts of a string; fill a 2d array with chars of 2 string
答案 0 :(得分:3)
有时最好编写一系列更易于阅读和验证的简单测试
row = input.substring(0,1).toUpperCase();
col = input.substring(1);
boolean validRow = (row.equals("A") ||
row.equals("B") ||
row.equals("C"));
boolean validCol =
(col.equals("1") ||
col.equals("2") ||
col.equals("3"));
if(!(validRow && validCol)) {
答案 1 :(得分:1)
您和两个条件:
input.substring(0,1).equalsIgnoreCase("a") &&
input.substring(0,1).equalsIgnoreCase("b")
两者不能同时true
。这就是结果总是false
并抛出异常的原因。
你真正想要的是:
String first = input.substring(0,1);
String second = input.substring(1);
if (!((first.equalsIgnoreCase("a") ||
first.equalsIgnoreCase("b") ||
first.equalsIgnoreCase("c")) &&
(second.equals("1") ||
second.equals("2") ||
second.equals("3"))) {
throw new InvalidInputException();
}
Neil的小编辑......