Presentation is loading. Please wait.

Presentation is loading. Please wait.

ソフトウェア制作論 平成30年10月3日.

Similar presentations


Presentation on theme: "ソフトウェア制作論 平成30年10月3日."— Presentation transcript:

1 ソフトウェア制作論 平成30年10月3日

2 第2章 エラーへの対応1 文法エラーへの対応 変数名未解決 { }の未対応 未定義メソッドの指定 型の不一致・誤用 その他 構文エラー

3 変数名未解決 (例)  private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar=Integer.parseInt(jTextFieldDollar.getText()); double rate=112.6; //2018年9/21時点のドル→円の為替レート int yen=(int) (rate*dolar); jTextFieldYen.setText(String.valueOf(yen)); } このソースにはエラーが一箇所あります。それはどこでしょうか?

4 変数名未解決 private void jButtonExchangeActionPerformed(ActionEvent evt) {
変数名未解決  private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar=Integer.parseInt(jTextFieldDollar.getText()); double rate=100.6; //2016年9/27時点のドル→円の為替レート int yen=(int) (rate*dolar); jTextFieldYen.setText(String.valueOf(yen)); } dolar cannot be resolved to a variable このソースにはエラーが一箇所あります。それはどこでしょうか? dolarという変数はない。宣言しているのはdollar 型宣言していない変数を使用すると・・・ → 変数として解決できないというエラーメッセージが出る。

5 変数名未解決 (演習時における)発生頻度が高い事例
変数名未解決 (演習時における)発生頻度が高い事例 テキストフィールドなどコンポーネントの名前が宣言したものと異 なっている。 jTextFiled1と宣言しているのに、jTextFieldAns等と使用 する。等 単純なスペルミス。    dateと宣言してdataと使用する、等 大文字と小文字の誤記。   Dataと宣言してdataと記述する。等 → 「Java言語で用いられてい る変数命名ルール」(9/26学習) 参照 型宣言せずに使用する。

6 { }の未対応 (例1) public class NewJFrame extends javax.swing.JFrame { ・・・
{ }の未対応 (例1) public class NewJFrame extends javax.swing.JFrame { ・・・  void jButton1ActionPerformed(ActionEvent evt) {  int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {    jTextField2.setText("奇数です。");} } このソースにはエラーが一箇所あります。それはどこでしょうか?

7 { }の未対応 (例1) public class NewJFrame extends javax.swing.JFrame { ・・・
{ }の未対応 (例1) public class NewJFrame extends javax.swing.JFrame { ・・・  void jButton1ActionPerformed(ActionEvent evt) {  int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {    jTextField2.setText("奇数です。");} } 構文エラーがあります。"}" を挿入して ClassBody を完了してください このソースにはエラーが一箇所あります。それはどこでしょうか? メソッドjButton1ActionPerformed()の{}が閉じていない。

8 { }の未対応 (例1)修正 ① まず字下げを行い、ソースを整形する。
{ }の未対応  (例1)修正 ① まず字下げを行い、ソースを整形する。 public class NewJFrame extends javax.swing.JFrame { ・・・  void jButton1ActionPerformed(ActionEvent evt) {  int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {    jTextField2.setText("奇数です。");} } public class NewJFrame extends javax.swing.JFrame { ・・・   void jButton1ActionPerformed(ActionEvent evt) {   int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {     jTextField2.setText("奇数です。"); } 構文エラーがあります。"}" を挿入して ClassBody を完了してください } ② 正しい位置に}を挿入する。 このソースにはエラーが一箇所あります。それはどこでしょうか? メソッドjButton1ActionPerformed()の{}が閉じていない。

9 { }の未対応 (例2) public class NewJFrame extends javax.swing.JFrame { ・・・
{ }の未対応  (例2) public class NewJFrame extends javax.swing.JFrame { ・・・   void jButton1ActionPerformed(ActionEvent evt) {   int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); else {     jTextField2.setText("奇数です。"); } public class NewJFrame extends javax.swing.JFrame { ・・・  void jButton1ActionPerformed(ActionEvent evt) {  int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {    jTextField2.setText("奇数です。");} } 構文エラーがあります。"}" を挿入して ClassBody を完了してください このソースにはエラーが一箇所あります。それはどこでしょうか?

10 { }の未対応 (例2) public class NewJFrame extends javax.swing.JFrame { ・・・
{ }の未対応  (例2) public class NewJFrame extends javax.swing.JFrame { ・・・   void jButton1ActionPerformed(ActionEvent evt) {   int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); else {     jTextField2.setText("奇数です。"); } public class NewJFrame extends javax.swing.JFrame { ・・・  void jButton1ActionPerformed(ActionEvent evt) {  int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {    jTextField2.setText("奇数です。");} } トークン "else" に構文エラーがあります。このトークンを削除してください 構文エラーがあります。"}" を挿入して ClassBody を完了してください このソースにはエラーが一箇所あります。それはどこでしょうか? if文の{}が閉じていない。

11 { }の未対応 (例2)修正 public class NewJFrame extends javax.swing.JFrame { ・・・
{ }の未対応  (例2)修正 public class NewJFrame extends javax.swing.JFrame { ・・・   void jButton1ActionPerformed(ActionEvent evt) {   int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {     jTextField2.setText("奇数です。"); public class NewJFrame extends javax.swing.JFrame { ・・・   void jButton1ActionPerformed(ActionEvent evt) {   int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); else {     jTextField2.setText("奇数です。"); } public class NewJFrame extends javax.swing.JFrame { ・・・  void jButton1ActionPerformed(ActionEvent evt) {  int a=Integer.parseInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {    jTextField2.setText("奇数です。");} } 正しい位置に}を挿入する。 トークン "else" に構文エラーがあります。このトークンを削除してください 構文エラーがあります。"}" を挿入して ClassBody を完了してください if文の{}が閉じていない。

12 未定義のメソッド指定(メソッド名誤記)(例)
public class NewJFrame extends javax.swing.JFrame { ・・・   void jButton1ActionPerformed(ActionEvent evt) {   int a=Integer.parsInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {     jTextField2.setText("奇数です。"); このソースにはエラーが一箇所あります。それはどこでしょうか?

13 未定義のメソッド指定(メソッド名誤記)(例)
public class NewJFrame extends javax.swing.JFrame { ・・・   void jButton1ActionPerformed(ActionEvent evt) {   int a=Integer.parsInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {     jTextField2.setText("奇数です。"); メソッド parsInt(String) は型 Integer で未定義です 未定義のメソッドを指定(ほとんどの場合はスペルミス) このソースにはエラーが一箇所あります。それはどこでしょうか?

14 未定義のメソッド指定(メソッド名誤記)(例)修正
public class NewJFrame extends javax.swing.JFrame { ・・・   void jButton1ActionPerformed(ActionEvent evt) {   int a=Integer.parsInt(jTextField1.getText()); if( (a%2)==0 ) { jTextField2.setText("偶数です。"); } else {     jTextField2.setText("奇数です。"); parseInt(jTextField1.getText()); 未定義のメソッドを指定(ほとんどの場合はスペルミス)

15 基礎課題2-1 105 106 107 108 109 110 private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar=Integer.parseInt(jTextFieldDollar.getText()); double rate=112.6; //2018年9/21時点のドル→円の為替レート int yen=(int) (rate*dollar); jTextFieldYen.setText(String.valueOf(yen)); } 109行目 エラー箇所: エラーの原因 テキストフィールド名の誤り。「jTextField1」と命名したテキストフィールド名 を「jTextFieldYen」として使用している。 エラーの修正 テキストフィールドコンポーネントのnameプロパティを「jTextFieldYen」に変 更する。

16 基礎課題2-2 public class NewJFrame extends javax.swing.JFrame { ・・・
 ・・・ 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)); 112 113 114 115 116 117 118 119 原因:メソッドの{}が閉じていない。}が不足している。 修正:119行目に}を挿入する。

17 基礎課題2-2 public class NewJFrame extends javax.swing.JFrame { ・・・
 ・・・ 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)); 112 113 114 115 116 117 118 119 原因:メソッドの{}が閉じていない。}が不足している。 修正:119行目に}を挿入する。

18 基礎課題2-3 private void jButtonJudgeActionPerformed(ActionEvent evt) { 95
96 97 98 99 100 101 102 private void jButtonJudgeActionPerformed(ActionEvent evt) { if(jCheckBox1.getSelected()) { jLabelMessage.setText("あなたはこの科目に向いています。"); } else { jLabelMessage.setText("あなたはこの科目に向いていません。"); 原因:getSelected()というメソッドは存在しない。 修正:getSelected()→isSelected()に修正する。

19 型の不一致・誤用 (例1) private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar= Integer.parseInt(jTextFieldDollar.getText()); int rate=112.6; //2018年9/21時点のドル→円の為替レート int yen=(int) (rate*dollar); jTextFieldYen.setText(String.valueOf(yen)); } このソースにはエラーが一箇所あります。それはどこでしょうか?

20 型の不一致 (例1) private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar= Integer.parseInt(jTextFieldDollar.getText()); int rate=112.6; //2018年9/21時点のドル→円の為替レート int yen=(int) (rate*dollar); jTextFieldYen.setText(String.valueOf(yen)); } 型の不一致: double から int には変換できません このソースにはエラーが一箇所あります。それはどこでしょうか? 右辺と左辺で型が一致していない。 整数型変数に実数値を代入できない。

21 型の不一致 (例1) 修正 実数型変数 = 整数型変数(整数値) はOK
型の不一致 (例1) 修正 private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar= Integer.parseInt(jTextFieldDollar.getText()); double rate=112.6; //2018年9/21時点のドル→円の為替レート int yen=(int) (rate*dollar); jTextFieldYen.setText(String.valueOf(yen)); } private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar= Integer.parseInt(jTextFieldDollar.getText()); int rate=112.6; //2017年9/30時点のドル→円の為替レート int yen=(int) (rate*dollar); jTextFieldYen.setText(String.valueOf(yen)); } 型の不一致: double から int には変換できません 型の異なる変数同士の代入はできない。 ただし・・・ 実数型変数 = 整数型変数(整数値) はOK

22 【基礎課題2-4】 private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar= Integer.parseInt(jTextFieldDollar.getText()); double rate=112.6; //2018年9/21時点のドル→円の為替レート int yen= rate*dollar; jTextFieldYen.setText(String.valueOf(yen)); } int yen= (int) (rate*dollar); 型の不一致: double から int には変換できません このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? 型の不一致。整数型変数=実数値となっている。

23 型の不一致・誤用 (例2) private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar= Integer.parseInt(jTextFieldDollar.getText()); double rate=112.6; //2018年9/21時点のドル→円の為替レート int yen=(int) (rate*dollar); jTextFieldYen.setText(yen); } 型 JTextComponent のメソッド setText(String) は引数 (int) に適用できません このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? 文字列型として指定された引数に整数型変数を使用している。

24 型の不一致・誤用 (例2) 修正 private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar= Integer.parseInt(jTextFieldDollar.getText()); double rate=112.6; //2018年9/21時点のドル→円の為替レート int yen=(int) (rate*dollar); jTextFieldYen.setText(yen); } private void jButtonExchangeActionPerformed(ActionEvent evt) { int dollar= Integer.parseInt(jTextFieldDollar.getText()); int rate=100.6; //2016年9/27時点のドル→円の為替レート int yen=(int) (rate*dollar); jTextFieldYen.setText(String.valueOf(yen)); } 型の不一致: double から int には変換できません jTextFieldYen.setText(String.valueOf(yen)); このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? 文字列型として指定された引数に整数型変数を使用している。

25 構文エラー (例1) private void jButton1ActionPerformed(ActionEvent evt) {
int n=Integer.parseInt(jTextField1.getText()); int sum=0; for(int i=1;i<=n i++){ sum=sum+i; } jTextField2.setText(String.valueOf(sum)); トークン "n" に構文エラーがあります。このトークンの後には ; を指定する必要があります このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? for文の反復条件指定部分の区切り;が抜けている。 構文エラーとはjava言語の文法上の規則を破っているということ。

26 構文エラー (例1) 修正 private void jButton1ActionPerformed(ActionEvent evt) {
構文エラー (例1) 修正 private void jButton1ActionPerformed(ActionEvent evt) { int n=Integer.parseInt(jTextField1.getText()); int sum=0; for(int i=1;i<=n; i++){ sum=sum+i; } jTextField2.setText(String.valueOf(sum)); このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? for文の反復条件指定部分の区切り;が抜けている。 構文エラーとはjava言語の文法上の規則を破っているということ。

27 構文エラー (例2) private void jButton1ActionPerformed(ActionEvent evt) {
構文エラー (例2)  private void jButton1ActionPerformed(ActionEvent evt) { int n=Integer.parseInt(jTextField1.getText()); int sum=0; for(int i=1;i<=n; i++ { sum=sum+i; } jTextField2.setText(String.valueOf(sum)); 構文エラーがあります。") Statement" を挿入して ForStatement を完了してください このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? for文の()が閉じていない。

28 構文エラー (例2) 修正 private void jButton1ActionPerformed(ActionEvent evt) {
構文エラー (例2) 修正  private void jButton1ActionPerformed(ActionEvent evt) { int n=Integer.parseInt(jTextField1.getText()); int sum=0; for(int i=1;i<=n; i++) { sum=sum+i; } jTextField2.setText(String.valueOf(sum)); このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? for文の()が閉じていない。

29 補足 エラーメッセージの解釈 (例) エラーの主原因を特定することはプログラマーの責任
補足 エラーメッセージの解釈 (例)  private void jButton1ActionPerformed(ActionEvent evt) { int a=Integer.parseInt(jTextField1.getText()); if( (a%2)=0 ) { jTextField2.setText("偶数です。"); } else { jTextField2.setText("奇数です。"); 代入の左側は変数でなければなりません エラーの主原因を特定することはプログラマーの責任 このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? コンパイラは、代入文の左辺が変数ではない(式になっている)ことがエラーと判定。 しかし、実際は・・・ 等しい(==)に代入(=)を誤用したことがエラーの主原因

30 応用課題2-A public class NewJFrame extends javax.swing.JFrame { ・・・
 ・・・ 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)); { トークン "setText" に構文エラーがあります。このトークンの後には Identifier を指定する必要があります なぜこのようなエラーメッセージが現れるのでしょうか? メソッド定義のブロック外に出ているから。 本当のエラーの箇所はどこでしょうか?


Download ppt "ソフトウェア制作論 平成30年10月3日."

Similar presentations


Ads by Google