【问题标题】:Java: Code ain't working the right wayJava:代码没有以正确的方式工作
【发布时间】:2014-01-22 19:37:53
【问题描述】:

首先你必须知道我是 Java 的菜鸟,我刚开始编写代码,它是我的第一个编程语言。所以如果我开始有点愚蠢,请不要生气,我只是想学习编码 - 谢谢

我正在尝试制作一个简单的“猜谜游戏”,但我的代码并未等待用户输入。 请帮帮我,我不知道该怎么办。

我的代码:

    public static void main(String[] args)
    {
        //Creating the scanner
        @SuppressWarnings("resource")
        Scanner input = new Scanner(System.in);


        //Creating the two random numbers.
        Random rand = new Random();
        int userNumber  = rand.nextInt(10) + 1;
        int comNumber = rand.nextInt(10) + 1;


         //Asks the user what to do.
        System.out.println("Your number is: " + userNumber +" of 10");
        System.out.println("Do you think that your number is Heigher(H), Lower(L) or Equal To(E) the computers number");


            //Checking if the user is right.

        //If the user types in LOWER
        if(userNumber < comNumber && input.equals("L"))
            System.out.println("You are right. The computer's number is: " + comNumber);
        if(userNumber < comNumber && !input.equals("L"))
            System.out.println("You are wrong. The computer's number is: " + comNumber);

        //If the user types in EQUAL TO.
        if(userNumber == comNumber && input.equals("E"))
            System.out.println("You are right. The computer's number is: " + comNumber);
        if(userNumber == comNumber && !input.equals("E"))
            System.out.println("You are wrong. The computer's number is: " + comNumber);

        //If the user types in HEIGHER.
        if(userNumber > comNumber && input.equals("H"))
            System.out.println("You are right. The computer's number is: " + comNumber);
        if(userNumber > comNumber && !input.equals("H"))
            System.out.println("You are wrong. The computer's number is: " + comNumber);

        else
            System.out.println("You can only type in ' L ', ' E ' or ' H '.");




    }
}

如果您能帮我解决我的问题,我会很高兴,并告诉我如何删除@SuppressWarnings("resource") / 解释为什么它必须在那里。

【问题讨论】:

    标签: java warnings


    【解决方案1】:

    你用错了Scanner。您需要调用scanner.nextLine() 从用户那里获取输入(字符串),并且您需要将字符串转换为整数(使用Integer.parseInt)以将其与其他整数进行比较。

    【讨论】:

    • 好的,那么我应该把scanner.nextLine()放在哪里/而不是什么?我应该把 Integer.parseInt 放在哪里?顺便说一句,非常感谢您的帮助:)
    • 好吧,scanner.nextLine() 等待用户输入,然后将其作为字符串返回。所以在你需要使用输入之前,把它贴在你想要的任何地方。至于Integer.parseInt(),如果你愿意,你可以把它放在scanner.nextLine()之后,它只是将一个String转换为一个int。
    • 好的,我添加了scanner.nextLine() 和Integer.parseInt(userInput),现在我的代码/eclipse 不会显示控制台/运行——我该怎么办?
    • 你应该修复错误,我怀疑 Eclipse 是否给你静默处理。
    【解决方案2】:

    您将不得不将 java.util.Scanner 导入到您的项目中。看看这个链接,它会给你很多关于它的信息。

    编辑:刚刚注意到您将它放在顶部。接下来你应该做的是创建一个变量,比如字符串类型的“guess”,然后你想将 input.next() 分配给那个变量。然后可以将 input.equals() 函数替换为 guess.equals() 函数。

    http://www.homeandlearn.co.uk/java/user_input.html

    【讨论】:

    • 他的问题与缺少导入无关。
    【解决方案3】:

    你应该导入 java.util.*; 而且您没有从用户那里获得任何输入,请尝试

    int inp=input.nextInt();

    【讨论】:

      【解决方案4】:

      要回答您的原始问题,您会收到一个错误,因为您没有导入 java.util.Scanner

      import java.util.Scanner;

      解决其他一些问题:

      您没有从用户那里读取任何内容。您使用 Scanner 方法来执行此操作。

      String guess = input.nextLine() 是我会使用的。

      其次,您的 if 语句不会像您使用它们的方式那样工作。这可能不是最紧凑的,但它有利于可读性。

          if(guess.equals("L")){
              if(userNumber < comNumber){
                  System.out.println("You are right. The computer's number is: " + comNumber);
              } else {
                  System.out.println("You are wrong. The computer's number is: " + comNumber);
              }
          } else if(guess.equals("E")){
              if(userNumber == comNumber){
                  System.out.println("You are right. The computer's number is: " + comNumber);
              } else {
                  System.out.println("You are wrong. The computer's number is: " + comNumber);
              }
          } else if(guess.equals("H")){
              if(userNumber > comNumber){
                  System.out.println("You are right. The computer's number is: " + comNumber);
              } else {
                  System.out.println("You are wrong. The computer's number is: " + comNumber);
              }
          } else {
              System.out.println("You can only type in ' L ', ' E ' or ' H '.");
          }
      

      我还建议最后关闭扫描仪作为一种好习惯。 input.close()

      【讨论】:

        【解决方案5】:

        您可能想阅读the documentation of the Scanner class。它有一些关于如何正确使用它的示例。

        主要问题在于您的 if 语句:使用 input.equals("L") 您是在询问扫描仪对象是否等于字符串“L”,这是不可能的,因为它们不是同一类型。

        要从输入流中获取字符串,您可以使用input.next() 并将其与“L”进行比较。请记住,在所有 if 之前只调用一次,否则程序会在每次条件检查时等待新的输入。

        关于警告: 正如您在文档中看到的那样,使用后需要使用input.close() 关闭扫描仪。

        作为一个提示,如果你不知道你在压制什么,就永远不要使用@SuppressWarnings 注释。当您知道编译器警告您的某些事情不会发生时,它是一种供您使用的工具。 在这种情况下,它试图警告您资源泄漏,这是绝对正确的。

        编辑:

        就像一个想法,你可以如何改进你的设计。你可以做类似的事情:

        String expectedInput;
        if (userNumber < comNumber) {
            expectedInput = "L";
        } else if (userNumber == comNumber) {
            expectedInput = "E";
        } else {
            expectedInput = "H";
        }
        
        String userInput = input.next();
        if (userInput.equals(expectedInput)) {
           System.out.println("You are right. The computer's number is: " + comNumber);
        } else {
           System.out.println("You are wrong. The computer's number is: " + comNumber);
        }
        

        您仍然需要检查输入是否有误。

        这具有更自然的逻辑流程并且更易于阅读。

        另一个好处是您将两个不同的概念分开:找出谁的数字更高,并找出用户是否猜对了。现在这似乎是一件小事,但概念分离和抽象级别之类的事情将变得越重要,您的软件就会变得越复杂。

        刚刚有了另一个想法。你甚至可以去掉最后一位的代码重复,并添加一个错误输入检查,如下所示:

        String userInput = input.next();
        boolean isInputValid = Arrays.asList("L", "E", "H").contains(userInput);
        
        if (isInputValid) {
            String rightWrong = userInput.equals(expectedInput) ? "right" : "wrong";
            System.out.println("You are " + rightWrong + ". The computer's number is: " + comNumber);
        
        } else {
            System.out.println("You can only type in ' L ', ' E ' or ' H '.");          
        }
        

        虽然使用三元运算符是否是好的风格值得商榷......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-24
          • 2016-08-17
          • 1970-01-01
          • 2021-07-21
          • 1970-01-01
          • 1970-01-01
          • 2018-05-16
          • 1970-01-01
          相关资源
          最近更新 更多