首先你必须知道我是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(“资源”)/解释为什么必须在那里。
答案 0 :(得分:3)
您使用Scanner
错误。您需要调用scanner.nextLine()
来获取用户的输入(String),并且需要将String转换为整数(使用Integer.parseInt
)以将其与其他整数进行比较。
答案 1 :(得分:0)
您将不得不将java.util.Scanner导入项目中。看一下这个链接,它将为您提供大量有关它的信息。
编辑:刚刚注意到你在顶部有它。接下来你应该做的是创建一个变量,比如说“string”类型字符串,并且你想将input.next()分配给该变量。然后你可以用guess.equals()函数替换input.equals()函数。
答案 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()