0

我只有 15 岁,并且是 java 新手,所以我正在尝试构建一个简单的计算器,但我似乎无法弄清楚为什么这个 if 语句被忽略了。我已经检查以确保所有值都被存储,是的,它们是,所以我看不到任何其他可以解释这一点的问题。任何帮助都会很棒!在第二个类中寻找注释 //This if 语句

第一课

public class CalculatorOperations {

    double fnum, snum,answer;
    String operation;

    void plus(){

        operation="+";
        answer = fnum + snum;
    }

    void subtract(){

        operation="-";
        answer = fnum - snum;
    }

    void multiple(){

        operation="*";
        answer = fnum * snum;
    }

    void divide(){

        operation="/";
        answer = fnum / snum;
    }

    void invalidOperation(){

        System.out.println("Invalid operation.");
    }

    void showAttributes(){
        System.out.println(fnum);
        System.out.println(snum);
        System.out.println(operation);
    }
}

第二课

    import java.util.Scanner;

public class calculatorApplication {

    public static void main(String [] args){

        CalculatorOperations Operators = new CalculatorOperations();
        Scanner userInput = new Scanner(System.in);

        String loop2 = null;
        boolean loop;

         while (loop = true){

            // Getting input and storing it
                System.out.print("Please enter first number: ");
                Operators.fnum = userInput.nextDouble();

                System.out.println("TEST:"+Operators.fnum);

                System.out.print("Please enter second number: ");
                Operators.snum = userInput.nextDouble();

                System.out.println("TEST:"+Operators.snum);

                System.out.print("Please enter operation (+, -, * or /): ");
                Operators.operation = userInput.next();

                System.out.println("TEST:"+Operators.operation);

                // this if statement

                if (Operators.operation == "+") {
                    Operators.plus();

                } else if (Operators.operation == "-") {
                    Operators.subtract();

                } else if (Operators.operation == "*") {
                    Operators.multiple();

                } else if (Operators.operation == "/") {
                    Operators.divide();

                } else {

                    Operators.invalidOperation();
                }



                System.out.println("Answer: " +Operators.answer);

                System.out.print("Would you like to do another sum? (yes or no): ");
                loop2 = userInput.next();


         }

         if (loop2.equals("yes") || loop2.equals("Yes")){
             loop = true;
                System.out.println();
                System.out.println();
            }else{
                loop = false;
                  // Closes scanner to prevent resource leaks 
                userInput.close();
                System.exit(0);
            }


                }

    }
4

3 回答 3

2

将字符串与==一般情况进行比较不会按照您希望的方式工作。这是因为字符串是对象并==相互比较对象引用,而不是检查字符串是否包含相同的文本。

请尝试String.equals

if (Operators.operation.equals("+")) {
... //and of course the same for the rest of the statements

祝你的程序好运!

于 2013-11-03T17:27:03.100 回答
0

使用.equals(String)方法,而不是==. 您的 if 结构将更改为:

if (Operators.operation.equals("+")) { Operators.plus();

} else if (Operators.operation.equals("-")) {
    Operators.subtract();

} else if (Operators.operation.equals("*")) {
    Operators.multiple();

} else if (Operators.operation.equals("/")) {
    Operators.divide();

} else {
    Operators.invalidOperation();
}

.equals(String)用于比较字符串,而==用于比较其他所有内容。==正在比较对对象的引用,.equals(String)用于比较String

另外,更改while (loop = true)while(loop)or while (loop == true); 否则,您表示您实际上正在更改loop.

于 2013-11-03T17:32:26.267 回答
0

您不想将字符串与==进行比较,因为这样做是在比较字符串的引用,而不是字符串的值。您需要使用.equals方法。

if (Operators.operation.equals("+"))

javadoc

布尔等于(对象 anObject)

当且仅当参数是表示与此对象相同的字符序列的 String 对象时返回 true。

另外,你需要改变

while (loop = true)

while (loop)

=是赋值运算符,==是比较运算符。

于 2013-11-03T17:34:47.707 回答