使用字符串输入中的Chars填充二维数组

时间:2015-03-19 15:42:13

标签: java arrays

我正在制作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

2 个答案:

答案 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的小编辑......