2016-12-11 5 views
-1

よしは、(...今日... Javaで)私の問題のほとんどを通じて得たANOTHER IndexOutofBounds例外

、私は、私の質問をステップ私の値を取得するために管理し...しかし用何らかの理由で、ループのすべての反復中に範囲外の例外がスローされています...実際にはプログラムの終了や何かを引き起こしていませんが、私は質問を通してページを呼び出し、応答を返します。最後の質問が尋ねられるまでループの各カウントのエラー。 インデックスカウンタがリストのサイズのときに実行されるcalcPersonnelRisk()をコメントアウトすると、ANYエラーのない質問が実行されます。なぜなら、そのメソッドは自分の答えから値を私の変数に代入するだけで、そのコードを持っているのはどうしてこんなことになるのか分からないからです。私はプログラマーとしてまだ初期段階にあり、効率的にデバッグする能力を開発しています...しかし、一見してどんな入力も感謝しています。前もって感謝します!

public class ORMRiskCalculator extends JFrame{ 

private JButton yesButton, noButton, exitButton, enterButton; 
private JLabel message; 
private JTextField textField; 
private JFrame frmOrmRiskCalculator; 
private final ButtonGroup buttonGroup = new ButtonGroup(); 
private int questionIndex; 

private ArrayList<String> questions = new ArrayList<String>(); 
private ArrayList<Integer> responses = new ArrayList<Integer>(); 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 

    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       ORMRiskCalculator window = new ORMRiskCalculator(); 
       window.frmOrmRiskCalculator.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public ORMRiskCalculator() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frmOrmRiskCalculator = new JFrame(); 
    frmOrmRiskCalculator.getContentPane().setBackground(new Color(0, 102, 153)); 
    frmOrmRiskCalculator.setTitle("ORM Risk Calculator"); 
    frmOrmRiskCalculator.setBounds(100, 100, 650, 500); 
    frmOrmRiskCalculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmOrmRiskCalculator.getContentPane().setLayout(null); 

    message = new JLabel("Create a new ORM Report?"); 
    message.setVerticalAlignment(SwingConstants.CENTER); 
    message.setHorizontalAlignment(SwingConstants.CENTER); 
    message.setFont(new Font("Tahoma", Font.BOLD, 20)); 
    message.setBounds(10, 10, 614, 109); 
    frmOrmRiskCalculator.getContentPane().add(message); 


    yesButton = new JButton("YES"); 
    yesButton.setFont(new Font("Tahoma", Font.BOLD, 14)); 
    yesButton.setForeground(Color.BLACK); 
    yesButton.setBackground(Color.GREEN); 
    yesButton.setBounds(80, 240, 200, 50);  
    frmOrmRiskCalculator.getContentPane().add(yesButton); 
    yesButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      questions.clear(); 
      responses.clear(); 

      getAnswers(); 
     } 
    }); 

    noButton = new JButton("NO"); 
    noButton.setBackground(Color.RED); 
    noButton.setFont(new Font("Tahoma", Font.BOLD, 14)); 
    noButton.setBounds(80, 330, 200, 50); 
    frmOrmRiskCalculator.getContentPane().add(noButton); 
    noButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     System.exit(0); 
     } 
    }); 

    textField = new JTextField(); 
    textField.setBounds(350, 275, 100, 50); 
    textField.setFont(new Font("Tahoma", Font.BOLD, 20)); 
    frmOrmRiskCalculator.getContentPane().add(textField); 
    textField.setColumns(10); 

    enterButton = new JButton("Enter"); 
    enterButton.setFont(new Font("Tahoma", Font.BOLD, 14)); 
    enterButton.setBounds(450, 275, 100, 50); 
    buttonGroup.add(enterButton); 
    frmOrmRiskCalculator.getContentPane().add(enterButton); 

    exitButton = new JButton("EXIT"); 
    exitButton.setBackground(Color.GRAY); 
    exitButton.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 18)); 
    exitButton.setBounds(80, 425, 470, 25); 
    frmOrmRiskCalculator.getContentPane().add(exitButton); 
    exitButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     shutDown(); 
     } 
    }); 
} 

private void setupQuestions(){ 
    questions.add("How many mission personnel had less than normal rest?"); 
    questions.add("How many mission personnel have an illness that may impact the mission?"); 
    questions.add("How many mission personnel are taking medications that may affect duty?"); 
    questions.add("How many mission personnel are scheduled to work longer than ten hours?"); 
    questions.add("How many mission personnel worked greater than ten hours on the previous shift?"); 
    questions.add("How many mission personnel swapped from night shift to day shift in the last 24 hrs?"); 
    questions.add("How many mission personnel are still in a training status or are a TEMP RCOs)?"); 
    questions.add("How many mission personnel are on duty during flight operations?"); 
} 
protected void getAnswers() { 
    setupQuestions(); 
    yesButton.setVisible(false); 
    noButton.setVisible(false); 
    message.setFont(new Font("Tahoma", Font.BOLD, 14)); 
    message.setText(questions.get(questionIndex++)); 
    enterButton.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
       int r= Integer.parseInt(textField.getText().trim()); 
       responses.add(r); 
       textField.setText(""); 
       if(questionIndex < questions.size()) 
       message.setText(questions.get(questionIndex++)); 
       else {message.setText("Done!"); calcPersonnelRisk();} 
       //do finishing stuff, move to the next method! 
     }}); 


}//end getAnswers 
protected void calcPersonnelRisk() { 

    int lessThanNormalRest, illness, meds, lengthOfDay, previousDutyDay, crewExperience, 
    shiftSwap, minManning; 
    //probably better in this instance to use TreeMaps for future iterations of this program? 
    lessThanNormalRest = responses.get(0); 
    illness = responses.get(1); 
    meds = responses.get(2); 
    lengthOfDay=responses.get(3); 
    previousDutyDay=responses.get(4); 
    shiftSwap=responses.get(5); 
    crewExperience = responses.get(6); 
    if(responses.get(7) >= 4)minManning = 2; 
    else minManning=0; 

    PersonnelRisk pRisk = new PersonnelRisk(lessThanNormalRest,illness,meds,lengthOfDay, 
      previousDutyDay,crewExperience,shiftSwap,minManning); 
    message.setFont(new Font("Tahoma", Font.BOLD, 20)); 
    message.setText("Your calculated personnel Risk is: "+pRisk.calcRisk() 
      +"\n\t Run again?"); 
    yesButton.setVisible(true); 
    noButton.setVisible(true); 


} 

private void shutDown(){ 
    message.setFont(new Font("Tahoma", Font.BOLD, 26)); 
    message.setText("Good bye!");//why doesn't this work? Sleeps, and closes, 
    //doesn't show my text message. 

    try { 
     Thread.sleep(1000);//also tried a wait(), notify(), but it seemed like the notify never allowed it to get to the exit command 
    } catch(InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
    } 
    System.exit(0); 
}//end shutDown method 
}//endORMRiskCalculator 

答えて

0

は申し訳ありませんが私はそれを簡単に見てましたが、私は[はい]ボタンを何が起こっているかを理解していれば...アクションの魔女が質問リストをクリアしgetAnswerは魔女がそう質問リストから値を取得しようと呼び出すトリガー

+0

ユーザーが別の計算を実行したい場合にエラーが発生した後に追加したクリア関数。そして、現在のところ、ユーザーがはいボタンを1回押すだけで質問が始まり、それはもはや表示されないように設定されています。 – Ted

+1

私はあなたが何を意味するかを見ます!はい、主にgetAnswersメソッドで配列を作成する代わりに配列を作成していれば、間違いなくいくつかの問題が発生します...固定!今は終わりまでエラーを投げているわけではありません。 (私がループ全体を完了した後) – Ted

+1

助けてくれてうれしいです。この質問は閉じられていますか?私たちは新しいコードを持っていないので、何が起きているのかは分かりません –

関連する問題