2016-04-16 5 views
0

私はずっと前に書いた本当に単純な二次式のコードを持っています。それは正常に実行されますが、それは私の最後のelseステートメントを出力する必要はありませんが出力されます!Java - 何もしないでプログラムの出力とelse文?

import javax.swing.JOptionPane; 

public class quadFormGUI { 
public void quadForm(){ 

    String aNumI = JOptionPane.showInputDialog("What is your 'A' variable?"); 
    String bNumI = JOptionPane.showInputDialog("What is your 'B' variable?"); 
    String cNumI = JOptionPane.showInputDialog("What is your 'C' variable?"); 

    double aNum = Double.parseDouble(aNumI); 
    double bNum = Double.parseDouble(bNumI); 
    double cNum = Double.parseDouble(cNumI); 

    double oneAns = (bNum * bNum) + (-aNum * cNum * 4); 
    if (oneAns < 0){ 
     JOptionPane.showMessageDialog(null,"The equation does not have a solution", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE); 
    }else{ 
     double twoAns = (double) Math.sqrt(oneAns); 
     double threeAns = -bNum + twoAns; 
     double xOne = threeAns/(2*aNum); 

     double fourAns = (bNum * bNum) + (-aNum * cNum * 4); 
     double fiveAns = (double) Math.sqrt(fourAns); 
     double sixAns = -bNum - fiveAns; 
     double xTwo = sixAns/(2*aNum); 


     JOptionPane.showMessageDialog(null,"X1 is " + xOne + " & X2 is " +xTwo, "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE); 
     xOne = xOne * -1; 
     xTwo = xTwo * -1; 
     if (xOne < 0 && xTwo < 0){ 
      JOptionPane.showMessageDialog(null,aNum +"(X " + xOne + ") (X " + xTwo + ")", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE); 
     }else if (xOne < 0 && xTwo > 0){ 
      JOptionPane.showMessageDialog(null,aNum +"(X " + xOne + ") (X + " + xTwo + ")", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE); 
     }else if (xOne > 0 && xTwo < 0){ 
      JOptionPane.showMessageDialog(null,aNum +"(X + " + xOne + ") (X " + xTwo + ")", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE); 
     }else if (xOne > 0 && xTwo > 0){ 
      JOptionPane.showMessageDialog(null,aNum +"(X + " + xOne + ") (X + " + xTwo + ")", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE); 
     }else{ 
      System.out.println("Wrong"); 
     } 
    } 
} 
} 

何があっても「間違って」出力されます。

+1

コードをステップ実行したときにデバッガからあなたに通知されるのは何ですか? –

+0

何も関係なく、最後のelseステートメントを除いて、私のコードは実行されません。 – StealthVice7

+0

いいえ、そうではありません。すべてが明確に*あなたが望むように*働かない、またはあなたはここに投稿する理由がありません。 'if(oneAns <0)'にブレークポイントを設定して、もう一度やり直してください。行ごとにコードをステップ実行し、変数の値を確認します。 **間違った*ステートメントにつながっている値は**正確に**表示されます。 –

答えて

0

はい、申し訳ありませんが、私は間違っていました。今、それを考え直して、なぜXが0になるのをチェックしたのですか?とにかく、プログラムは正常に動作し、私はちょうど常にA = 0、B = -3、C = 0を入力していました。

0

コンソールに「間違っている」が表示されている場合、プログラムフローは最後の「else」部分に移動します。これは、xOneまたはxTwoまたはその両方が0であることを意味します。 xOneまたはxTwoが0になる唯一の方法は、aとcに0を入力することです。また、JOptionPaneのshowInputBoxでは、値を入力した後に[OK]ボタンを押していない可能性があります。キャンセルボタンを押すとnull値が返され、文字列変数aNumI、bNumI、およびcNumIに格納されます。この2つのケースを除いて、あなたのプログラムはelseパートに行くことはできません。私はあなたのプログラムをオンラインIDEで実行しましたが、それはelse部分には行きません。唯一の違いは、JOptionPaneを使用していないことです。

入力ボックスを閉じた直後にaNumI、bNumI、およびcNumIの値を出力またはデバッグしてみます。私は彼らがヌルか「0」であると確信しています。あなたが見つけたものを教えてください。

+0

stringがNULLの場合、 'Double.parseDouble(String)'は例外をスローしませんか?それはゼロでなければならないと思いますか? – alvits

+0

そうです。指定された文字列がnullの場合、parseDoubleがNPEをスローすることはわかりませんでした。それを指摘してくれてありがとう。 – VHS

+0

私が前に言ったように、プログラムは働く。すべてを計算し、正しいif文の1つに入ります。問題はそれだけで止まらず、ステートメントをチェックし続けます(明らかに他のものは真ではありません)が、他に土地があります – StealthVice7