【问题标题】:How to control what the user enter? [duplicate]如何控制用户输入的内容? [复制]
【发布时间】:2017-02-17 23:26:41
【问题描述】:

我是一名 Java 初学者,正在阅读 First head Java 书籍。 我确实管理了这本书的要求,但我正在努力改进程序

该程序应该生成一个介于 0-7 之间的随机数,然后将其放入一个包含以下两个数字的数组,用户必须猜测它。 一切正常,除了我试图限制用户输入除 0 到 7 之间的数字以外的任何内容

这是我的尝试,我不知道为什么它不起作用:

public String  checkYourSelf (String stringGuess){
    String result = "miss"; //this will be returned if the guess doesn't match
    if (stringGuess != "0" ||
        stringGuess != "1" ||
        stringGuess != "2" ||
        stringGuess != "3" ||
        stringGuess != "4" ||
        stringGuess != "5" ||
        stringGuess != "6" ||
        stringGuess != "7" ){
            System.out.println("Please Enter a correct number");
            result = "error";
            return result;
        } 

然后我使用 parseInt 方法

int guess = Integer.parseInt(stringGuess);

整个方法:

    public String  checkYourSelf (String stringGuess){
    String result = "miss"; // this will be returned if the guess doesn't match
    if (stringGuess != "0" ||
        stringGuess != "1" ||
        stringGuess != "2" ||
        stringGuess != "3" ||
        stringGuess != "4" ||
        stringGuess != "5" ||
        stringGuess != "6" ||
        stringGuess != "7" ){
            System.out.println("Please Enter a correct number");
            result = "error";
            return result;
        } 
    int guess = Integer.parseInt(stringGuess);

    for (int cell : cellsLocations) {
        if (enterdNums.contains(guess)){
            result = "error";
            System.out.println ("You've entered this number already.");
            System.out.println("Please try again");
            break;
        }
        if (cell == guess) {
            result = "hit";
            hits++;      
            break;
        }
    }
    if (hits == cellsLocations.length) {
        result = "kill"; 
    }
    if (result != "error"){ 
        System.out.println(result);
    }
    enterdNums.add(guess); // add to the list so it doesnt
    return result;   
}
    }

在主方法中:

while (isAlive) {
        guess = input.getUserInput("Enter a number");
        result = dot.checkYourSelf(guess);
        if (result == "error"){
            continue;
            } 
        numOfGuesses++;

        if (result == "kill"){
            System.out.println(numOfGuesses);
            isAlive = false;
            break;
        } 
    }

我知道可能有其他方法可以做到这一点,但我正在尝试使用我已经知道的东西来做到这一点,从逻辑上讲这应该可以工作,但是如果我输入任何数字,它会说“请输入正确的数字"

谢谢

【问题讨论】:

  • 另外,您的 OR (||) 应该是 AND (&&)。任何值都不等于其中一个值。
  • 一个建议......永远不要在字符串中使用 '==',使用 equals() 或 equalsIgnoreCase()

标签: java if-statement methods operators


【解决方案1】:

使用 while 循环。它简单易实现

guess = input.getUserInput("Enter a number");
while(guess < 0 || guess > 7){
    System.out.println("that number is invalid! Enter a number 0-7 : ");
    guess = input.getUserInput("Enter a number");
}

循环将不断迭代,直到用户输入一个介于 0-7 之间的数字

【讨论】:

  • 这个问题有什么意义?
  • "我试图限制用户输入除 0 到 7 之间的数字以外的任何内容"
  • 问题是字符串比较对作者不起作用。您的答案与字符串比较无关,因此具有误导性,对作者不起作用(不会解决他们的问题)。
  • 这种获取 Input 的方法几乎与他的结构相同,只是他测试了 0-7 之间的每个数字。是的,他测试字符串错误,但这是解决他的问题的更好方法
  • 让我重复一遍:你回答了没有被问到的问题,你的问题并没有解决作者的问题。您最好将其作为评论,而不是作为答案。
【解决方案2】:

关于您遇到的问题: 您永远不会使用 != 比较字符串,因为 String 是一个对象,而不是原始对象。请改用字符串'equals() 方法。

一条建议: 因为您只针对某些字符进行测试,所以您可以使用非常简单的正则表达式,它比您的构造更短且更易于理解:

String regex = "^[0-7]{1}$";

在哪里 [0-7] - 允许的字符和 {1} - 字符串长度

在你的条件下:

if (!stringGuess.matches(regex))

【讨论】:

    【解决方案3】:

    您需要使用方法equalsIgnoreCase,即:

    if (!stringGuess.equalsIgnoreCase("0"))
    

    等等

    【讨论】:

    • 有人能解释一下否决票吗?
    • 这个问题已经被问了一百万次,并且已经被标记为重复。你的回答没有任何新的贡献。在比较数字时,equalsIgnoreCase() 是无关紧要的。
    • 他在比较字符串,然后转换成整数,可能效率不高,但它是这种情况下的正确答案
    • 我并没有说它本身是错误的,只是没有用和误导。
    • 如何误导?这是这个案例场景的正确答案,用户提问显然还在学习中,给他一些时间来掌握这些概念,我们都需要不时的帮助
    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多