2017-03-08 2 views
0

私は、応答をコンパイルしてデータを出力する小さなプログラムに対して、事前テスト条件としてwhileループを使用する方法について読んでいますが、何を入力しても問題はありません入力ボックスは無効であると私に伝えます。私は何が間違っているのか分かりません。関連するコードは次のとおりです。whileループ内での文のエラー

import javax.swing.JOptionPane; 

public class SurveySummarization 
{ 
    public static void main(String[] args) 
    { 


     int agree = 0; 
     int disagree = 0; 
     int neutral = 0; 
     int totalVotes = 0; 
     int input; 
     String inputString; 


     inputString = JOptionPane.showInputDialog("Response: \n" + 
        "(1=agree, 2=disagree, 3=no opinion, -1=exit)"); 
     input = Integer.parseInt(inputString); 

     while (input != -1) 
     { 
      if (input == 1) 
      { 
       agree += 1; 
       totalVotes += 1; 
      } 
      if (input == 2) 
      { 
       disagree += 1; 
       totalVotes += 1; 
      } 
      if (input == 3) 
      { 
       neutral += 1; 
       totalVotes += 1; 
      } 
      else { 
       JOptionPane.showMessageDialog(null, "invalid response " 
             + input); 
      } 
     } 


    } 
} 
+5

デバッグしようとしましたか?デバッグはキーです。95%のケースで役立ちます。コードの各行で 'inputString'、' input'の値は何ですか?また、 'else'ステートメントは3 **以外の' input'の値を**トリガーします。 –

答えて

2

elseが適切に使用されていないためです。あなたのコードを見れば、あなたの最終ifがあれば入力!= 3、無効な応答を示し

if (input == 3) 
     { 
      neutral += 1; 
      totalVotes += 1; 
     } 
     else { 
      JOptionPane.showMessageDialog(null, "invalid response " 
            + input); 
     } 

意味があります。

これを修正するには、ifをelse if (input == 2) ...(== 3と同じ)に変更します。

+2

だから、基本的にelseは最終的なif文にのみ適用されますか? – Josh

+2

そうです。現時点では、すべてのifは完全に別個の条件であり、コンピュータは個々に個別に処理されています。 –

+0

これを達成するために私が何をお勧めしますか? – Josh

1

スティーブが指摘している通り、が正しく配置されていません。私はの場合はスタンドアロンのifsの代わりに入れようとしていたと思います。 import javax.swing.JOptionPane;

public class SurveySummarization 
{ 
    public static void main(String[] args) 
    { 


     int agree = 0; 
     int disagree = 0; 
     int neutral = 0; 
     int totalVotes = 0; 
     int input; 
     String inputString; 


     inputString = JOptionPane.showInputDialog("Response: \n" + 
       "(1=agree, 2=disagree, 3=no opinion, -1=exit)"); 
     input = Integer.parseInt(inputString); 

     while (input != -1) 
     { 
      if (input == 1) 
      { 
       agree += 1; 
       totalVotes += 1; 
      }else if (input == 2) 
      { 
       disagree += 1; 
       totalVotes += 1; 
      } else if (input == 3) 
      { 
       neutral += 1; 
       totalVotes += 1; 
      } 
      else { 
       JOptionPane.showMessageDialog(null, "invalid response " 
            + input); 
      } 
     } 

    } 
} 
0

あなたが知っているので、入力がの場合は、もし第一および他の最終とともに、それ以外の使用すべきであると同時に、1 3に等しくすることができません。あなたの現在のコードは、入力が1であるかどうかをチェックします。 2と等しいかどうかを確認しますが、前のステートメントは入力が1に等しいと結論づけました。したがって、== 2、または== 3をチェックする必要はありません。if/elseを使用すると、一緒に連鎖するときには単一の条件を満たすだけです。条件を満たす条件にヒットしたら、残りの条件はスキップします。

if (input == 1) 
{ 
    agree += 1; 
    totalVotes += 1; 
} 
else if (input == 2) 
{ 
    disagree += 1; 
    totalVotes += 1; 
} 
else if (input == 3) 
{ 
    neutral += 1; 
    totalVotes += 1; 
} 
else { 
    JOptionPane.showMessageDialog(null, "invalid response " + input); 
} 
+0

ああそうです!本当にありがとう! – Josh

+0

ようこそ@ジョシュ –