2014-01-22 44 views
0

首先,你必须知道我是Java的noob,我刚开始编写代码,这是我的第一个编程语言。所以请不要生气,如果我开始有点愚蠢,我只是想学习代码 - 谢谢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(“资源”)/解释为什么必须在那里。

回答

3

您正在使用Scanner错误。您需要拨打scanner.nextLine()以获取用户的输入(字符串),并且需要将该字符串转换为整数(与Integer.parseInt)以将其与其他整数进行比较。

+0

好吧所以/而不是我应该把scanner.nextLine()?我应该在哪里放置Integer.parseInt?顺便说一句,谢谢你的帮助:) – Kenno

+0

那么,scanner.nextLine()等待用户输入,然后将其作为字符串返回。所以,在你需要使用输入之前,坚持你想要的地方。至于Integer.parseInt(),如果你愿意,你可以把它放在scanner.nextLine()之后,它只是将一个String转换为一个int。 – Kayaman

+0

好吧,我添加了scanner.nextLine()和Integer.parseInt(userInput),现在我的代码/ eclipse不会显示控制台/ run - 我该怎么喊? – Kenno

0

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

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

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

+1

他的问题与缺少的导入没有任何关系。 – Kayaman

0

你应该导入的java.util。*; 而你没有接受任何来自用户的输入,请尝试

int inp = input.nextInt();

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 '.");   
} 

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

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()