这个非常简单的代码有什么问题

时间:2015-07-12 17:28:27

标签: java if-statement calculator iostream

当我运行我的代码时,它一直工作直到它询问问题"你想要使用哪个操作(sum,subst,multi,div)"。无论用户选择什么,我的程序都没有回复!

为什么会这样?

import java.util.Scanner;
import java.io.*;

public class three3 {
    public static void main (String[] args) {
        int x;
        int y;
        int opera;
        String oper;

        Scanner in = new Scanner (System.in);
        System.out.println(" write the first number ");
        x = in.nextInt();

        System.out.println(" write the second number ");
        y = in.nextInt();

        System.out.println(" which operation do you want to use from ( sum , subst , multi , div )");
        oper = in.nextLine();

        if (oper == "sum") {
            opera=x+y;
            System.out.println(" the sum of two numbers is " + opera );
        }

        if (oper == "subst") {
            opera = x - y;
            System.out.println(" the subtraction of two numbers is " + opera );
        }

        if (oper == "multi") {
            opera = x * y;
            System.out.println(" the multi of two numbers is " + opera );
        }

        if (oper == "div") {
            opera = x / y;
            System.out.println(" the division of two numbers is " + opera );
        }
    }
}

4 个答案:

答案 0 :(得分:3)

因为没有执行这些if子句。 您将Strings==进行了比较,这是错误的。请改用oper.equals("sum")。请参阅this question以供参考。您的结论是始终将equals用于Strings

答案 1 :(得分:2)

你需要在最后一次调用in.nextLine()后立即调用in.nextInt()原因是只要求下一个整数不会消耗输入中的整行,所以你需要通过调用in.nextLine()跳到输入中的下一个换行符。

int y = in.nextInt();
in.nextLine();

每次调用不消耗整行的方法(例如调用nextBoolean()等)时,每次需要获取新行时都必须这样做。

此外,您不会检查字符串与==运算符的相等性,而是使用.equals() String方法。

答案 2 :(得分:1)

问题是,在输入int后单击enter时,in.nextLine()会隐式使用\ n插入的\ n。这意味着该程序不期望来自用户的任何其他输入。要解决此问题,您可以使用in.nextLine()之前使用新行,然后将其放入实际变量中,如下所示:

System.out.println(" write the second number ");
y=in.nextInt();

System.out.println(" which operation do you want to use from ( sum , subst , multi , div )");

in.nextLine(); //New line consuming the \n

oper=in.nextLine();

if(oper.equals("sum")){//replace == by .equals
   opera=x+y;
}

除此之外,正如runDOSrun所说,你应该将字符串的比较从a==b替换为a.equals(b)

答案 3 :(得分:0)

添加其他人的观点,您还应该考虑使用else if{}else{}语句,以便捕获无效的输入。