2016-10-09 61 views
0

我不知道爲什麼這不起作用我沒有得到編譯錯誤,但程序總是返回else語句。我應該以其他方式定義操作還是另外調用它?Java計算器與搖擺

import javax.swing.JOptionPane; 

public class Calculator1 { 

public static void main(String []Args) { 

    String firstNum; 
    String operation; 
    String secondNum; 

    firstNum = JOptionPane.showInputDialog("Input a number."); 
    secondNum = JOptionPane.showInputDialog("Input another number."); 

    double num1 = Double.parseDouble(firstNum); 
    double num2 = Double.parseDouble(secondNum); 

    operation = JOptionPane.showInputDialog("Input an operation sign."); 

    if (operation == "x") { 
    System.out.println(num1 * num2); 
    } 
    if (operation == "*") { 
    System.out.println(num1 * num2); 
    } 
    if (operation == "/") { 
    System.out.println(num1/num2); 
    } 
    if (operation == ":") { 
    System.out.println(num1/num2); 
    } 
    if (operation == "+") { 
    System.out.println(num1 + num2); 
    } 
    if (operation == "-") { 
    System.out.println(num1 - num2); 
    } 
    else { 
    System.out.println("Please enter an appropriate operation sign."); 
    } 

}}

+0

operation.equals( 「X」) –

+0

參見此[計算器示例](http://stackoverflow.com/a/7441804/418556)。它使用'ScriptEngine'來評估文本字段中的表達式。 –

回答

-1

你應該用 「X」 .equals(操作);

-1

首先,你需要使用if/else結構:

if (operation == "x") { 
    System.out.println(num1 * num2); 
    } 
    else if (operation == "*") { 
    System.out.println(num1 * num2); 
    } 
    else if (operation == "/") { 
    System.out.println(num1/num2); 
    } 
    // Continue... 

接下來的事情,在Java中,你不能比較兩個字符串與 '==' 操作的內容。你應該使用等於的方法:

if (operation.equals("x")) { 
    System.out.println(num1 * num2); 
    } 
    else if (operation.equals("*")) { 
    System.out.println(num1 * num2); 
    } 
    else if (operation.equals("/")) { 
    System.out.println(num1/num2); 
    } 
    // Continue... 

這應該工作,但。爲什麼不能使用'=='運算符?

字符串是java中的對象,你用引用處理對象。所以當你做'=='時,你是比較引用的地址。如果你想比較內容,你必須使用equals方法。

另一種選擇將是使用一個開關:

switch(operation) 
{ 
    case "+": 
      System.out.println(num1 + num2); 
      break; 
    case "-": 
      System.out.println(num1 - num2); 
      break; 
    case "/": 
      System.out.println(num1/num2); 
      break; 
    case "x": 
    case "*": 
       System.out.println(num1 * num2); 
       break; 
    default: 
       System.out.println("Error!"); 
} 
+0

@Biffen沒有if/else結構。操作時會打印出錯誤信息!=' - ',altought有效操作 – amchacon

+0

確實如此。我的錯。 – Biffen

0

問題是與你的if語句。如果操作不等於「 - 」,else語句將始終執行。這是因爲你的每個if語句都是一個單獨的代碼塊。

if(x) {} 

if(y) {} 

if(z) {} 
else {} 

您可以通過使用else而不是幾個if語句來完成此工作。

if(x) {} 
else if(y) {} 
else if(z) {} 
else {} 

這將工作,但正確的方法是使用switch語句。

switch(operation) { 
    case "x": result = num1 * num2 ; 
    break; 
    case "/": result = num1/num2; 
    break; 
    case "-": result = num1 - num2; 
    break, 
    default: System.out.println(errorMessage); 
}