2016-09-14 33 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