为什么这段代码会被终止"终止"?

时间:2015-04-11 19:54:24

标签: java

我在Eclipse中有这个代码:

package test;

import java.util.Scanner;

class test{
    public static void main(String args[]){
        Scanner Input = new Scanner(System.in);
        if (Input.equals("payday2")){
        System.out.println(Input);
        }
    }           
}

现在,当我尝试启动代码/ aplication时,它会自行终止。

为什么会发生这种情况?

3 个答案:

答案 0 :(得分:3)

您将Scanner实例化为名为Input的变量,但从不尝试阅读。

你的病情

if (Input.equals("payday2")){

只会检查Scanner对象是否等于字符串“payday2”,它始终为false,因此程序终止。

如果您想阅读,则需要Input.nextLine()

我不知道eclipse,但是Netbeans会用这行警告“等于不兼容的类型”

此外,您不应按惯例使用大写字母命名变量,只有类名称应以大写字母开头。

所以你的固定程序将是

Scanner input = new Scanner(System.in);
String value = input.nextLine();
if ("payday2".equals(value)) {
    System.out.println(value);
} 
  • 请注意,我将字符串保存在变量中以显示它,因为显示input会调用toString对象的Scanner,这可能不是您所期望的。
  • 请注意,我也以相反的顺序比较字符串,这是一个很好的做法,即使在这里不需要NPE也是如此。

答案 1 :(得分:1)

您永远不会从Scanner实例读取输入,因此应用程序不会阻止

String text = input.nextLine(); 
if ("payday2".equals(text)) {
  ...

答案 2 :(得分:0)

我认为你的意思是:

String in = Input.nextLine();
if(in.equals("payday2"))
{
    System.out.println(in);
}

注意:在Java 7中,您可以执行以下操作:

String in = Input.nextLine();
switch(in)
{
    case "payday2":
        System.out.println(in)
        break;
    case "payday the heist":
        //...
        break;
}

这使得管理不同的输入案例变得更加容易。