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