2017-10-10 142 views
0

我对Java语言相当陌生,而且我遇到了一些问题。If语句中的多个变量?

我正在试图制作真正简单的战舰游戏。我有一个数组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) 

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

+0

请注意,你的条件相当于:'n ==可1 &&(x.equals( “N”)|| x.equals(“n1”).. && x.equals(“n8”))' –

+0

我不知道我明白了。你可以包含整个if语句吗? –

+0

对于此任务,您需要一个循环。类似于Mykota在答案中所写的内容 –

回答

0

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

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

这种方法也恰好是无效的。

+0

工程就像一个魅力!谢谢 。我现在正在努力改进它:-) –

0

Java没有类似的操作符那些你提到的。但是你可以使用循环重写代码:

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.") 
} 
+0

您可以使用contains来代替遍历整个列表。 'if(n == 1 && fields.contains(x))''。使列表成为恒定的静态字段也可能是一个好主意。 –

+0

@MalteHartwig你是对的!谢谢,我已经更新了我的答案 –

+0

我马上试试!谢谢你这么快速的回应! –

0

尼古拉直接去的地步,我建议另一种选择是看到here

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

我不现在已经安装了JDK正确检查,但这是IDEIA

+0

它不起作用。您只能使用new关键字将数组作为参数传递 –

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.") 
}