ソフトウェア制作論 平成30年10月10日
第3章 エラーへの対応1 実行時エラーへの対応 <本日の学習のねらい> 第3章 エラーへの対応1 実行時エラーへの対応 <本日の学習のねらい> プログラムの実行時にエラーメッセージが発生する典型例を体験し、 エラーメッセージの見方やそれに基づくエラー修正(解消)の仕方を 学習する。 論理エラー(エラーは出ないがプログラムが意図通りに動作しない 場合のエラー)の典型例を体験し、その対応の仕方を学習する。
補足課題 private void jButtonGroupingActionPerformed(ActionEvent evt) { int month=Integer.parseInt(jTextFieldBirthMonth.getText()); String groupName; switch(month % 4) { case 0: groupName="Aグループです。"; break; case 1: groupName="Bグループです。"; case 2: groupName="Cグループです。"; case 3: } jLabelMessage.setText(groupName); 補足課題 ローカル変数 groupName が初期化されていない可能性があります
【基礎課題2-2 補足】 private void jButton1ActionPerformed(ActionEvent evt) { 【基礎課題2-2 補足】 112 113 114 115 116 117 118 119 private void jButton1ActionPerformed(ActionEvent evt) { int n=Integer.parseInt(jTextFieldN.getText()); int sum=0; for(int i=1; i<=n; i++) { sum=sum+i; } jTextFieldAns.setText(String.valueOf(sum)); エラーメッセージを見れば原因と該当箇所が分かる! 空文字を整数に変換できない。 Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at kiso2_2.NewJFrame.jButton1ActionPerformed(NewJFrame.java:113)
【基礎課題3-1】 86 87 88 89 90 91 92 93 94 95 96 97 private void jButtonAverageActionPerformed(ActionEvent evt) { int[] score={45,80,63,72,55,90};//受験者のテスト得点の定義 int n=score.length; //配列の大きさを取得 //テストの平均点を求める double average; int sum=0; for(int i=0;i<=n;i++) { sum=sum+score[i]; } average=sum/(double)(n); jTextFieldAns.setText(String.valueOf(average)); i<n Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6 at kiso3_1.NewJFrame.jButtonAverageActionPerformed(NewJFrame.java:93) at kiso3_1.NewJFrame.access$0(NewJFrame.java:86) ・・・
【基礎課題3-2】 private void jButtonKeisanActionPerformed(ActionEvent evt) { int n=Integer.parseInt(jTextFieldN.getText()); //2のn乗を求める int ans=1; for(int i=1;i<=n;i++); { ans=ans*2; } jTextFieldAns.setText(String.valueOf(ans)); for文が空回りしている。
【基礎課題3-3】 private void jButton1ActionPerformed(ActionEvent evt) { int n=Integer.parseInt(jTextFieldN.getText()); int sum=0; for(int i=1; i<=n; i=i++) { sum=sum+i; } jTextFieldAns.setText(String.valueOf(sum)); i++ i++:iの値を返してから1増やす。 ++i:1増やしてからiの値を返す。
【基礎課題3-4】 private void jButtonRyokinActionPerformed(ActionEvent evt) { //年齢の入力 int age=Integer.parseInt(jTextFieldAge.getText()); //料金の表示 if(age>=7 || age<65) { jTextFieldMessage.setText("あなたの料金は500円です。"); } else { jTextFieldMessage.setText("あなたの料金は無料です。"); && 全ての年齢に対して500円と表示される。
【基礎課題3-5】 int i=0; int sum=0; private void jButtonKeisanActionPerformed(ActionEvent evt) { int n=Integer.parseInt(jTextFieldN.getText()); int i=0; int sum=0; i=i+1; sum=sum+i; jTextFieldI.setText(String.valueOf(i)); jTextFieldSum.setText(String.valueOf(sum)); if(i>=n){ jButtonKeisan.setEnabled(false); jLabelEnd.setText("終了!"); }
【応用課題3-A】 private void jButtonHanteiActionPerformed(ActionEvent evt) { int year=Integer.parseInt(jTextFieldYear.getText()); if( (year % 4)==0 && (year % 100)!=0 && (year %400)==0 ) { jLabelMessage.setText("閏年です"); } else { jLabelMessage.setText("閏年ではありません。"); ||
private void jRadioButtonGuuActionPerformed(ActionEvent evt) { //コンピュータの手 0:グー 1:チョキ 2:パー int computer=(int)(3*Math.random()); switch (computer){ case 0: jLabelComputer.setText("グー"); jLabelResult.setText("おあいこ!"); break; case 1: jLabelComputer.setText("チョキ"); jLabelResult.setText("あなたの勝ち!"); case 2: jLabelComputer.setText("パー"); jLabelResult.setText("あなたの負け!"); } 【応用課題3-B】
private void jRadioButtonGuuActionPerformed(ActionEvent evt) { //コンピュータの手 0:グー 1:チョキ 2:パー int computer=(int)(3*Math.random()); switch (computer){ case 0: jLabelComputer.setText("グー"); jLabelResult.setText("おあいこ!"); break; case 1: jLabelComputer.setText("チョキ"); jLabelResult.setText("あなたの勝ち!"); case 2: jLabelComputer.setText("パー"); jLabelResult.setText("あなたの負け!"); } 【応用課題3-B】