【问题标题】:Troubles with Calculator [duplicate]计算器的问题[重复]
【发布时间】:2015-07-05 03:16:33
【问题描述】:

我正在使用 Java 开发一个非常简单的计算器,在选择操作后它似乎没有输出答案。代码如下:

import java.util.Scanner;
public class Calc {
public static void main(String[] args) {
    Scanner keyboard = new Scanner (System.in);
    Double fnum;
    Double snum; 
    Double answer;
    String operation; 
    System.out.println("Enter a number.");
    fnum = keyboard.nextDouble();
    System.out.println("Enter another number.");
    snum = keyboard.nextDouble();
    System.out.println("What operation do you wish for? [Multiplication, Addition, Subtraction, Division]");
    operation = keyboard.next(); 
    if (operation == "Multiplication" || operation == "multiplication" || operation == "*") { 
        answer = fnum * snum;
        System.out.print("Your answer is: " + answer);

    }   
    else if (operation == "Division" || operation == "division" || operation == "/") { 
        answer = fnum / snum;
        System.out.print("Your answer is: " + answer);

    }   
    else if (operation == "Addition" || operation == "addition" || operation == "+" || operation == "add") { 
        answer = fnum + snum;
        System.out.print("Your answer is: " + answer);

    }   
    else if (operation == "Subtraction" || operation == "subraction" || operation == "-" || operation == "subtract"){ 
        answer = fnum - snum;
        System.out.print("Your answer is: " + answer);

    }
      else {
        System.out.println("This is not valid.");
    }


}

}

这是输出:

Enter a number.
6
Enter another number.
6
What operation do you wish for? [Multiplication, Addition, Subtraction, Division]
Multiplication 
This is not valid.

任何帮助将不胜感激。 附言没有错误。 谢谢!

【问题讨论】:

  • Darth,用operation.compareTo("Multiplication")==0 替换operation == "Multiplication" 之类的东西就可以了。

标签: java calculator


【解决方案1】:

字符串应该通过 .eqauals() 方法进行比较。所以放入 if 子句 operation.equals("Multiplication")...等等...

【讨论】:

    【解决方案2】:

    您是通过引用而不是值来比较字符串。请改用.equals()

    【讨论】:

      【解决方案3】:

      有两个问题。扫描仪和条件存在问题

      keyboard.nextDouble()keyboard.next() 等...(除 .nextLine() 之外的所有内容)将换行符(\nEnter)留在缓冲区中。这可能会导致问题等。

      我建议使用keyboard.useDelimiter("\n"); 添加分隔符。这只需要做一次,可以在keyboard初始化之后立即做。

      这样,它只会将Enter 视为结束当前输入的信号。

      另外,条件必须全部使用.equals()方法或.equalsIgnoreCase(),写成:

      operation.equals("Multiplication");
      

      operation.equalsIgnoreCase("multiplication");
      

      【讨论】:

        【解决方案4】:

        正如@Sebastian 所说,您应该使用 equals 而不是 == 您可以通过以下方式对其进行一些改进以避免空格错误或大小写(大写或小写)问题:

        if (operation.trim().toUpperCase().equals("MULTIPLICATION") || operation.trim().equals("*"))
        

        这样它既适用于乘法乘法,也适用于 MultipliCation 等。

        您也可以使用 equalsIgnoreCase 获得相同的结果

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-18
          • 2017-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多