【问题标题】:Multiple variables in If statement?If语句中有多个变量?
【发布时间】:2017-10-10 09:24:03
【问题描述】:

我是 Java 语言的新手,但遇到了一些问题。

我正在尝试制作非常简单的战舰游戏。我有一个 3x3 的数组,里面填充了 0 和 1。1 表示有一艘船。

数组中的每个槽都命名为 n-n8。我想知道是否有一种方法可以在一个 if 语句中命名所有变量。

我现在的做法是

if((n == 1 && x.equals("n") || (n == 1 && x.equals("n1") .. (n == 1 && x.equals("n8")){
System.out.println("Nice shot. Boat down.")}

x 是用户输入。你大概明白了。 所以我想知道是否有办法缩短 if 语句或者没有其他办法。类似的东西:

if(n, n1, n2.. n8)

我尝试查找它,但没有成功。 提前谢谢你!

【问题讨论】:

  • 注意你的条件相当于:n == 1 && (x.equals("n") || x.equals("n1") .. && x.equals("n8"))
  • 我不确定我是否明白这一点。你能包括整个if 声明吗?
  • 对于这个任务,你需要一个循环。类似于 Mykota 在答案中写的内容
  • x 除了 'n[m]' 还能包含什么?最短的 if 语句不会检查数组的所有名称!

标签: java arrays variables if-statement


【解决方案1】:

几个选择:

使用正则表达式(适用于 Java 7/8/9):

if (n == 1 && x.matches("n[1-8]?") {
    System.out.println("Nice shot. Boat down.")
}

使用新的 Java 9 List.of 便捷方法(替代 Arrays.asList):

if (n == 1 && List.of("n", "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8").contains(x) {
    System.out.println("Nice shot. Boat down.")
}

【讨论】:

    【解决方案2】:

    您可以创建八个名称的列表并使用contains

    if (n == 1 && Arrays.asList("n", "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8").contains(x)) {
        System.out.println("Nice shot. Boat down.")
    }
    

    这种方法也恰好是 null 安全的。

    【讨论】:

    • 像魅力一样工作!谢谢你 。我现在要努力改进它:-)
    【解决方案3】:

    Java 没有与您提到的类似的运算符。但是你可以使用 for 循环重写你的代码:

    for (String number : Arrays.asList("n", "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8")) {
        if (n == 1 && x.equals(number)) {
            System.out.println("Nice shot. Boat down.");
            break;
        }
    }
    

    或者更好地使用contains而不是循环

    List<String> numbers = Arrays.asList("n", "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8");
    if (n == 1 && numbers.contains(x)) {
        System.out.println("Nice shot. Boat down.")
    }
    

    【讨论】:

    • 您可以使用 contains 而不是循环遍历列表。 if (n == 1 &amp;&amp; fields.contains(x))。将列表设为常量静态字段也可能是个好主意。
    • @MalteHartwig 你是对的!谢谢,我已经更新了我的答案
    • 我马上去试试!谢谢你这么快的回复!
    【解决方案4】:

    Mykola 切中要害,我建议另一种选择,如 here:

    if(n == 1 && Arrays.asList(yourArray).contains(['n1', 'n2', 'n3', 'n4', 'n5', 'n6', 'n7', 'n8']);){
        System.out.println("Nice shot. Boat down.")
    }
    

    我现在没有安装 jdk 来正确检查它,但这是我的想法

    【讨论】:

    • 这行不通。您只能使用 new 关键字将数组作为参数传递
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2017-10-25
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多