这是错误选择还是有条件的? (Java)

Is this error selection or conditional? (Java)

我有一个错误,在第三个 IF 语句上。它检查用户输入的数字是否在范围 (1-6) 内并且字母是 a-f。我无法测试我的搜索算法,因为该行似乎有错误。我搞不定。似乎出了什么问题?是 answer.charAt(1)?

boolean wronganswer = true;
while (wronganswer == true){

    answer = (String)JOptionPane.showInputDialog(null, new JLabel(sb.toString()), "Battleships", JOptionPane.INFORMATION_MESSAGE, pic, null, "");
    if(answer.length() == 2){
        if ((Character.isLetter(answer.charAt(0))) && (Character.isDigit(answer.charAt(1)))){
            if ((answer.charAt(1) >= 0) && (answer.charAt(1) <= 6)){
                for (int k = 0; k < rows.length; k++){
                    if(rows[k] == (""+answer.charAt(0))){
                        wronganswer=false;
                    }
                }
                JOptionPane.showMessageDialog(null,"No! That letter is not on the grid!");
            }
            else{
                JOptionPane.showMessageDialog(null,"No! That number is not on the grid!");
                System.out.println(answer.charAt(1));
            }
        }
        else{
            JOptionPane.showMessageDialog(null,"No! Enter a letter, THEN a number!");
        }
    }
    else{
        JOptionPane.showMessageDialog(null,"No! Enter ONE letter and ONE number!");
    }

}

[编辑] 修复了粘贴到堆栈溢出时的缩进错误

这是由于 == 将引用与匿名临时 java.lang.String 进行比较,后者始终为 false。修复很简单;使用

rows[k].equals("" + answer.charAt(0));

相反,它比较字符串内容。你可以使用更华丽的 Yoda Expression

("" + answer.charAt(0)).equals(rows[k])

如果 rows[k]null,则不会抛出 NullPointerException

在您的代码中:

if ((answer.charAt(1) >= 0) && (answer.charAt(1) <= 6)){

你得到一个 char。即使你的字符是一个数字,它的值也是它的 ASCII value.

所以您的条件实际上不会测试您是否输入了 0 到 6 之间的数字,但它会测试您的字符是 NUL、SOH、STX、ETX、EOT、ENQ 还是 ACK。

如果你想检查你的字符是否是一个范围内的数字,你必须在你的范围限制数字周围添加单引号:

if ((answer.charAt(1) >= '0') && (answer.charAt(1) <= '6')){

或用 ASCII 值替换限制:

if ((answer.charAt(1) >= 48) && (answer.charAt(1) <= 54)){