2013-11-24 3 views
-2

Когда я запускаю свой код для первого раунда (mult.), Он работает, но если я попробую еще раз, добавив «ответ» для первого приглашения, он даст мне 0. Почему?GUI-калькулятор возвращает 0

package gui.calc; 

import javax.swing.JOptionPane; 

public class GUICalc { 
    public static double mult(double mult1, double mult2) { 
     mult1 *= mult2; 
     return mult1; 
    } 

    public static double div(double div1, double div2) { 
     div1 /= div2; 
     return div1; 
    } 

    public static double add(double add1, double add2) { 
     add1 += add2; 
     return add1; 
    } 

    public static double sub(double sub1, double sub2) { 
     sub1 -= sub2; 
     return sub1; 
    } 

    public static void main(String[] args) { 
     Boolean goAgain = true; 
     double finalAns = 1; 
     while (goAgain == true) { 

      Object[] options = { "*", "/", "+", "-" }; 
      int n = JOptionPane.showOptionDialog(null, 
        "Choose your        operationr", 
        "this is null", JOptionPane.YES_NO_CANCEL_OPTION, 
        JOptionPane.QUESTION_MESSAGE, null, options, options[0]); 
      String s1 = JOptionPane.showInputDialog(null, "enter nums", 
        "Enter NUm", JOptionPane.ERROR_MESSAGE); 
      String s2 = JOptionPane.showInputDialog(null, "enter nums", 
        "Enter NUm", JOptionPane.ERROR_MESSAGE); 
      double d1 = 0; 
      double d2 = 0; 
      if (s1.equalsIgnoreCase("answer")) { 
       d1 = finalAns; 
      } 

      else if (s2.equalsIgnoreCase("answer")) { 
       d2 = finalAns; 
      } else { 
       d1 = Double.parseDouble(s1); 
       d2 = Double.parseDouble(s2); 
      } 
      if (n == 0) { 
       double mult1 = mult(d1, d2); 
       JOptionPane.showConfirmDialog(null, mult1, "dsfa", 
         JOptionPane.ERROR_MESSAGE); 
       finalAns = mult1; 
      } else if (n == 1) { 
       double div1 = div(d1, d2); 
       JOptionPane.showConfirmDialog(null, div1, "dsfa", 
         JOptionPane.ERROR_MESSAGE); 
       finalAns = div1; 
      } else if (n == 2) { 
       double plus1 = add(d1, d2); 
       JOptionPane.showConfirmDialog(null, plus1, "dsfa", 
         JOptionPane.ERROR_MESSAGE); 
       finalAns = plus1; 
      } else if (n == 3) { 
       double sub1 = sub(d1, d2); 
       JOptionPane.showConfirmDialog(null, sub1, "dsfa", 
         JOptionPane.ERROR_MESSAGE); 
       finalAns = sub1; 
      } 
      JOptionPane.showMessageDialog(null, finalAns, "hi", 
        JOptionPane.ERROR_MESSAGE); 
      if (JOptionPane.showConfirmDialog(null, "GO AGAIN?", "daf", 
        JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) { 
       goAgain = false; 
      } 
     } 
    } 
} 
+0

Научиться использовать отладчик. –

+0

У меня есть отладчик, я думаю. Я использую netbeans. В чем проблема с этим? – Ben

+0

Это для вас, чтобы узнать, и отладчик поможет вам шаг за шагом выполнить ваш код и проверить значения ваших переменных. –

ответ

1

Здесь проблема заключается в:

 double d1 = 0; 
     double d2 = 0; 
     if (s1.equalsIgnoreCase("answer")) { 
      d1 = finalAns; 
     } 

     else if (s2.equalsIgnoreCase("answer")) { 
      d2 = finalAns; 
     } else { 
      d1 = Double.parseDouble(s1); 
      d2 = Double.parseDouble(s2); 
     } 

Если s1 является ответ, то первым if блок будет выполнен. Это установит d1 = finalAns, но d2 просто будет 0, потому что это то, что было инициализировано, и ему никогда не присваивается ничего другого. Это то, что, я думаю, вы хотели сделать:

 double d1 = 0; 
     double d2 = 0; 
     if (s1.equalsIgnoreCase("answer")) { 
      d1 = finalAns; 
     } else { 
      d1 = Double.parseDouble(s1); 
     } 

     if (s2.equalsIgnoreCase("answer")) { 
      d2 = finalAns; 
     } else { 
      d2 = Double.parseDouble(s2); 
     } 
Смежные вопросы