Java:代码无法以正确的方式运行

时间:2014-01-22 19:37:54

标签: java warnings

首先你必须知道我是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(“资源”)/解释为什么必须在那里。

5 个答案:

答案 0 :(得分:3)

您使用Scanner错误。您需要调用scanner.nextLine()来获取用户的输入(String),并且需要将String转换为整数(使用Integer.parseInt)以将其与其他整数进行比较。

答案 1 :(得分:0)

您将不得不将java.util.Scanner导入项目中。看一下这个链接,它将为您提供大量有关它的信息。

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

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

答案 2 :(得分:0)

你应该导入java.util。*; 而且您没有收到用户的任何意见,请尝试

  

int inp = input.nextInt();

答案 3 :(得分:0)

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

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

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

关于警告: 正如您可以在文档中看到的那样,扫描仪需要在使用后用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 '.");          
}

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

答案 4 :(得分:0)

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

import java.util.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()