Java代码突然停止了

时间:2015-02-23 17:15:27

标签: java

我遇到了一个问题。我是Java的新手,我今天就开始了:D)..我之前编程过,所以我知道它有点,但我是Java的新手。这是我的代码:`

public class Tutorial {

public static void main(String[] args) {
    double num1,num2;
    String operacia;
    Scanner in=new Scanner (System.in);
    System.out.println("Write 2 numbers");
    num1=in.nextDouble();
    num2=in.nextDouble();
    System.out.println("Choose the operation");
    operacia=in.nextLine();
    if (operacia.equals("+")){
        System.out.println("Your result is "+(num1+num2))   ;
    }
    else if (operacia.equals("-")){
        System.out.println("Your result is  "+(num1-num2))  ;
    }
    else if (operacia.equals("/")){
        System.out.println("Your result is  "+(num1/num2))  ;
    }
    else if (operacia.equals("*")){
        System.out.println("Your result is  "+(num1*num2))  ;
    }




}
}` 

它想要我2个数字,我写它们并且它们写“选择操作”及其结束。没有更多输入。非常感谢你:)

3 个答案:

答案 0 :(得分:2)

你的问题很简单。

只需用next()而不是nextLine()替换代码。实际上,代码返回的行是一个空白行。因此,当它到达条件语句时,它有一个空字符串并终止。

next()
Finds and returns the next complete token from this scanner.

nextLine()
Advances this scanner past the current line and returns the input that was skipped.

您的代码应该通过简单的更改来修复。

public static void main(String[] args) {
    double num1,num2;
    String operacia;

    Scanner in=new Scanner (System.in);
    System.out.println("Write 2 numbers");

    num1=in.nextDouble();
    num2=in.nextDouble();

    System.out.println("Choose the operation");
    operacia=in.next();

    if (operacia.equals("+")){
        System.out.println("Your result is "+(num1+num2))   ;
    }
    else if (operacia.equals("-")){
        System.out.println("Your result is  "+(num1-num2))  ;
    }
    else if (operacia.equals("/")){
        System.out.println("Your result is  "+(num1/num2))  ;
    }
    else if (operacia.equals("*")){
        System.out.println("Your result is  "+(num1*num2))  ;
    }
}

答案 1 :(得分:0)

Scanner#nextDouble()仅使用输入中的下一个标记作为double。输入两个数字时,它不会消耗您在键盘上使用 Enter 键入的新行。当执行到达operacia=in.nextLine();时,将消耗此新行,从不允许用户输入操作字符串。

要解决此问题,您需要使用Scanner#nextLine()读取整行并将其转换为双精度:

String input = in.nextLine();
num1 = Double.parseDouble(input);
input = in.nextLine();
num2 = Double.parseDouble(input);

答案 2 :(得分:-1)

我相信in.nextLine();操作只读到您输入2个数字的行的末尾。如果您希望程序仅考虑下一行,则必须先清除当前行。

试试这个,它应该有效:

System.out.println("Choose the operation");
in.nextLine(); //clear the current line
operacia=in.nextLine();