1

我的程序不工作。你觉得哪里不对?

Scanner in = new Scanner(System.in);
    System.out.print("Enter first number: ");
    double num1 = in.nextDouble();
    System.out.print("Enter second number: ");
    double num2 = in.nextDouble();
    System.out.println("Enter operation to perform: ");
    String oper = in.next();

    if(oper == "add" || oper == "addition" || oper == "+") {
        double sum = num1 + num2;
        System.out.printf("The sum of the two numbers is %d", sum);
    }

当我键入操作(这是一个字符串)时,程序终止。输出:

Enter first number: 12
Enter second number: 8
Enter operation to perform: 
"add"

Process completed.

我似乎找不到错误,请帮助?

4

9 回答 9

4

永远不要将字符串与运算符进行比较==——这是一个严重的错误。改用equals

if(oper.equals("add") || oper.equals("addition") || oper.equals("+")) {

于 2013-01-24T12:36:05.147 回答
2

不要使用==equals 方法:

if(oper.equals("add") || oper.equals("addition") || oper.equals("+")) 

==运算符用于比较内存空间中的地址,而不是被比较字符串的内容

于 2013-01-24T12:36:30.600 回答
2

不要使用==. 始终使用equals()

if("add".equals( oper ) || "addition".equals( oper ) || "+".equals( oper ) ) {

// ...
}

==您比较对象引用(或原始类型)。字符串是 Java 中的对象,因此当您比较oper和时add,它们都指向不同的对象。因此,即使它们包含相同的值,与的比较==也会失败,因为它们仍然是不同的对象。

于 2013-01-24T12:36:37.637 回答
1

做所有其他人所说的:使用equals或什至equalsIgnoreCase. (对此有很好的解释,所以在其他答案中。在这里重复它会很愚蠢。)

并在控制台中键入不带“的“添加”。

只有两者都做才会奏效。

于 2013-01-24T12:40:19.560 回答
1

使用equals(..) not比较字符串==

代替

if(oper == "add" || oper == "addition" || oper == "+") {

经过

if(oper.equals("add") || oper.equals("addition") || oper.equals("+")) {

==比较相同的参考不同的内容。

于 2013-01-24T12:36:46.303 回答
1
if(oper == "add" || oper == "addition" || oper == "+") {

应该

if(oper.equals("add") || oper .equals("addition") || oper.equals("+")) {

使用.equals方法检查两个字符串是否有意义地相等==运算符只检查两个引用变量是否引用同一个实例。

于 2013-01-24T12:36:12.823 回答
1

不要比较Strings 使用==. 改为使用equals

于 2013-01-24T12:36:15.857 回答
0

用这个

    if("add".equals(oper)  || "addition".equals(oper) || "+".equals(oper)) {
double sum = num1 + num2;
        System.out.printf("The sum of the two numbers is %d", sum);
    }
于 2013-01-24T12:37:39.810 回答
0

除了使用equals()or 还是更好equalsIgnore()的代替==for 字符串之外,您还需要输入addin command-lineinstead of "add"

否则,您必须将其比较为:

oper.equals("\"add\"")

另外,你似乎是有C背景的。通常在 Java 中,人们会使用:

System.out.println("The sum of the two numbers is " + sum);

代替

System.out.printf("The sum of the two numbers is %d", sum);

因为%d打印integer价值和not double价值。

于 2013-01-24T12:51:08.117 回答