2016-10-09 2 views
0

Я не знаю, почему это не работает. Я не вижу здесь ошибки компиляции, но программа всегда возвращает оператор else. Должен ли я определять операцию другим способом или называть ее каким-то еще?Java Calculator с Swing

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 ("х") –

+0

Смотрите также это [калькулятор пример] (http://stackoverflow.com/a/7441804/418556). Он использует 'ScriptEngine' для оценки выражения в текстовом поле. –

ответ

-1

Вы должны использовать "х" .equals (операции);

-1

Во-первых, вам нужно использовать, если/другое строение:

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

@ Биффен без if/else структуры. Выведет сообщение об ошибке при работе! = '-', у altought была действительная операция – amchacon

+0

Это правда. Виноват. – Biffen

0

Проблема с вашими если заявления. Оператор 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); 
}