Java 创建基于用户字符串输入返回整数的方法

Java 创建基于用户字符串输入返回整数的方法,java,methods,user-input,Java,Methods,User Input,我对java不是很在行,但我正在尝试创建一个从用户那里获取输入并返回值的方法。然而,难度总是返回0 chosenDifficulty=userName.next().toUpperCase() public int getDifficulty() { int difficulty = 0; if (chosenDifficulty == "HUMAN") { difficulty = 1; if (chosenDifficulty ==

我对java不是很在行,但我正在尝试创建一个从用户那里获取输入并返回值的方法。然而,难度总是返回0

chosenDifficulty=userName.next().toUpperCase()

 public int getDifficulty() {
    int difficulty = 0;
    if (chosenDifficulty == "HUMAN") {
            difficulty = 1;
        if (chosenDifficulty == "RANDOM") {
            difficulty = 2;
        }else{
            difficulty = 3;
        }
    }
     return difficulty;
}

感谢您的帮助,可能是因为太晚了,但我真的弄不明白……或者可能是因为这样做不可能……提前感谢您的帮助。

它可能总是返回0,原因有两个

首先,您不能使用
=
在Java中执行字符串相等性检查,并期望得到一致的结果。您几乎总是希望使用“.equals()”方法来检查对象之间的相等性。确切的原因在这里有很好的解释:

其次,缺少一个端部支撑

以下内容应该有效:

public int getDifficulty() {
    int difficulty = 0;
    if (chosenDifficulty.equals("HUMAN")) {
        difficulty = 1;
    } else if (chosenDifficulty.equals("RANDOM")) {
        difficulty = 2;
    }else {
        difficulty = 3;
    }
    return difficulty;
}
Kevin的答案很好(也就是说,缺少一个右括号,
String
相等比较应该使用
.equals()
,而不是
=

但是作为一个附加选项:这种比较是
switch
语句的好地方,而不是链接
if
。这假设您至少在Java7中运行。品味问题
switch()
应该更高效一些,但我认为在大多数情况下,决定因素应该是您觉得哪个更可读

public int getDifficulty() {
    int difficulty;
    switch (chosenDifficulty) {
        case "HUMAN":
            difficulty = 1;
            break;
        case "RANDOM":
            difficulty = 2;
            break;
        default:
            difficulty = 3;
    }
    return difficulty;
}

而不是强制转换为大写并检查内容。这里的目标是检查内容,而不考虑情况,因此请删除

      chosenDifficulty = userName.next().toUpperCase();
然后使用equalsIgnoreCase

      chosenDifficulty.equalIgnoreCase("HUMAN")

因此,将只匹配大小写内容。

首先,在比较字符串时,应使用
.equals()
方法,而不是
=

if (chosenDifficulty.equals("HUMAN")) {
与“RANDOM”相比,第二个if语句位于第一个if语句内部。这意味着它只在困难等于“人”时使用。由于第二个if语句具有else条件,因此如果达到if语句,则难度将始终设置为3,因此没有将难度设置为2的场景。这是因为要满足第一个if语句,难度必须是“HUMAN”,然后将难度设置为1。然后将其设置为3,因为它不等于“随机”。或者,如果不满足第一个标准,则难度等于“人”,难度将保持为0

我已经在下面发布了我认为你想要的东西。如果困难是“人类的”,那么困难是1。如果是“随机”的,难度为2。如果是其他内容,则返回3

 public int getDifficulty() {
       int difficulty = 3;
    if (chosenDifficulty.equals("HUMAN")) {
            difficulty = 1;
          }
        if (chosenDifficulty.equals("RANDOM")) {
            difficulty = 2;
        }   
     return difficulty;
  }

很抱歉,我编辑了这篇文章,我将它改为1以查看之前会发生什么,并将代码粘贴到这里,而没有将其更改回原来的文章中…我现在已将其设置回0,但我将尝试您的方法。非常感谢。当您使用它时,如果您让该方法返回一个枚举而不是int,那么随着时间的推移,您的代码将更容易维护。谢谢您。我将不得不研究枚举,我已经有一段时间没有看到过枚举了,谢谢你的建议:)@KevinWalker你指出==不适用于字符串比较,这很酷,但是如果你在你的帖子中添加比较两个字符串的正确方法,我很高兴投你一票up@KickButtowski:更正的代码具有正确的方式,但我要说的是,当你们想在Java中比较两个字符串时,你们必须使用equals()我试着投票支持你们,但我不能很好地理解你们的第二段。你能重新表述一下吗?@KickButtowski凯文的答案(我投了更高的票!)涵盖了对
equals()
(以及缺少的大括号)的需要,而且在这个答案中它本来是不合适的,因为
switch()
在内部处理相等比较。@KickButtowski当然,没有坏处。我不确定我是否同意这一点。如果这是他最后一次检查该字符串,那也没关系,但是如果他出于任何原因保留该字符串,那么在输入时对该字符串进行一次迭代是值得的,这样它就可以以规范格式存储在内存中。但这是一种判断。