山 元 進
1 度 は 講 義 を 受 けたことを 念 頭 に 置 いて 講 義 遠 慮 なく 質 問 せよ 質 問 で 授 業 を 止 めたくないならば TA の 人 を 呼 んで 質 問 すると 良 い 前 期 講 義 の 欠 席 者 は 特 に 注 意 せよ 4 限 座 学 +5 限 演 習 出 席 をとる( 前 期 同 様 のシステム) 中 間 試 験 を 行 う 期 末 試 験 の 範 囲 は 教 科 書 1-8 章
しばらく Javaに 限 らないことを 話 す
コンピュータ 中 のデータ = ON/OFF で 表 現 ON/OFF 1/0 とすると2 進 数 データはすべて2 進 数 として 表 される 2で 繰 り 上 がるのが2 進 数 10で 繰 り 上 がるのが10 進 数 2 進 数 はケタ 多 い 16 進 数 もよく 使 う 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 16 進 数 1 ケタ = 2 進 数 4 ケタ
コンピュータへの 指 令 も2 進 数 のデータとして 記 録 されている 機 械 語 機 械 語 は 人 間 がコンピュータにさせたいこと を 記 述 するには 不 向 き 数 字 の 羅 列 は 覚 えにくい! 人 間 の 言 語 体 系 になるべく 近 いように 作 られ た 言 語 : 高 級 言 語
データは 全 て2 進 数 で 表 されているが その データを 文 字 と 解 釈 するか 数 値 と 解 釈 する か あるいはもっと 複 雑 なデータと 解 釈 するか データの 型 数 値 として 解 釈 するなら 数 値 型 文 字 として 解 釈 するなら 文 字 型
問 : 2010 を2 進 数 で 表 せ 2 10 = 1024, 2 11 = 2048 (10 進 数 ) 2048-32-4-2 (2 進 数 ) 100000000000 100110 (32+4+2) = 11111011010
問 : 2 進 表 記 された 数 1110011000 を 16 進 表 記 に 直 せ 11 1001 1000 (4ケタずつ 切 る) 398 ただ 文 字 を 並 べても 位 取 りの 意 味 が 不 明 瞭 Java では 16 進 数 の 先 頭 に 0x 付 加 0x398 10 進 数 なら (3 16+9) 16+8=920 16 進 数 hexadecimal 類 似 物 に 8 進 数 あり 先 頭 に 0 付 加 0123 と 123 は 値 が 全 く 違 うので 注 意!!
文 字 と 数 との 対 応 表 を 事 前 に 決 めておく ASCII コード アルファベット 数 字 記 号 1バイト ユニコード 2バイトで1 単 位 1 or 2 単 位 で1 文 字 文 字 を 表 すデータを 文 字 型 char 型
正 の 整 数 はそのまま 扱 う ただし ケタ 数 は 決 めておく 31 ビット 分 負 の 数 は2の 補 数 表 示 を 使 う -1 を 0xffffffff であらわす +1 するとケタがあふれて 0x0 になるのでこう 選 ぶ 一 般 の 数 x は2の 補 数 表 示 : x を2 進 表 示 0/1 反 転 1 を 足 す ( 符 号 なしの 整 数 もある)
実 数 は 全 部 を 取 り 扱 うのは 困 難 2=1.41421356. 桁 数 に 限 りがない 必 要 メモリも 限 りない 仮 数 部 指 数 部 分 かりやすいよう 10 進 表 示 す ると 123.456 1.23456 10 2 倍 精 度 実 数 : double 型 1つのデータで8バイト 単 精 度 実 数 : float 型 1つのデータで4バイト
メモリ = データを 記 憶 する 場 所 記 憶 場 所 管 理 のため 番 号 の 番 号 = アドレス 通 常 8 ビット (8 ケタの 2 進 数 ) = 1 バイト ごと 1 byte = 2 ケタの 16 進 数 0x00 = メモリの 1 バイト 分 0 2 進 数 表 記 なら 00000000 (8ケタ)
変 数 プログラム 実 行 中 に 変 更 され 得 るデータ 通 常 メモリの 特 定 の 場 所 と 対 応 している 定 数 プログラム 実 行 中 に 変 更 されないデータ 通 常 変 数 や 定 数 には ラベル( 名 前 )が 付 く 例 : int k; // k という 名 前 の 整 数 (int) 型 変 数
高 級 言 語 のひとつ 中 間 コード 利 用 仮 想 マシン(インタプリタ)で 実 行 Java のプログラム 実 行 まで Java 言 語 で 書 か れたプログラム Sample1.java kasu コンパイル javac Sample1.java 中 間 コード Sample1.class 実 行 結 果 仮 想 マシン 上 実 行 java Sample1
後 でどこにサンプルを 置 いたかわかりやすい よう Kiso1-1 などとディレクトリを 作 り その 中 で 作 業 するとよい mkdir Kiso1-1; cd Kiso1-1 Sample1.java を 作 成 して 編 集 する emacs Sample1.java 文 字 コードに 注 意 ( 左 下 に U と 出 ているか?) 書 き 終 わったら save して 終 了
class Sample1 { public static void main(string args[]) { System.out.println("ようこそJavaへ!"); System.out.println("Javaを 始 めましょう!"); } }
{} の 入 れ 子 構 造 を 字 下 げで 表 す 対 応 する { と } が 同 じケタに 来 るように class Sample1 { public static void main(string args[]) { System.out.println( "ようこそJavaへ!");System.out.println("Javaを 始 めま しょう!"); } } 上 のような 書 き 方 は Javaの 文 法 上 許 されるが 私 は 許 さない! 提 出 課 題 などでこんなの 見 つけたら 減 点 する
プログラム 中 にコメント( 註 釈 )を 書 ける 1 行 の 中 で, // の 右 はコメント /* と */ とに 囲 まれた 部 分 はコメント コメントに 何 を 書 いても 実 行 結 果 に 影 響 なし コメントは コードを 読 む 人 のために 書 く
class Sample1 // クラスの 宣 言 クラス 名 は Sample1 { // クラス Sample1 本 体 の 開 始 // 次 行 から main()メソッド( 実 行 開 始 場 所 )の 宣 言 public static void main(string args[]) { // main() メソッド 本 体 の 開 始 System.out.println("ようこそJavaへ!"); System.out.println("Javaを 始 めましょう!"); } // main() メソッド 定 義 の 終 了 } // クラス 定 義 の 終 了 // メソッド クラスの 宣 言 とも 続 く{}の 中 身 が 本 体 である // メソッドの 宣 言 が クラスの 宣 言 の 中 に 入 れ 子 になっている // クラスの 概 念 の 詳 細 は 後 の 回 の 講 義 で 行 う
class Sample1 // クラスの 宣 言 { // コメント ( 人 間 が 読 むときのための 註 ) public static void main(string args[]) { // main メソッドの 宣 言 ( 仮 想 マシンの 実 行 開 始 場 所 ) } ファイル 名 ( 拡 張 子 を 除 く)と 同 じにすること! 文 末 のセミコロン 必 須 ( 次 行 も 同 様 ) System.out.println("ようこそJavaへ!"); System.out.println("Javaを 始 めましょう!"); カッコの 対 応 関 係 には 意 味 あり 開 いたら 必 ず 正 しい 位 置 で 閉 じること ( 次 行 も 同 様 ) } // メソッド クラスの 宣 言 とも 続 く{}の 中 身 が 本 体 である // "(ダブルクォーテイション) メソッドの 宣 言 が クラスの は 開 くときも 宣 閉 じるときも 言 の 中 同 に じ 入 記 れ 号 子 対 になっている 応 関 係 に 注 意 // "と"で クラスの 囲 まれた 概 部 念 分 の は 詳 文 字 細 列 は データで 後 の 回 全 角 の OK それ 講 義 で 以 行 外 うでは 全 角 不 可 特 に 全 角 スペースが 文 字 列 データ 以 外 の 部 分 に 混 じらないように!!
Java のコードは1つ 以 上 のクラスからなりたつ main()メソッドからプログラムの 処 理 がはじまる 文 は 原 則 として 先 頭 から 順 番 に 実 行 される 文 の 最 後 にはセミコロンをつける コメントは 人 間 がコードを 理 解 しやすくするため に 書 く ( 実 行 動 作 には 関 係 しない) インデントや 改 行 を 使 ってコードを 読 みやすく
コンパイル javac Sample1.java エラーなし Sample1.class できる (ls で 確 認 ) 実 行 java Sample1 Sample1.class が 仮 想 マシンで 実 行 される Sample1 の 後 に.class をつけるな!! プログラムの 書 き 間 違 い 手 順 違 い エラー 出 力 読 めば 何 を 間 違 えたか 参 考 になる
literal 通 常 は 形 容 詞 で 文 字 どおりの 名 詞 としては 文 字 どおりの 解 釈 意 味 プログラムで 値 を 表 す 文 字 列 Sample1.Java 中 では "ようこそJavaへ!" "Javaを 始 めましょう!" の2つが 文 字 列 リテラル データの 内 容 は ようこそJavaへ! Javaを 始 めましょう!
文 字 リテラルの 例 'A', 'B' 文 字 列 リテラルの 例 "ようこそJavaへ!" ' と " の 使 い 分 けに 注 意 ' は1 文 字 を 囲 む " は 文 字 列 を 囲 む
数 値 リテラルの 例 System.out.println(0x398); 0x398 は 数 値 リテラル( 整 数 リテラル) 920 と 表 示 される ( 整 数 はデフォルトで10 進 表 記 ) System.out.println(3.14159265e2); 3.14159265e2 は 浮 動 小 数 点 ( 数 )リテラル 314.159265 と 表 示 される (3.1415926 10 2 )
class Sample3 { public static void main(string args[]) { System.out.println('A'); // 文 字 リテラル System.out.println("ようこそJavaへ!"); System.out.println(123); // 整 数 リテラル } }
次 のようなメソッドを 使 う System.out.println() System.out.print() 問 : 両 者 の 違 いはなにか? 次 のページの Sample2.java をコンパイルして 動 かしてみよ
class Sample2 { public static void main(string args[]) { System.out.print("ようこそJavaへ!"); System.out.print("Javaを 始 めましょう!"); } } // Sample1 と Sample2 の 違 いは 何 か? // 見 比 べて 考 え 実 行 して 確 かめてみよ
複 数 の 文 字 で1 文 字 を 表 す 規 則 画 面 の 出 力 を 制 御 する 特 殊 な 文 字 など 普 通 の 文 字 で 表 せない そこで 文 字 などで 表 す 規 則 になっている タブ 印 字 位 置 を 前 もって 決 めた 場 所 へ 移 動 復 帰 印 字 位 置 を 行 の 先 頭 に 移 動 Java プログラム 中 で 特 別 な 意 味 のある 文 字 ' ' " " など System.out.println(" 100"); // 例 文 字 コードで 文 字 を 表 すのにも 使 える 教 科 書 表 2-1を 参 照 せよ
class Sample4 { public static void main(string args[]) { System.out.println(" 円 記 号 を 出 力 します : "); System.out.println("アポストロフィを 出 力 します : '"); } } // エスケープシーケンスを 使 うと 特 殊 な 文 字 をあらわすことができる
class Sample5 { public static void main(string args[]) { System.out.println("8 進 数 101の 文 字 は 101です "); System.out.println("16 進 数 0061の 文 字 は u0061です "); } } // 文 字 コードを 指 定 して 文 字 を 出 力 することができる
class Sample6 { public static void main(string args[]) { System.out.println(" 品 物 t t 単 価 t 数 量 t 金 額 "); System.out.println("えんぴつ t10 t2 t20"); System.out.println(" 消 しゴム t100 t1 t100"); } } // エスケープシーケンスを 使 って 画 面 の 出 力 を 制 御 できる // タブストップ( tによって 印 字 位 置 が 移 動 する 場 所 ) // はどこに 設 定 されているか 考 えよ ヒント: 半 角 文 字 換 算
1. 自 分 の 名 前 を 出 力 するプログラムを 作 成 せよ 2. タブ 記 号 を 表 すエスケープシーケンス( t) を 使 用 し 以 下 例 のように 氏 名 学 籍 番 号 学 部 を 出 力 するプログラムを 記 述 せよ 氏 名 山 元 進 学 籍 番 号 c0110999 学 部 コンピュータサイエンス 学 部 文 字 列 の 開 始 位 置 t でそろえること!!
提 出 は 課 題 2 のみ 課 題 2 の class 名 は Report2 とせよ 必 然 的 に ファイル 名 も 決 まる 時 間 内 にTA の 許 可 を 受 けること 許 可 のない 提 出 は 未 提 出 と 同 じ 扱 い