情報工学演習Ⅰ Java入門の入門 104 slides 表現系工学研究室の担当する内容 (ソフトウェア工学と人工知能の基礎) 認知システム論 AIプログラミング 探 索 論 理 ヒューマン・サイバネティクス ニューラルネット 演習Ⅰ Java入門の入門 実験Ⅰ オブジェクト指向 プログラミングⅠ ニューラルネット (1)(2) 論 理 実験Ⅱ 機械学習 内容 Javaの文法や扱うデータについて: C言語との共通点を確認する. C言語との相違点を学ぶ. (オブジェクト指向の内容は含まない.) 参考文献 改訂 新Java言語入門,林 晴比古,ソフトバンクパブリッシング(2004) 1 Javaの周辺 ・Javaとはどのような言語か ・Javaはどのような環境で動作するのか ・Java仮想マシンとは何か ・Java開発キットとはどのようなものか Java言語とは Sun Microsystems社で開発されたプログ ラミング言語 プラットフォーム独立 CPUやOSが異なっていてもOK.移植が不要 ネットワークに1つあれば,どのプラットフォー ムからもダウンロードできる Write Once, Run Anywhere Java仮想マシン (JVM: Java Virtual Machine) 仮想的なCPU.その機械語をバイトコードという. Javaコンパイラは,ソースプログラムをバイトコー ドにコンパイルする. 各プラットフォーム用のJVMでバイトコードを実行 する. JVMは,インタプリタでバイトコードを解釈実行し たり,ネイティブコンパイラで機械語に翻訳して実 行する. Javaで作成できるプログラム アプリケーション コンソール型アプリケーション ウィンドウ型アプリケーション アプレット(Applet) ホームページに埋め込まれて動作する サーブレット(Servlet) サーバーの上で動作する Javaクラスライブラリ Javaプログラムはクラスという単位で構成される. 利用価値の高いクラス群がJavaクラスライブラリ として提供されている. 既存のクラスを流用(継承)して,そこに機能を追 加して,新しいクラスにできる.これがJavaプログ ラミングのスタイル. パッケージ 関連したクラスがパッケージと呼 ばれる単位でまとめられている. 主要なJavaパッケージ パッケージ名 java.applet java.awt java.io java.lang java.math java.net java.util 説明 アプレット作成 GUI 入出力 Java言語の基本機能 算術演算 ネットワーク処理 ユーティリティ機能 Java開発キット JDK (Java Development Kit) Sun Microsystems社のフリーソフト バージョン 1.0→1.1→1.2→1.3→1.4→5.0 J2SE = Java2 Standard Edition J2EE = Java2 Enterprise Edition J2ME = Java2 Micro Edition J2SE 5.0 (=Java2 Standard Edition 5.0) Eclipse IBM商品がオープンソース化したもの 2 最初のアプリケーション ・Javaプログラムの基本スタイル ・コンパイルと実行の方法 基本プログラム例(1) ファイル名は Jsmp1.java のように .java を付ける. 大文字と小文字は区別される. public class Jsmp1{ public static void main(String args[]) { System.out.println("My first java."); } } 基本プログラム例(2) Jsmp1.java クラス名とファイル名は同じ public class Jsmp1{ public static void main(String args[]) { System.out.println("My first java."); } } クラス メソッド プログラムはmainメソッド からスタートする 基本プログラム例(3) 1つの命令(文)最後に”;”が付く System.out.println("My first java."); 画面に出力しろという命令 出力する内容(引数という) プログラムのコンパイル手順 コマンドプロンプトを起動し,カレントディレクトリに 移動する。 cd ........ 1. プログラムをコンパイルする。 javac ファイル名 (例: javac Jsmp1.java) (成功すると クラス名.class というファイルが作られる) 2. プログラムを実行する。 java クラス名 (例: java Jsmp1) (ここは,ファイル名ではないことに注意!) 3 最初のアプレット 省略 4 最初のウィンドウ型アプリケーション 省略 5 Javaの基礎知識 ・コメント ・字下げ ・名前の付け方 ・文字列の出力 ・変数宣言と数値出力 ・繰り返し文と条件文の雰囲気 基本スタイル public class クラス名{ public static void main(String args[]) { (いろいろな記述) } } コメントを入れる(1) /* ファイル名 Cmnt.java 開発者 ○○ ○○ 作成日 2006.10.18 */ public /* このようにもコメントを入れられます */ class Cmnt{ public static void main(String args[]) { //mainの記述 System.out.println(“My first java.”); //文字出力 } } コメントを入れる(2) 用例1 デバッグ作業への利用 /* a = 10; b = 20; c = 30; */ 字下げで見やすくする public class Smp1b { public static void main (String args[]) { System.out.println("My first java."); System.out.println("My second java."); } } 名前のつけかた 1. 1文字目に使用できる文字: 2. 3. 4. 5. 英字大文字(A~Z),英字小文字(a~z) 下線( _ ),ドル($) $はユーザは処理系用 2文字目以降に使用できる文字: 1文字目で使用できる文字 数字(0~9) 予約語(Javaが文法上使用するキーワード)は 使用不可 大文字と小文字は区別される 全角文字(2バイト文字)はOK. 名前の慣例(1) 1. 変数名とメソッド名には小文字を使う: int dt; public void sample1() 2. 名前が複数の語で構成される場合,それぞ れの語の先頭を大文字にするか,区切りに アンダーバー( _ )を入れる: public void getData() public void get_data() 名前の慣例(2) 3. クラス名は先頭を大文字にする: public class Greeting public class TextSort 4. 記号定数はすべて大文字にする。複数の語 で構成されるときには,必要ならアンダー バー( _ )で区切る: public static final int SIZE = 1000; public static final int MAX_DATA = 2000; 文字列を出力する public class Jsmp4{ public static void main(String args[]) { System.out.print("AAAAA"); System.out.print("BBBBB\nCCCCC\n"); System.out.println("DDDDD"); System.out.println("EEEEE\nFFFFF\n\nGGGGG"); } } 変数と代入 数字,文字等 変数 a 変数への値の代入 a = 3; 数値出力 public class Jsmp5 { public static void main (String args[]) { int a, b, sum; 自動的に 文字列に a = 100; //変数aに100を代入 変換される b = 200; //変数bに200を代入 sum = a + b; //変数sumにa+b (=300)を代入 System.out.print("a="); //文字列だけ System.out.println(a); //数値だけ System.out.println("b=" + b); //文字列と数値 System.out.println("a+b=" + sum); //結果 System.out.println("a+b=" + (a+b)); //直接計算 } } 文字列の結合 繰り返し処理 public class Jsmp6 { public static void main (String args[]) { int i, sum; 繰り返される部分 for(i=1; i<=5; i++) System.out.println("i = " + i); sum = 0; for(i=1; i<=5; i++) { sum = sum + i; System.out.println("sum = " + sum); } } } 繰り返される部分 条件処理 public class JSmp7 { public static void main (String args[]) { int i; for(i=1; i<=5; i++) { System.out.println("i = " + i); if (i < 3) System.out.println(" 3未満です"); else System.out.println(" 3以上です"); } } } 条件判定式 if if if if if if (a (a (a (a (a (a == b) != b) < b) > b) <= b) >= b) ー ー ー ー ー ー もしaとbが等しいなら もしaとbが異なるなら もしaがbより小さいなら もしaがbより大きいなら もしaがb以下なら もしaがb以上なら よくあるエラー '{'と'}'の対応が取れていない '('と')'の対応が取れていない "(二重引用符号)の対応が取れていない /* と */ の対応が取れていない 文末の';'を忘れている 大文字と小文字の違いがある メインクラス名とファイル名が不一致で ある 6 変数と定数 ・基本データ型 ・String型 ・参照型 ・定数 ・型変換(キャスト) 8つの基本データ型 (1) 論理 データ型 説明 boolean 1ビット真偽値 文字 char byte 整数 16ビット Unicode文字 8ビット符号付 き整数 表現範囲 true(真)またはfalse(偽) \u0000 ~ \uFFFF -128 ~ 127 short 16ビット符号付 -32768 ~ 32767 き整数 int 32ビット符号付 -2147483648 ~ き整数 2147483647 8つの基本データ型 (2) データ 型 long 実数 float 説明 表現範囲 64ビット符号付 -9223372036854775808 き整数 ~ 9223372036854775807 32ビット浮動小 単精度の浮動小数点数 数点数 double 64ビット浮動小 倍精度の浮動小数点数 数点数 変数宣言と初期化 変数宣言 int a; double b,c; int d = 10; int e, f = 20, g; 混ざっていても可 変数宣言と 初期化を同時に記述 データの代入 int dt1 = 100; int dt2, dt3, dt4; dt2 dt3 dt4 dt1 = = = = 200; dt2; dt1 + dt2 + 300; dt2 = dt3 = 500; //一度に代入 boolean型(1) 「真」か「偽」かという論理値の表現 true = 真 false = 偽 C言語はint型を用いて 論理値を表現している boolean型(2) boolean b; // boolean型の宣言 b = true; // trueを設定 b = false; // falseを設定 if (b == true) // bがtrueなら if (b == false) // bがfalseなら if (b) // (b==true)と同じ if (!b) // (b==false)と同じ b = 0; // Javaではエラー char型 文字(文字コード)を保持できる変数 Javaの内部の文字コードは"Unicode" (1文字16ビット) char ch1, ch2; ch1 =‘A’; //半角文字を設定 ch2 =‘亜’; //全角文字を設定 整数型 byte short int long bdt sdt idt ldt = = = = bdt; sdt; idt; ldt; // 8ビット //16ビット //32ビット //64ビット 127; 32760; 1234567890; 1234567890123456789L; 浮動小数点型 float double fdt; //32ビット 単精度実数 ddt; //64ビット 倍精度実数 fdt = 123.456F; ddt = 123.456789012345; String型 (文字列) String型は「基本データ型」ではなく「クラス」 String ss; String gg = "aaaa"; ss = "bbbb"; ss = ss + "cccc" ss = "dddd" + "eeee"; 参照型(1) 基本データ型以外のデータとして,クラスと 配列がある. クラスと配列を扱う変数の型を参照型とい う. 参照とは,アドレスあるいはポインタのこと. C言語のように,&や*を用いてポインタ を扱うことはしない. 参照型(2) 配列名 a を宣言し, int a[ ]; a = new int[10]; int型10個分の領域確保 a a[0] あるいは int a[ ] = new int[10]; a[9] 参照型(3) String s = "abcde"; s "abcde" 論理定数 bdt = true; // 論理定数 bdt = false; // 論理定数 数値定数(1) idt = 022; // 先頭が"0"だと8進数 idt = 22; // 10進数の22 idt = 0x12AB; // 先頭が"0x"だと16進数 数値定数(2) ldt = 123456789012L; // 末尾がLまたはlだとlong型 fdt = 111.222F; // 末尾がFまたはfだとfloat型 ddt = 123.45678; // 小数点表現の浮動小数点数double型 ddt = 5.67e4; // 指数表現の浮動小数点数double型 5.67×104の意味 文字定数と文字列定数 char ch; ch = 'A'; ch = '亜'; 文字定数 文字定数 String ss; ss = "abcde"; 文字列定数 主なエスケープ文字 エスケープ文字 \t \\ \' \" \n \ooo \uhhhh 意味 タブ \自身 シングルクォート 「’」 ダブルクォート 「"」 改行 3桁の8進数 4桁の16進数 エスケープ文字の使用例 System.out.println(”String\”ABC\””); String”ABC” と表示される System.out.println(”ABC\nDEF”); ABC DEF と表示される final定数 if (dt == 1000) ↓ 1000が何を意味する のか判りにくい final で設定した変数(定数) は、以後変更できない final int MAX_DATA = 1000; …… …… if (dt == MAX_DATA) 型変換(キャスト) int i ; double d; i = 123; d = i; //表現能力の高い方への代入はOK.dは123.0 d = 789.125; i = d; i = (int) d; //表現能力の低い方への代入はエラー //こうして型変換すればOK.iは789 7 よく使われる演算子 ・算術演算子 ・関係演算子 ・論理演算子 ・代入演算子 ・文字列の等価演算と連結演算 おもな演算子の種類 演算子名 算術演算子 内 容 +やーなど四則演算を行う 関係演算子 2つの値の大小関係を判断する 論理演算子 「かつ(AND)」や「または(OR)」な どの論理演算を行う 計算結果を変数に代入する 代入演算子 算術演算子 Javaの 数学の 演算子 演算子 + * / % + × ÷ mod 意味 使用例 結果 加算 12+4 16 減算 12-4 8 乗算 12*4 48 除算 12/4 3 余り 12%4 0 整数と浮動小数点数の混合計算 double ddt; ddt ddt ddt ddt = = = = 10 / 10.0 10.0 10 / 4; / 4.0; / 4; 4.0; ー ー ー ー ddtは ddtは ddtは ddtは 2.0 2.5 2.5 2.5 となる となる となる となる 演算の優先順位 a = 10 + 20 * 30; 答えは? 610 • * / % が + - より先に処理される • ( ) が最優先 演算子には優先順位がある a a a a a a = = = = = = (10 100 100 100 100 100 + / / / / + 20) * 30; 20 / 5; (20 / 5); 20 * 5; (20 * 5); 20 / 5; 関係演算子と等価演算子 2つの値の大小関係を, true(真) false(偽) で表す。 例えば 1 < 3 → true 1 >=3 → false 関係演算子と等価演算子一覧 関係演 算子 < <= > >= == != 数学の 演算子 < ≦ > ≧ = ≠ 意味 ~より小さい 使用 結果 例 1 < 2 true ~以下 1 <= 2 true ~より大きい 1>2 ~以上 1 >= 2 false 等しい 1 == 2 false 等しくない 1 != 2 false true 論理演算子 (A && B;AかつB) A && B B false true A false false false true false true 論理演算子 (A || B;AまたはB) A || B B false true A false false true true true true 論理演算子 (!A;Aではない) A !A false true true false 代入演算子 a = 1234; a = a + 10; ー a は 1234 ー a は 1244 a = b = c = 10; 複合代入 += -= *= /= %= a += 10; aに10を 足し込む a -= 10; ー a = a + 10 と同じ ー a = a - 10 と同じ インクリメント/デクリメント演算子(1) 演算子 ++ -- 意味 1加算 使用例 ++a; または a++; 1減算 --a; または a--; ++a; または a++; は a = a + 1; と同じ. --a; または a--; は a = a - 1; と同じ. インクリメント/デクリメント演算子(2) 先加算: a = ++b; b = b + 1; a = b; と同じ 後加算: a = b++; a = b; b = b + 1; と同じ 文字列の等価演算 String s1 = “abcde”, s2 = “abcde”; この2つの文字列の内容が同じかどうか調べたい. If( s1 == s2) とするのは危険である. アドレスの比較 値(内容)の比較 If( s1.equals(s2) ) とするのが良い. s1 "abcde" s2 "abcde" 文字列連結演算子(1) 文字列は +演算子で連結することができる. String ss; ss = "aa" + "bb"; ss = "aa" + 10; ss = 20 + "bb"; ss = 20 + 10; ー ー ー ー ssは"aabb" ssは"aa10" ssは"20bb" エラー 文字列結合演算子(2) String ss; ss = "" + 10; ー ssは"10" ss = "cc" + 10 + 20; ー ssは"cc1020" ss = "cc" + (10 + 20); ー ssは"cc30" 文字列結合演算子(3) int a = 100; b = 200; System.out.println("a=" + a); --出力は a=100 System.out.println("a+b=" + (a+b)); --出力は a+b=300 System.out.println("a+b=" + a + b); --出力は a+b=100200 8 制御文を使う ・分岐(if,switch) ・反復(for,while,do-while) ・脱出・継続(break,continue) 分岐(if)の例(イメージ) 条件(お金は十分か?) YES 真 購入手続き NO 偽 門前払い 分岐した後, 合流する if文の書式 if (条件) { 文1 } else { 文2 } 単文の例 if (b > 10) b = 20; else b = 50; - bが10より大なら - これを実行 - さもなければ - こちらを実行 複文の例 if (a == 2){ x = 1; y = 2; } else { x = 3; y = 4; } - aが2なら - さもなければ elseの省略 if (b > 10) b = 20; Elseは 無くても良い (何もしない) else ifによる多方向分岐 if (条件1) { 文1 } else if (条件2) { 文2 } : else if (条件n) { 文n } else { 文 } 条件によって たくさん分岐させる ときに用いる else ifによる多方向分岐例 if (a > 1000) dt = 4; else if (a > 500) dt = 3; else if (a > 100) dt = 2; else dt = 1; { } 中括弧は 無くても良い (文が1つの場合) else ifによる多方向分岐例 (さらにコンパクトな書き方) if (a > 1000) else if (a > 500) else if (a > 100) else dt dt dt dt = = = = 4; 3; 2; 1; switch文の一般形式(1) switch(式) { case 定数式1: 文1 break; case 定数式2: 文2 break; …… default: 文 } 式 case 定数式1 文1 case 定数式2 文2 default 文 switch文の一般形式(2) 整数でなくてはいけない! switch(式) { case 定数式1: セミコロンではな いので要注意 文1 break; ここでswitch文から抜け出る case 定数式2: 文2 break; これがないと次の文まで実行 されてしまう …… default: 文 どれにもあてはまらな かった場合に実行され } る いくつ文を並べてもよい 複数の文だからといって { } を用いる必要はない case 3: a = 100; sum = sum + b; myfunc(); break; switch(式)の式には 整数か文字を結果とする式を書く int a; double f; char c = 'Y'; switch ( a+10 ) OK switch ( f ) エラー switch ( c ) OK 繰り返し処理のイメージ 条件を満たしているか? NO 仕事 YES 仕事 条件を満たしているか? YES NO for文の書式 for (初期化; 継続条件; 再設定) { 文 } セミコロン ; が無いことに注 意 用例 for (i=1; i<=10; i++) { 文 } for文の決まり文句 for (i= 1 ; i <= 10; i++) から まで for (初期化; 継続条件; 再設定) { 文 } 初期化 継続条件 真 文 再設定 偽 for文内での変数宣言(1) for (int i=1; i<=10; i++) { 文 for文の中で宣言した変数は、 for文の中だけでしか使えな } い System.out.printn(i); エラーが出る for文内での変数宣言(2) for (int i=1,a=2; i<=10; i++, a--){ 文 複数の変数を 複数の文を書く } 宣言できる こともできる for文による無限ループ for (;;) { 文…… } ※特殊な用法 - ループが無限に繰り返される while文の書式 while (継続条件) { 文 forよりずっと単純 } 終了条件ではないことに注意 用例 while (i<=10) { 文 } while (継続条件) { 文 } 継続条件 真 文 偽 do-while文の書式 do { 文 } while (継続条件); 用例 最初に一度は必ず文が実行される点が異なる do { 文 } while (i<=10); do { 文 } while (継続条件); 文 真 継続条件 偽 break文で脱出する break; ラベルなしbreak文はswitch文または for,while,doなどのループから脱出するため に用いる ループがネスト構造になっているときはbreak 文の存在するループを一つだけ抜ける swtich文以外で用いるbreak文は,if文と併 用する break文のイメージ 繰り返し文(forなど){ 命令; 命令; 命令; 命令; 命令; break; 命令; この2つの命令は飛ばして 命令; 繰り返しを止める } ・・・ ・・・ ネスト構造=入れ子構造 for (…){ …… if(…) { for (…) { …… break; …… } } } continue文で継続する continue; continueはfor, while, do-whileの中だけで使 用できる ループ処理をその回だけスキップし,以降の処 理は継続(continue)する continue記述位置から,ループ終端までに書 かれた記述をスキップする ループがネスト構造になっているときcontinue 文の存在するループ内で機能する continueのイメージ 繰り返し文(forなど){ 命令; 命令; 命令; 命令; 命令; continue; 命令; この2つの命令は飛ばして 命令; 次の処理に移る } Java入門クリアまでのみちすじ(1) 9 10 11 12 13 14 15 配列を用いる コンソール入出力 メソッドの作りかた クラスの基本 クラスの継承 インタフェースを実装する パッケージにまとめる 情報工学実験Ⅰ オブジェクト指向プログラミング(1) Javaクリアまでのみちすじ(2) 16 17 18 19 20 21 22 スレッドを使う 例外処理をする ファイル入出力 標準のメソッドを使う アプレットの作成 ウィンドウ部品を用いる ウィンドウ型アプリケーションの作成 情報工学実験Ⅰ オブジェクト指向プログラミング(2)
© Copyright 2024 ExpyDoc