プログラミング入門1

Similar documents
プログラミング入門1

プログラミング入門1

プログラミング入門1

プログラミング入門1

Prog1_6th

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

基礎計算機演習 実習課題No6

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

プログラミング入門1

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

JavaプログラミングⅠ

GEC-Java

メソッドのまとめ

Microsoft PowerPoint - prog03.ppt

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Microsoft Word - problem3.doc

Javaプログラムの実行手順

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

PowerPoint プレゼンテーション

Microsoft PowerPoint - chap10_OOP.ppt

PowerPoint プレゼンテーション

ToDo: 今回のタイトル

PowerPoint プレゼンテーション

Prog1_15th

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

基本情報STEP UP演習Java対策

人工知能入門

Prog1_10th

Microsoft PowerPoint - lec06 [互換モード]

プログラミング入門1

Prog2_12th

Java講座

Prog1_2nd

文字列操作と正規表現

Microsoft PowerPoint ppt

デジタル表現論・第4回

2006年10月5日(木)実施

PowerPoint プレゼンテーション

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

Microsoft PowerPoint - ruby_instruction.ppt

JavaプログラミングⅠ

Microsoft PowerPoint - prog08.ppt

Prog1_12th

Microsoft PowerPoint - prog04.ppt

第1回 プログラミング演習3 センサーアプリケーション

PowerPoint プレゼンテーション

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

JAVA入門

PowerPoint プレゼンテーション

program7app.ppt

デジタル表現論・第6回

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

スライド 1

プログラミング入門1

JavaプログラミングⅠ

memo

Prog2_9th

Microsoft PowerPoint - prog08.ppt

Microsoft PowerPoint - Pro110111

Android Layout SDK プログラミング マニュアル

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft Word - 3new.doc

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

メディプロ1 Javaプログラミング補足資料.ppt

Microsoft PowerPoint - prog09.ppt

Microsoft Word - NonGenList.doc

GEC-Java

Microsoft PowerPoint - prog09.ppt

PowerPoint プレゼンテーション

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

基礎プログラミング2015

Microsoft PowerPoint - 5Chap15.ppt

プログラミング基礎I(再)

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

Prog1_10th

pp2018-pp9base

情報処理Ⅰ

memo

JAVA入門

DVIOUT-exer

Javaの作成の前に

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

第2回講義

Prog2_15th

プレポスト【解説】

Taro-リストⅢ(公開版).jtd

PowerPoint プレゼンテーション

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

JAVA入門

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

Microsoft PowerPoint - 09.pptx

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

レコードとオブジェクト

プログラミングI第10回

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Transcription:

プログラミング入門 2 第 8 回表形式データ (1) 1

テーマ : 表形式データ (1) 配列と複合データを用いた表形式データ データの登録 データの検索 データの更新 実際的はソフトウェアでは 表形式データの ( 例えば データベースのデータ ) を利用する場面が非常に多く とても重要である そこで 表形式を扱うプログラミングを繰り返しとりあげる 2

テーマ : 表形式データ (1) 配列と複合データを用いた表形式データ データの登録 データの検索 データの更新 3

表形式のデータ 第 5 回 6 回で取り上げたように 複数のデータ ( データの集合 ) を処理しやすい形で蓄積するためには 表の形式を用いると良い 表形式をプログラムで実現するために 配列を用意しその要素として複合データを割り当てる 下記では 商品の価格表を作成することを考える 商品の名前と 単価を組にして管理する 商品名 単価 apple 100 grape 200 orange 300 [0] name:apple price:100 [1] name:grape price:200 [2] name:orange price:300 4

例題 40 より 問題 : 次のクラス ProductData を作成せよ このクラスのインスタンスは商品の情報を保持する インスタンス変数 変数の型と名前初期値説明 String name 無し商品の名前 int price 無し商品の単価 コンストラクタ コンストラクタ ( 引数 ) ProductData (String name, int price) 機能 ProductData クラスのインスタンスを生成し 引数の name,price を各インスタンス変数に代入する インスタンスメソッド 返り値の型メソッド名 ( 引数 ) 機能 void showproductdata(in t row) ProductData インスタンスの文字列表現を Spreadsheet の row 行に表示する void header() Spreadsheet のヘッダ行を表示する ( クラス名 : ProductData) 5

例題 40 6

配列と複合データを用いた表形式データの作成表へのレコードの登録 ( 考え方 ) (1) 配列を作成 ProductData [] list [0] [1] [2] (3) 配列に登録 (2) インスタンスを作成 name:apple price:100 (2)(3) を繰り返す ProductData [] list [0] name:apple price:100 [1] name:grape price:200 [2] name:orange price:300 int numproducts = 3; ProductData [] list = new ProductData[numProducts]; list[0] = new ProductData("apple", 100); list[1] = new ProductData("grape", 200); list[2] = new ProductData("orange", 300); 7

配列と複合データを用いた表形式データ ( 詳細 ) ProductData の配列実体 ProductData のインスタンス ProductData [] list 69b332 変数 list [0] b30a7 [1] 758cb [2] 67f74 name:apple name:grape price:100 実体の番号 :b30a7 price:200 実体の番号 :758cb 実体の番号 :69b332 name:orange price:300 実体の番号 :67f74 実際には 配列変数 list には配列実体への参照が格納される また 配列実体にはインスタンスの参照が格納される int numproducts = 3; ProductData [] list = new ProductData[numProducts]; list[0] = new ProductData("apple", 100); list[1] = new ProductData("grape", 200); list[2] = new ProductData("orange", 300); 8

箱の絵を用いたイメージ図 ( 参考 ) b30a7 name: apple price : 100 758cb name: grape price : 200 b30a7 758cb 67f74 67f74 name: orange price : 300 69b332 list 69b332 [0] [1] [2] 9

配列に含まれるインスタンスへのアクセス ( 詳細 ) ProductData [] ProductData [0] b30a7 name:apple price:100 69b332 変数 list [1] 758cb [2] 67f74 name:grape 実体の番号 :b30a7 price:200 実体の番号 :758cb 実体の番号 :69b332 name:orange price:300 実体の番号 :67f74 配列に含まれるインスタンスへのアクセス (list[2].price の例 ) System.out.println(list[2].price); list[2] : 69b332 番の配列データの 2 番目の内容を取り出す 67f74 list[2].price: 67f74 番のデータのインスタンス変数 price の内容を取りだす 300) println(list2[2].price): 300 を表示 10

表の走査 (scan) 表に登録されているデータを一つ一つ調べることを 走査 (scan) という 砕けた言葉では 表を なめる という言い方もある 配列の先頭から調べる場合の例は 下記である for (int i = 0; i < list.length; i++ ) { // ここに処理を書く list[i] として // インスタンスを一つ一つ取り出す } ProductData [] [0] b30a7 [1] 758cb [2] 67f74 for (int i = 0; i < list.length; i++ ) { ProductData p = list[i]; System.out.println(p.price); } System.out.println(list[0].price); System.out.println(list[1].price); System.out.println(list[2].price); 実体の番号 :69b332 出力 100 200 300 11

例題 41(1) より 問題 : ProductData のインスタンスを配列に格納するようにせよ さらに以下のメソッドを Ex41ProductList の中に作成し 動作を確認せよ 返り値の型メソッド名 ( 引数 ) 機能 void contents(productdata [ ] list) listの各 ProductDataインスタンス の文字列表現を表示する ( クラス名 : Ex41ProductList) 12

例題 41(1) 表 ( 配列 ) を走査し 要素の内容を順次表示していく 13

テーマ : 表形式データ (1) 配列と複合データを用いた表形式データ データの登録 データの検索 データの更新 14

データの検索 表に登録されているデータの集合から 欲しい特定のデータを取り出すことを 検索 (search) と言う 検索は 配列内を走査 ( スキャン ) して 検索条件に合う要素を列挙する作業である 基本の検索条件は 名前の一致である 次のメソッド get は list のなかから商品名が name であるインスタンスを検索するメソッドである ProductData get (ProductData [] list, String name) { for (int i = 0; i < list.length; i++ ) { if (list[i].name.equals(name)){ return list[i]; } } return null; } ここに到達した ということは 条件に合うインスタンスが配列に含まれていなかったことになる 定数 null を返す 表を走査する list[i] のインスタンス変数 name の内容が 引数 name と同じ場合に そのインスタンス (list[i]) を返り値として返す 15

検索条件の例 名前が apple であるものを返す for (int i = 0; i < list.length; i++ ) { if (list[i].name.equals( apple )){ return list[i]; } } 値段が 100 円以上 150 円未満のものを返す for (int i = 0; i < list.length; i++ ) { int price = list[i].price; if (100 <= price && price < 150){ return list[i]; } } 一般には 複数のデータが条件に合致する ( マッチする ) ことがあるが この例では 配列の先頭から探して 最初に見つかったインスタンス一つを返している 16

例題 41(2) より 問題 : 次のメソッド get を作成し 動作を確認せよ 返り値の型メソッド名 ( 引数 ) 機能 ProductData get(productdata [ ] list, String name) 既存メソッド (Ex41ProductList 内 ) String contents(productdata [ ] list) list 中に格納されている ProductData インスタンスのうち, 引数の name と同じ名前 name を持つものを返す 該当する名前が見つからない場合は null を返す 既存の Ex41ProductList を編集する 17

例題 41(2) p 18

例題 41(2) 実行の流れ ( 前頁のものを拡大 ) p 19

NullPointerException ( 参照しているインスタンスがない (null) にもかかわらず その参照をたどって インスタンス変数などにアクセスしようとした時に発生するエラー ( 例外 )) showproductdata を呼び出す 33 行目で エラー ( 例外 ) が発生 (p の値が null であるにもかかわらず p.showproductdata() として インスタンスメソッドにアクセスしようとしたため ) p 上記メソッドコールは start() メソッド内の 33 行目にあり これを呼び出したのが main メソッド内 (Ex41ProductList の 9 行目 ) 33 行目の p が null であることが原因 20

テーマ : 表形式データ (1) 配列と複合データを用いた表形式データ データの登録 データの検索 データの更新 21

データの更新 表に登録されているデータを修正することを データの 更新 (update) という 今回は以下の方法を紹介する (1) 更新したいデータ ( インスタンス ) を 検索 によって取り出す (2) (1) で取り出したデータのインスタンス変数に 更新したい値を上書きする int numproducts = 3; ProductData [] list = new ProductData[numProducts]; list[0] = new ProductData("apple", 100); list[1] = new ProductData("grape", 200); list[2] = new ProductData("orange", 300); ProductData p = get(list, orange ); p.price = 150; 22

データの更新 ( 詳細 ) ProductData の配列実体 ProductData のインスタンス ProductData [] list 69b332 [0] b30a7 [1] 758cb name:apple name:grape price:100 実体の番号 :b30a7 price:200 変数 list [2] 67f74 実体の番号 :758cb 実体の番号 :69b332 name:orange price:300 ProductData p = get(list, orange ) p.price = 150 実体の番号 :67f74 67f74 変数 p 150 int numproducts = 3; ProductData [] list = new ProductData[numProducts]; list[0] = new ProductData("apple", 100); // 省略 ProductData p = get(list, orange ); p.price = 150; 23

まとめ : 表形式データ (1) 配列と複合データを用いた表形式データ データの登録 データの検索 データの更新 表形式データに対する必要な処理として データの追加 削除がある これらについては次回扱う 24

補足 ( 文字列同士の比較 ) 文字列 s1,s2 の比較は s1.equals(s2) という形で行う なぜ s1 == s2 ではいけないのか? これは 文字列型のデータは 実はクラス String のインスタンスだからである ( ただし クラス String とそのインスタンスは 扱いが少し特別である ) 次のプログラムを考えてみる s1には ABC という文字列 (Stirngクラスのインスタンス ) が割り当てられる String s1 = ABC"; String s2 = JOptionPane.showInputDialog("s2を入力 "); System.out.println("s1="+s1); System.out.println("s2="+s2); ユーザ入力が ABC であったときに s2 に ABC という文字列 ( インスタンス ) が割り当てられるが s1 のインスタンスとは別のものである ( 次ページ図 ) System.out.println(s1 == s2); System.out.println(s1.equals(s2)); したがって ここは false である s1.eqauls(s2) とすると true となる 25

String s1 = ABC"; String s2 = JOptionPane.showInputDialog("s2 を入力 "); System.out.println("s1="+s1); System.out.println("s2="+s2); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); 9b332 s1 A B C 9b332 c0b20 false s1==s2 c0b20 s2 A B C 9b332 c0b20 s1 と s2 は異なるインスタンスを参照している s1.equals(s2) s1 の 1 文字目 == s2 の 1 文字目 true s1 の 2 文字目 == s2 の 2 文字目 true s1 の 3 文字目 == s2 の 3 文字目 true true 同じ位置の文字が全て等しいかどうか調べる 26

コラム ( データの更新と不要データ ) データの更新の他の方法として 新しいインスタンスを配列に上書きする方法もある int numproducts = 3; ProductData [] list = new ProductData[numProducts]; list[0] = ProductData.createProductData("apple", 100); list[1] = ProductData.createProductData("grape", 200); list[2] = ProductData.createProductData("orange", 300); list[2] = ProductData.createProductData( orange, 150); この場合 もともと登録されていたデータ ( organe, 300) は 二度と利用されない不要なデータとなる Java 言語では 不要データが占めていた記憶領域 ( メモリ ) は 自動的に再利用される この仕組みを ガベージコレクション (GC: Garbage Collection : ゴミ集めの意 ) という C 言語など GC が用意されていない言語では 不要になるデータを再利用するためには 別に処理が必要である 27

本日の例題と問題 NamedColor のリストを利用した演習 Ex11, Ex12, Ex13(0), Ex13(1), Ex21(1), Ex21(2), Ex21(3), Ex31(1), Ex31(2) 商品リストを利用した演習 Ex40, Ex41(1), Ex41(2), Ex41(3), Ex41(4), Ex51(1)*, Ex51(2)* 得点表を利用した課題 Q11, Q12*, Q13(0), Q13(1), Q14(1), Q14(2), Q14(3) NamedRectangle のリストを利用した課題 (Q21(1), Q21(2), Q21(3), Q31(1)*, Q31(2)*) (Ex: 例題, Q: 問題, * は少し手間のかかる問題 ) 各自に適した順番で解けばよいが 上記の順番が自然な流れとなるよう構成されている 28

例題集 29

パッケージ j2.lesson08 を作成する パッケージやクラスの作成, 実行の仕方の説明は省略する 作り方を忘れた場合は過去のスライドや http://java2010.cis.k.hosei.ac.jp/01/material-01/ を参考にせよ 30

例題 11~31: 色のリスト 色の表を作成する 色の名前と RGB による 16 進数表現を組にして管理する 色名 赤成分 緑成分 青成分 green 0 255 0 blue 0 0 255 red 255 0 0 [0] name:green red = 0 green = 255 blue = 0 [1] name:blue red = 0 green = 0 blue = 255 [2] name:red red = 255 green = 0 blue = 0 31

例題 11 問題 : 次のクラス NamedColor を作成せよ インスタンス変数 変数の型と名前初期値説明 String name 無し 色の名前 int red 無し 色の赤成分 int green 無し 色の緑成分 int blue 無し 色の青成分 コンストラクタ コンストラクタ ( 引数 ) NamedColor(String name, int red, int green, int blue) 機能 NamedColor クラスのインスタンス変数の値がそれぞれ引数の name,red, green, blue である NamedColor インスタンスを作成する ( クラス名 : NamedColor) 32

例題 11 33

例題 12 問題 : NamedColor のインスタンスを元に 実行例のように四角形で色見本を表示せよ NamedColor のインスタンスメソッド 返り値の型メソッド名 ( 引数 ) 機能 void shownamedcolor( int x, int y, int size) NamedColor の赤 緑 青で座標 (x,y) より辺の長さが size の正方形を描画し その左下に引数 c の name を RGB 色で描画する ( クラス名 : Ex12ShowNamedColor) 34

例題 12 (NamedColor) 返り値の型メソッド名 ( 引数 ) 機能 void shownamedcolor(int x, int y, int size) NamedColor のインスタンスを 指定の RGB 色で 座標 (x,y) より辺の長さが size の正方形を描画し その左下に name を表示する 35

例題 12 (Ex12ShowNamedColor) 36

例題 13(0) 問題 :NamedColor のインスタンスを配列に格納するようにさせよ ( この配列を色リストと呼ぶ ) ( クラス名 : Ex13ShowColorList_0) 37

例題 13(0) 配列 list に NamedColor のインスタンスを登録する 38

例題 13(1) 問題 : 色リストに含まれる NamedColor インスタンスの色見本を並べて表示するメソッド showlist を作成せよ 返り値の型メソッド名 ( 引数 ) 機能 void showlist(namedcolor [] list, int x, int y) shownamedcolor メソッドを用いて引数 list の要素を先頭から表示する 既存の Ex13ShowColorList を編集する 39

例題 13(1) 配列 list を走査して 要素となるインスタンスをひとつずつキャンバスに表示 40

例題 21(1) 問題 : 次のメソッド get を作成し 動作を確認せよ 返り値の型メソッド名 ( 引数 ) 機能 NamedColor get(namedcolor [ ] list, String colorname) 既存メソッド (Ex21ColorList 内 ) void showlist(namedcolor [ ] list, int x, int y) 色リスト list 中に格納されている NamedColor インスタンスのうち, 引数の colorname と同じ名前 name を持つものを一つ返す 該当する名前が見つからない場合は null を返す Ex21ColorList 41

例題 21(1) Ex13(1) と同じ 42

例題 21(2) 問題 : ユーザーが入力した色の色見本を表示せよ ただし 該当する名前がリスト内に見つからない場合には メッセージを出すようにせよ 返り値の型メソッド名 ( 引数 ) 機能 NamedColor getnamedcolorfro muser(namedcolor [ ] list) 既存メソッド (Ex21ColorList 内 ) void showlist(namedcolor [] list, int x, int y) NamedColor get(namedcolor [] list, String colorname) 入力ダイアログで得た色名に対応する NamedColor インスタンスを get メソッドを利用して得る 既存の Ex21ColorList を編集する 43

実行例 44

例題 21(2) Ex13(1) Ex21(1) と同じ 45

例題 21(3) 問題 : ユーザーが入力した色の色見本を表示せよ ここでは 連続で入力できるようにせよ 該当する名前がリスト内に見つからない場合に 入力を終了するものとする 既存メソッド (Ex21ColorList 内 ) void showlist(namedcolor [] list, int x, int y) NamedColor get(namedcolor [] list, String colorname) NamedColor getnamedcolorfromuser(namedcolor[] list) 既存の Ex21ColorList を編集する 46

例題 21(3) 実行例 47

例題 21(3) Ex13(1) Ex21(1) Ex21(2) と同じ 48

例題 21(3) 補足 前頁のソースより 赤枠の部分は 次のように書くことですっきりする (getnamedcolorfromuser メソッドの呼び出しがプログラム上で一カ所になる ) NamedColor c; while((c = getnamedcolorfromuser(list))!= null) { c.shownamedcolor(x, x, size); x += 30; } 49

例題 31(1) 問題 :NamedColor のインスタンスの値をユーザが設定するための下記のインスタンスメソッドを NamedColor 内に作成し さらに 動作を確認するための Ex31ColorList を作成せよ NamedColor のインスタンスメソッド 返り値の型メソッド名 ( 引数 ) 機能 void setnamefromuser() 入力ダイアログで色の名前を取得し インスタンス変数 nameに代入する void setcolorfromuser() 入力ダイアログでRGB 色を取得し イ ンスタンス変数 red, green, blue にそ れぞれ代入する 既存の NamedColor を編集するさらに Ex31ColorList を作成 50

例題 31(1) 実行例 51

例題 31(1) NamedColor 52

例題 31(1) Ex31ColorList Ex13(1) Ex21(1) と同じ 53

例題 31(2) 問題 : 例題 31(1) のプログラムを拡張して次のようにせよ (a) 色リストの色見本を表示させよ (b) ユーザに色名を入力させ色データを一つ取り出しこのデータを修正させよ (c) 色見本を表示しなおせ 返り値の型メソッド名 ( 引数 ) 機能 NamedColor getnamedcolorfro muser(namedcolor [ ] list) 既存メソッド (Ex31ColorList 内 ) void showlist(namedcolor [] list, int x, int y) NamedColor get(namedcolor [] list, String colorname) 入力ダイアログで得た色名に対応する NamedColor インスタンスを get メソッドを利用して得る 既存の Ex31ColorList を編集する 54

実行例 55

例題 31(2) 56

例題 41~51: 商品の価格表 商品の価格表を作成する 商品の名前と 価格を組にして管理する 商品名 単価 apple 100 grape 200 orange 300 [0] name:apple price:100 [1] name:grape price:200 [2] name:orange price:300 57

例題 40 問題 : 次のクラス ProductData を作成せよ このクラスのインスタンスは商品の情報を保持する インスタンス変数 変数の型と名前初期値説明 String name 無し商品の名前 int price 無し商品の単価 コンストラクタ コンストラクタ ( 引数 ) ProductData (String name, int price) 機能 ProductData クラスのインスタンスを生成し 引数の name,price を各インスタンス変数に代入する インスタンスメソッド 返り値の型メソッド名 ( 引数 ) 機能 void showproductdata(in t row) ProductData インスタンスの文字列表現を Spreadsheet の row 行に表示する void header() Spreadsheet のヘッダ行を表示する ( クラス名 : ProductData) 58

例題 40 59

例題 41(1) 問題 : ProductData のインスタンスを配列に格納するようにせよ さらに以下のメソッドを Ex41ProductList の中に作成し 動作を確認せよ 返り値の型メソッド名 ( 引数 ) 機能 void contents(productdata [ ] list) listの各 ProductDataインスタンス の文字列表現を表示する ( クラス名 : Ex41ProductList) 60

例題 41(1) 表 ( 配列 ) を走査し 要素の内容の文字列表現を result に加えていく 61

例題 41(2) 問題 : 次のメソッド get を作成し 動作を確認せよ 返り値の型メソッド名 ( 引数 ) 機能 ProductData get(productdata [ ] list, String name) 既存メソッド (Ex41ProductList 内 ) String contents(productdata [ ] list) list 中に格納されている ProductData インスタンスのうち, 引数の name と同じ名前 name を持つものを返す 該当する名前が見つからない場合は null を返す 既存の Ex41ProductList を編集する 62

例題 41(2) 63

例題 41(2) 実行の流れ ( 前頁のものを拡大 ) p 64

例題 41(3) 問題 : ユーザーに商品名を入力させ その商品情報を表示せよ ただし 該当する名前がリスト内に見つからない場合には メッセージを出すようにせよ 返り値の型メソッド名 ( 引数 ) 機能 ProductData getfromuser( ProductData[ ] list) 既存メソッド (Ex41ProductList 内 ) 入力ダイアログで得た商品名に対応する ProductData インスタンスを get メソッドを利用して得る String contents(productdata [ ] list) ProductData get(productdata [ ] list, String name) 既存の Ex41ProductList を編集する 65

例題 41(3) Ex41(2) と同じ 66

例題 41(4) 問題 : ユーザーに商品名を入力させ その商品情報を表示せよ ここでは 連続で入力できるようにせよ 該当する商品名がリスト内に見つからない場合に 入力を終了するものとする 既存メソッド (Ex41ProductList 内 ) String contents(productdata [ ] list) ProductData get(productdata [ ] list, String name) ProductData getfromuser(productdata[] list) 既存の Ex41ProductList を編集する 終了 67

例題 41(4) Ex41(2) Ex41(3) と同じ 68

例題 51(1) 問題 :ProductData のインスタンスの値をユーザが設定するための下記のメソッドを ProductData 内に作成し さらに 動作を確認するための Ex51ProductList を作成せよ 返り値の型メソッド名 ( 引数 ) 機能 void setnamefromuser() 入力ダイアログで文字列を取得し イ ンスタンス変数 nameに代入する void setpricefromuser() 入力ダイアログで文字列を取得し int に変換して引数 pのインスタンス変数 priceに代入する 既存の ProductData を編集するさらに Ex51ProductList を作成 69

例題 51(1) クラス ProductData 70

例題 51(1) クラス Ex51ProductList 71

例題 51(2) 問題 : 例題 51(1) のプログラムを拡張して次のようにせよ (a) 商品リストの情報を表示させよ (b) ユーザに商品名を入力させ ProductData のインスタンスを一つ取り出し このデータを修正させよ (c) 商品リストを表示しなおせ 返り値の型メソッド名 ( 引数 ) 機能 ProductData getfromuser( ProductData[ ] list) 既存メソッド (Ex51ProductList 内 ) 入力ダイアログで得た商品名に対応する ProductData インスタンスを get メソッドを利用して得る String contents(productdata [ ] list) ProductData get(productdata [ ] list, String name) 既存の Ex51ProductList を編集する 72

例題 51(2) 73