2016-09-14 28 views
1

我目前參加了我的第一個計算機科學類,我試圖編寫一個簡單的程序,其中有三個可能的答案,如果用戶猜測正確的答案,他們會得到一定的信息。程序應該工作的方式是如果他們猜出正確的答案,他們會得到一個通用的消息,說「你贏了」,然後如果他們通過猜測贏了,他們會得到消息x,如果他們通過猜測b贏了,他們會得到消息y ,如果他們通過猜測c贏了,他們會得到消息c。我現在有是否有條件的內部有條件的Java

if (result.equal(pick)) { 
    ... 
} else { 
    ... 
} 

獲得「你贏了」和「你輸」的消息,但有把另一種情況,第一行內的方式,這樣,如果挑了一個,他們得到消息x和等等?

+1

這是一個完美的用例一['Map'](https://docs.oracle.com/javase/8/docs/api/java/util/Map.html )。你可以將一個輸入映射到一個特定的響應:'map.put(「a」,「x」);',那麼你只需檢索映射到輸入的響應:'pick =「a」; map.get(拾取); //返回「x」'。 –

回答

0

是的。

if (result.equal(pick)) {... 
    if (pick.equal(a)){...} 
    else if (pick.equal(b)){...} 
    else if (pick.equal(c)){...} 
    else {...} 
} else {... } 
3

你可以把你的,如果塊想要的任何聲明,所以是的,你可以把另一個IF-ELSEIF-ELSE if區塊內部和/或其他塊。

0

您可以鏈的條件一起使用&&要求所有條件爲真:

if (result.equal(pick) && result.equal(pickTwo)) { 

||爲只需要的條件之一是真的

if (result.equal(pick) || result.equal(pickTwo)) { 

或者,你可以使用a switch

switch (string result){ 
    case "Answer": 
     System.out.println("You did it!"); 
     break; 
    case "Answer2": 
     System.out.println("You did it!"); 
     break; 
    default: 
     "you lose!"; 
      break; 
} 

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

0

您可以將多個條件放置在if語句塊中,這可能是您要查找的內容。

// The if conditional can hold Boolean logic. 
if (result.equals(pick) && result.equals(x)) {.. 
} 
else {...} 

另一種方法是放置,如果在if(嵌套IFS

if (result.equals(pick)) {... 
    if(result.equals(x){... 
    } 
} else {...} 

如何我會使用散列映射容納所有我的答案的做法,這是由

Map<String,String> answers = new HashMap<String,String>(){{ 
    answers.put(a,x); 
    answers.put(b,y); 
    answers.put(c,c); 
}}; 

result = userInput; 
if (answers.get(result) != null) 
    System.out.println(answers.get(result)); 
else 
     System.out.println(defaultResponse); 

使用HashMap的是我最喜歡的路線,因爲我可以使用地圖(字典),以容納所有可能的結果。它位於一個地方。這讓我感覺更加面向對象。對你而言,這可能會更先進,但是我將花時間在將來確保最後一個有意義瞭解更多關於Java的特性。它使用一個靜態初始化器並在幕後生成一個匿名類。

+0

是的。這些可在您的實用程序中找到。但嵌套if語句是不好的做法。 – Angelito

0

你的想法是正確的可能嵌套if-then-else語句。

雖然它會被認爲是嵌套到太多層次的bad practice。現在,你不必爲此擔心。只要確保代碼合理可讀且有效。

其他潛在有用的開放給你的選擇是使用switch statement

switch語句檢查變量的值,並允許您利用基於價值不同的動作。參見上面的鏈接。

0

有很多方法可以解決這個小小的練習。

如果您在多個條件鏈接語句之後,我還建議查看switch-case語句,尤其是Java 7+現在支持Strings例如

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

開關語句是清潔的。

解決此問題的另一種方法是創建一個HashMap,其中Key爲答案,值爲消息。

然後你需要做的就是尋找鑰匙(答案)。如果存在,用「You Win」+ keys_value迴應。

HashMap<String, String> results = new HashMap<String, String>(); 

results.put("A", "messgae A!"); 
results.put("B", "message B!"); 
results.put("C", "message C!"); 

String answer = "A"; 

if (results.containsKey(answer)){ 
    System.out.println("You Win! " + results.get(answer)); 
} else { 
    System.out.println("You loose"); 
} 

https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html