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

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

プログラミング 平成22年10月20日 森田 彦.
プログラミング 平成24年10月16日 森田 彦.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
12.3,E,-15, 12.3,E5,+,=, >,<,…,
プログラミング 平成23年10月19日 森田 彦.
プログラミング基礎I(再) 山元進.
基礎プログラミングおよび演習 第8回.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
プログラミング 平成24年10月30日 森田 彦.
情報処理3 第5回目講義         担当 鶴貝 達政 11/8/2018.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラミング 平成25年11月5日 森田 彦.
データ構造と アルゴリズム論 平成29年9月27日 森田 彦.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
暗黙的に型付けされる構造体の Java言語への導入
関数の定義.
プログラミング 平成23年12月21日 森田 彦.
ネットワークプログラミング論 平成28年11月7日 森田 彦.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
ソフトウェア制作論 平成30年12月5日.
プログラミングⅠ 平成30年10月29日 森田 彦.
ソフトウェア制作論 平成30年9月26日.
ソフトウェア制作論 平成30年10月24日.
ソフトウェア制作論 平成30年10月31日.
アルゴリズムとデータ構造1 2005年7月5日
アルゴリズムとデータ構造1 2005年6月24日
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
ソフトウェア制作論 平成30年11月21日.
プログラミングⅠ 平成30年10月15日 森田 彦.
ソフトウェア制作論 平成30年10月10日.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラミングⅠ 平成30年10月22日 森田 彦.
プログラミングⅠ 平成31年1月7日 森田 彦.
コンパイラ 2011年10月20日
オブジェクト プログラミング 第2回 プログラムの基本.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
ソフトウェア制作論 平成30年11月28日.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
プログラミングⅠ 平成30年12月10日 森田 彦.
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test4)】
JAVA入門⑥ クラスとインスタンス.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
プログラミング 平成28年11月15日 森田 彦.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング 平成24年12月11日 森田 彦.
skill-net(MILESTONE CAI,笈川他,1982)[Fortranの課題選択など]
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
:: の扱い 長谷川啓.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
情報処理Ⅱ 第2回 2004年10月12日(火).
ソフトウェア制作論 平成30年10月17日.
プログラミング 平成28年10月25日 森田 彦.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
プログラミング演習I 補講用課題
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Presentation transcript:

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

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

変数名未解決 (例)  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)); } このソースにはエラーが一箇所あります。それはどこでしょうか?

変数名未解決 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 型宣言していない変数を使用すると・・・ → 変数として解決できないというエラーメッセージが出る。

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

{ }の未対応 (例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("奇数です。");} } このソースにはエラーが一箇所あります。それはどこでしょうか?

{ }の未対応 (例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()の{}が閉じていない。

{ }の未対応 (例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()の{}が閉じていない。

{ }の未対応 (例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 を完了してください このソースにはエラーが一箇所あります。それはどこでしょうか?

{ }の未対応 (例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文の{}が閉じていない。

{ }の未対応 (例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文の{}が閉じていない。

未定義のメソッド指定(メソッド名誤記)(例) 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("奇数です。"); このソースにはエラーが一箇所あります。それはどこでしょうか?

未定義のメソッド指定(メソッド名誤記)(例) 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 で未定義です 未定義のメソッドを指定(ほとんどの場合はスペルミス) このソースにはエラーが一箇所あります。それはどこでしょうか?

未定義のメソッド指定(メソッド名誤記)(例)修正 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()); 未定義のメソッドを指定(ほとんどの場合はスペルミス)

基礎課題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」に変 更する。

基礎課題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行目に}を挿入する。

基礎課題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行目に}を挿入する。

基礎課題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()に修正する。

型の不一致・誤用 (例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)); } このソースにはエラーが一箇所あります。それはどこでしょうか?

型の不一致 (例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 には変換できません このソースにはエラーが一箇所あります。それはどこでしょうか? 右辺と左辺で型が一致していない。 整数型変数に実数値を代入できない。

型の不一致 (例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

【基礎課題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 には変換できません このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? 型の不一致。整数型変数=実数値となっている。

型の不一致・誤用 (例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) に適用できません このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? 文字列型として指定された引数に整数型変数を使用している。

型の不一致・誤用 (例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)); このソースにはエラーが一箇所あります。それはどこで、どういうエラーでしょうか? 文字列型として指定された引数に整数型変数を使用している。

構文エラー (例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言語の文法上の規則を破っているということ。

構文エラー (例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言語の文法上の規則を破っているということ。

構文エラー (例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文の()が閉じていない。

構文エラー (例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文の()が閉じていない。

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

応用課題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 を指定する必要があります なぜこのようなエラーメッセージが現れるのでしょうか? メソッド定義のブロック外に出ているから。 本当のエラーの箇所はどこでしょうか?