プログラミング入門1

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

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

プログラミング入門1

プログラミング入門1

プログラミング入門1

JavaプログラミングⅠ

Prog1_15th

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

スライド 1

デジタル表現論・第6回

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

Microsoft PowerPoint ppt

Microsoft PowerPoint - prog03.ppt

Prog1_2nd

Java言語 第1回

JAVA入門

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

Java講座

Microsoft PowerPoint - chap10_OOP.ppt

大容量情報検索論

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

<基礎領域>

PowerPoint プレゼンテーション

JAVA入門

デジタル表現論・第4回

プログラミング入門1

PowerPoint プレゼンテーション

Microsoft PowerPoint - Pro110111

Microsoft PowerPoint - prog04.ppt

PowerPoint プレゼンテーション

Prog1_10th

JAVA入門

Microsoft PowerPoint - ruby_instruction.ppt

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

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

プログラミング入門1

PowerPoint プレゼンテーション

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

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

Prog1_6th

Javaプログラムの実行手順

講習No.8

5 継承とは クラス図 98 7 参照の自動型変換 参照の自動型変換 クラス図の見方 クラス図の書き方 継承 継承してクラスを作る インスタンスの初期化 継承の効果を確認する

4-1- 基 Java に関する知識 1 独立行政法人情報処理推進機構

class TestPrimitiveType{ public static

GEC-Java

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

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

GEC-Java

PowerPoint Presentation

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

レコードとオブジェクト

JavaプログラミングⅠ

プログラミング入門1

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

文字列操作と正規表現

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

メソッドのまとめ

JavaプログラミングⅠ

人工知能入門

ToDo: 今回のタイトル

ポインタ変数

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

GEC-Java

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

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

PowerPoint プレゼンテーション

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

Microsoft Word - problem3.doc

JavaプログラミングⅠ

Microsoft PowerPoint - prog08.ppt

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

Make the Future Java FY13 PPT Template

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

Javaの作成の前に

PowerPoint Presentation

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 3 回コレクションと例外処理 テクノロジックアート 瀬嘉秀

JAVA とテンプレート

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

ガイダンス


リファレンス,配列 例外処理

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

ガイダンス

PowerPoint プレゼンテーション

Prog1_3rd

Javaプログラマー早期育成ドリル ~コードリーディング編~ 解答

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

Microsoft PowerPoint - prog08.ppt

ガイダンス

Prog2_10th

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

Java知識テスト問題

プログラミング入門1

Microsoft PowerPoint - OOP.pptx

講習No.9

C#の基本2 ~プログラムの制御構造~

DVIOUT-exer

Transcription:

プログラミング入門 2 第 13 回 ArrayList と HashMap 1

テーマ :ArrayList と HashMap ラッパオブジェクト 基本型と参照型 ArrayList HashMap 2

前回の復習 : クラス Object Java 言語では 階層構造のルート ( 根 ) に クラスObjectがある スーパークラスを指定しないクラスも 暗黙にクラスObjectを継承する public class Object { public String tostring().. boolean equals(),,,, } Figure String ProductData ProductList MyCircle MyRectangle ColoredCircle ColredRectangle 3

テーマ :ArrayList と HashMap ラッパオブジェクト 基本型と参照型 ArrayList HashMap 4

基本型と参照型 Java には int, long, double, char, boolean などのオブジェクトではない数値 論理値型が存在する 基本型はオブジェクトの性質を持たないため 他のクラスとは相いれない 基本型 参照型 double Object float long String FIgure MyCar int MyCircle ColoredCar 代入可能 継承 5

基本型とラッパクラス Java には int, long, double, char, boolean などのデータを内部に保持したラッパクラスが存在する 基本型に対して 1 対のラッパが存在する 基本型 double 参照型 Object float Number long Double Float int Long Integer 代入可能 継承 6

基本的な型変換 キャストや 型変換メソッドを用いた確実で明示的な型変換の関係 Number n; long l; l = i; i = (int)l; int i; lo = Long.valueOf(l); l = lo.longvalue(); io = Integer.valueOf(i); i = io.intvalue(); n = lo; Long lo; 代入不可 Integer と Long は継承関係にない Integer io; n = io; 7

暗黙の自動型変換 (Auto Boxing) Java 5.0 以降に認められた基本型とラッパクラス間の自動型変換 Number n; long l; l = lo; lo = Long.valueOf(l); lo = l; l = lo.longvalue(); n = lo; Long lo; n = io; l = i; i = (int)l; int i; i = io; io = Integer.valueOf(i); l = io; i = io.intvalue(); io = i; lo = i; 代入不可 Integer io; 8

AutoBoxing の落とし穴 AutoBoxing は プログラムを書く上で便利ではあるが 課題も多く残す ラッパクラスでは == による等号が常には成り立たない equals を使う方が安全 Long 変数に int の値は代入できない int Integer - Long 理由 : Integer と Long は 継承関係のないクラスであり 互いに代入不可 9

テーマ :ArrayList と HashMap ラッパオブジェクト 基本型と参照型 ArrayList HashMap 10

オブジェクト指向言語の利点 カプセル化 オブジェクト指向言語は クラス や パッケージ によって 内部の実装を隠ぺいしたライブラリ ( 役立つツール群 ) を提供しやすい 使う側 ライブラリ オブジェクト 1 メッセージ ( メソッド呼出 ) オブジェクト 2 インタフェース = メソッドの呼出方法の約束 = すなわち 戻り値メソッド名 ( 引数 ) 実装 11

Java クラスライブラリ (Java API) Java は標準的な機能として いくつもの機能をクラスライブラリとして提供している Java API (Application Programming Interface) と呼ばれることもある http://java.sun.com/javase/ja/6/docs/ja/api/index.html すでに講義で扱ったクラスライブラリの例 コンソールへ文字を出力する際には System クラスを用いて System.out.println メソッドを使用している System クラスのクラス変数 out に対して println というインスタンスメソッドを呼び出している sqrt や sin などの数学関数を使用するには Math クラスの Math.sqrt や Math.sin というクラスメソッドを使用している ダイアログの表示では JOptionPane クラスの showmessagedialog,showinputdialog を使用してきた 12

Java クラスライブラリのパッケージの例 パッケージ名 java.lang java.io java.net java.util java.awt このパッケージに含まれるクラス プログラムを作成する際に使用される 基本的なクラス 入出力 (I/O) に関するクラス ネットワークに関するクラス ユーティリティクラス Abstract Window Toolkit GUI を作る際に使われるクラス 例 System, String, Math File, FileReader, FileWriter URL, HttpURLConnecti on Calendar, Random, List Window, Dialog, Graphics 13

可変長配列 ArrayList java.util.arraylist として提供される 配列の長さを最初に決めないで 途中で変えたい場合に便利 ( 初期化 ) ArrayList list = new ArrayList(); ( 要素追加 ) list.add( ほげほげ ); ( 参照 ) ( サイズ計算 ) String text = (String) list.get(0); int size = list.size(); データの型にキャストする必要がある 配列の添え字に相当 14

配列と ArrayList の比較 ArrayList は 内部の配列の長さが足りない場合には 配列の長さを自動的に拡張する処理 を自動的に行ってくれる 配列は 最初に大きさの宣言が必要で 途中で変えられない 内容配列 ArrayList 値を代入 array[i] = obj list.set(i, obj) 値を参照 obj = array[i] obj = list.get(i) 15

例題 21 問題 :ArrayList に ダイアログから入力された文字列を任意個格納した後に まとめて一覧をコンソールに表示せよ 動作確認クラス : Ex21ArrayList 16

例題 21 Ex21ArrayList 警告が出ている 17

上級コラム Eclipse で警告が出る理由 ArrayList には どんな型のインスタンスでも登録できる 逆に 内容を参照する時に どの型のインスタンスが取り出されるかわからないので 明示的なキャストが必要 上記のキャストの問題を回避するために あらかじめ どの型のインスタンスを登録するかを宣言する 型パラメータ をつけることができるようになった ArrayList<String> list = new ArrayList<String>(); 昔からの使い方に従って 型パラメータを使わないで ArrayList を使うと Eclipse が警告を出すようになっている 警告は表示されるが 実行には支障がない 18

例題 21 Ex21ArrayList ( 警告なし版 ) コラム ArrayList は Generic なクラス ( 総称型クラス ) と呼ばれ クラスに 型パラメータ を指定できる 19

ArrayList を使う時の注意 ArrayList に格納できるのは インスタンスだけである 基本型の int や double は格納できない 替わりに Integer や Double に変換して格納する 値を取り出す時には 必ず登録したデータの型にキャストする 登録時と違う型の変数に取り出そうとすると例外が発生する 配列の途中の順番に挿入したい時には add(index, データ ) のように 挿入する場所を指定する set(index, データ ) は その場所のデータを置き換える 20

テーマ :ArrayList と HashMap ラッパオブジェクト 基本型と参照型 ArrayList HashMap 21

連想記憶 HashMap java.util.hashmap として提供される キーを指定して キーと関連付けれられたデータを検索できるライブラリ ( 初期化 ) HashMap map = new HashMap(); ( 登録 ) map.put( キー, 値 ); ( 検索 ) ( キー一覧 ) String value = (String)map.get( キー ); Set keys = map.keyset(); 22

例題 31 問題 : 例題 31 と同じ動作をするプログラムを MyFlashCard を利用しないで HashMap を使って作成せよ 動作確認クラス : Ex31HashMapList 23

24

例題 31 Ex31HashMap 25

例題 31 Ex31HashMap 続き 26

HashMap の使う時の注意 キーも 値も インスタンスだけが利用できる 基本型は利用できない キーは文字列にすることが多いが 等価性を判定できるのであれば 他のインスタンスでも良い 登録したデータ一覧を取りだしたい時には工夫が必要 キーの集合を取りだす Set keys = map.keyset(); キーを順に取り出す準備 Iterator i = keys.iterator(); 次のキー String key = (String)i.next(); キーとペアの値を取りだす String val = (String)map.get(key); 27

まとめ :ArrayList と HashMap ラッパオブジェクト 基本型と参照型 ArrayList HashMap 28

本日の例題と問題 ラッパクラスの演習 Ex11, Ex12, Ex13 ArrayList の演習 Ex21, Ex22, Ex23, Ex24*, Q11, Q12, (Q13) HashMap の演習 Ex31, (Ex32), Q21, (Q22), Q31, Q32, (Q33) OrderingSystem (Ex41*) (Ex: 例題, Q: 問題, * は少し手間のかかる問題 ) 各自に適した順番で解けばよいが 上記の順番が自然な流れとなるよう構成されている 29

例題集 30

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

例題 11 問題 : 次のページの Ex11Integer クラスを入力し // 正確にはとなっている行と次の行を入れ替えて 結果が同じことを確認せよ また // エラーとなっている行のコメントをはずしてみて なぜ エラーになるのか答えよ 動作確認クラス : Ex11Integer 32

例題 11 Ex11Integer 33

例題 11 解説 x は int 型でありプリミティブ型 よって Object クラスを継承しないので tostring() 等のインスタンスメソッドは呼べない 200 は int 型 オブジェクトに自動変換すると Integer 型 Integer 型オブジェクトは Double 型を継承しないので 代入できない xx は Integer 型 yy は Double 型 Integer 型オブジェクトは Double 型を継承しないので 代入できない 34

例題 12 問題 : 次の Ex12Integer クラスを実行すると 100 と 100 は == が成り立つが 1000 と 1000 では == が成り立たない 成り立つ / 成り立たないの境界線はどこにあるのか調べよ ( ヒント : 2 進数で考える ) 動作確認クラス : Ex12Integer 35

例題 13 問題 : 次のページの Ex13Integer クラスで コメントアウトされている // エラー : 行は なぜエラーになるのか考えよ ( 型変換の明示 ) plusinteger に対する plusinteger2 を参考に pluslong に対する pluslong2 を作成して 動作を確認せよ 動作確認クラス : Ex13Integer 36

例題 13 Ex13Integer 37

例題 21 問題 :ArrayList に ダイアログから入力された文字列を任意個格納した後に まとめて一覧をコンソールに表示せよ 動作確認クラス : Ex21ArrayList 38

例題 21 Ex21ArrayList 警告が出ている 39

例題 21 Ex21ArrayList ( 警告なし版 ) コラム ArrayList は Generic なクラス ( 総称型クラス ) と呼ばれ クラスに 型パラメータ を指定できる 40

例題 22 問題 :ArrayList に ダイアログから入力された整数を任意個格納した後に まとめて一覧をコンソールに表示しながら 合計も計算して表示せよ 動作確認クラス : Ex22ArrayList 41

例題 22 Ex22ArrayList 42

例題 23 問題 : MyFlashCard に ダイアログから読みと漢字のペアを入力し CSV 形式の一覧をコンソールに表示せよ MyFlashCard クラス変数初期値説明 ArrayList contents new ArrayList(); 生成したインスタンスを格納する配列 インスタンス変数初期値説明 String word1 無しカードの表 String word2 無しカードの裏 コンストラクタ ( 引数 ) MyFlashCard(String word1, String word2) 機能 インスタンス変数の値が word1,word2 である MyFlashCard クラスのインスタンスを作成する ( クラス名 : MyFlashCard) 動作確認クラス : Ex23ArrayList 43

例題 23( 続き ) MyFlashCard 続き クラスメソッド 返り値の型メソッド名 ( 引数 ) 機能 MyFlashCard インスタンスメソッド createflashcard( String word1, String word2) 返り値の型メソッド名 ( 引数 ) 機能 インスタンス変数の値が word1,word2 である MyFlashCard クラスのインスタンスを作成しクラス変数の contents に格納する MyFlashCard get(int i) i 番目の MyFlashCard を返却 int size() MyFlashCard のインスタンスの総数 ( クラス名 : MyFlashCard) 44

例題 23 MyFlashCard 45

例題 23 Ex23ArrayList 46

例題 24 問題 : 例題 23 に加えて 登録した MyFlashCard に対して 質問を出し 対になる言葉をダイアログ表示するプログラムを作成せよ MyFlashCard に追加するインスタンスメソッド インスタンスメソッド 返り値の型メソッド名 ( 引数 ) 機能 String get(string key) key を基に 対になる言葉を検索する 漢字 かな かな 漢字の双方の対を検索できること ( クラス名 : MyFlashCard) 動作確認クラス : Ex24ArrayList 47

48

例題 24 MyFlashCard 49

例題 24 Ex24ArrayList 50

例題 31 問題 : 例題 24 と同じ動作をするプログラムを MyFlashCard を利用しないで HashMap を使って作成せよ 動作確認クラス : Ex31HashMapList 51

例題 31 Ex31HashMap 52

例題 31 Ex31HashMap 続き 53

例題 32(opt) 問題 : 例題 31 の Ex31HashMap の警告マークを全てなくすように Generics の設定を行え 動作確認クラス : Ex32HashMapList 54

例題 32 Ex32HashMap 3 行以外に変更無し 55