Javaプログラミング入門【第3回】

1,372 views

Published on

String型
メソッド
配列

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,372
On SlideShare
0
From Embeds
0
Number of Embeds
55
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Javaプログラミング入門【第3回】

  1. 1. Javaプログラミング入門【第3 回】
  2. 2. 前回の復習       変数と型 if文 swich文 for文 while文 String型
  3. 3. 変数とは   何かを入れておく箱のようなもの 変数という箱に対してできること     変数を作る(変数宣言) 値を入れる(代入) 値を見る(参照) 変数名は数字で始めることは出来ない
  4. 4. 変数の初期化 • 初期化 ▫ 変数宣言と同時に値を定める  int x = 3;  3という値で初期化されたint型変数x  int x;  未定義の変数
  5. 5. 代入演算子 • 代入演算子 ▫ x = 3;  x←3; という意味 • 値が等しいかどうかを調べる(等価) ▫ x == y
  6. 6. Java言語の型 • 基本型(primitive type/プリミティブタイプ) ▫ 論理値及び数値を表す型 • 参照型(reference type/リファレンスタイプ) ▫ クラス、インターフェース、配列やenum型を表 す型
  7. 7. if文 • 日本語の『もしも…ならば』 if (条件式) { 条件が成り立つ時の処理 } • 条件式は必ずboolean値(true/false)の値になる
  8. 8. 比較演算子 Java 数学 意味 p == 50 p = 50 pが50に等しいならtrue、それ以外はfalse p != 50 p ≠ 50 pが50に等しくないならtrue、それ以外はfalse p >= 50 p ≧ 50 pが50以上であればtrue、それ以外はfalse p <= 50 p ≦ 50 pが50以下であればtrue、それ以外はfalse p > 50 p > 50 pが50より大きいならtrue、それ以外はfalse p < 50 p < 50 pが50より小さいならtrue、それ以外false
  9. 9. if ~else文 • 日本語の『もしも…ならば、それ以外は』 If (条件式) { 条件式に当てはまった時の処理 } else { 条件式に当てはまらなかった時の処理 }
  10. 10. if文の連鎖 • if文は連鎖で書ける if (条件式1) { 条件式1を満たす時の処理 } else if (条件式2) { 条件式2を満たす時の処理 } else { 条件式1、2共に当てはまらない時の処理 }
  11. 11. 論理演算子『||(または)』 • 2つの条件を結びつけ、その2つのうちどちらか 一方でも(両方でも可)成り立っていればよい • 論理和、OR条件という
  12. 12. 論理演算子『&&(かつ)』 • 2つの条件式を結びつけ、その2つのどちらも成 り立つ • 論理積、And条件と言う
  13. 13. switch文 • 多くの選択肢から1つを選んで実行する場合、 switch文を使用するとプログラムが見やすくなる switch (式) { case 定数式1: case1の時の処理 break; case 定数式2: case2の時の処理 break; default: } case1、2共に当てはまらない時の処理 break;
  14. 14. switch文 • Switch文を実行する時、()でくくられた式が計 算される。 ▫ これを『式の評価』という • break ▫ 処理の中断を表す • 文字(char)による式の評価も出来る
  15. 15. 定数式 • 『コンパイルした時点で値が決まる』のが定数 式 ▫ 定数式:1+2+3 • x+2+3は定数式ではない ▫ xの値が評価する時点で式の値が変化するため
  16. 16. for文 • 条件を満たす間繰り返す for (初期化; 条件式; 次の一歩) { 繰り返す処理 }
  17. 17. for文で0から3までを表示する public class Count3 { public static void main(String[] args) { for (int i = 0; i < 4; i++) { System.out.println(i); } System.out.println(“end”); } }
  18. 18. while文 • 条件文が条件を満たす限り、ある処理を繰り返 して行う while(条件式) { 繰り返す処理 } • 条件式はboolean型の式(true/false)
  19. 19. 0から3までを表示する Public class While1 { public static void main(String[] args) { int i = 0; while (i < 4) { System.out.println(i); i++; } System.out.println(“end”); } }
  20. 20. Stringクラスにあるメソッドの一部 メソッド 動作 String replace(char oldChar, char newChar) 文字列のoldCharをすべてnewCharに置換 した新しい文字列を返却する String substring(int beginIndex) 文字列のbeginIndex番目の文字以降からな る新しい文字列を返却する String substring(int beginIndex, int endIndex) 文字列のbegineIndex番目~endIndex-1番 目の文字からなる新しい文字列を返却する String toLowerCase() 文字列中の大文字を全て小文字に変換した 新しい文字列を返却する String toString() 文字列自体を返却する String toUpperCase() 文字列中の小文字を全て大文字に変換した 新しい文字列を返却する String trim() 文字列の両端からホワイトスペースを取り 除いた新しい文字列を返却する
  21. 21. オブジェクトを『参照』する • String型などのオブジェクトの型は参照型と言 われる • 参照型の変数にはオブジェクトが直接代入され ているわけではなく、メモリのどこかに存在す るオブジェクトを指し示す値(メモリのアドレス、 ポインタ、インデックス、インジケータなどと も呼ばれれる)が代入されている
  22. 22. オブジェクトを『参照』する • String word = “Hello!”; 変数word Hello!
  23. 23. オブジェクトを『参照』する • word = “こんにちは”; 変数word 文字列Helloは書き変わらない Hello! →ガーベッジ(ごみ)になった 変数wordの値は 変わる こんにちは
  24. 24. オブジェクトを『参照』する • String newWord = word; 変数word 変数wordとnewWordが 同じ文字列を指す 変数newWord こんにちは
  25. 25. オブジェクトを『参照』する • word = null; 変数word 変数wordは何も参照していない こんにちは 変数newWord
  26. 26. 多重定義(オーバーロード) • 複数のメソッドが同じ名前を使うことをメソッ ドの多重定義(オーバーロード)と呼ぶ • メリット:プログラマが覚えなければならない メソッドの名前の数を減らすことが出来る • コンパイラは引数の型と個数によって、実際に 使われているメソッドを認識する • 引数の型と個数のことをメソッドのシグニチャ と呼ぶ
  27. 27. 前回の続き • String型 • break文、continue文 • do-while文
  28. 28. 文字列の一致はequalsを使う • 変数xとyが等しいかどうかを調べる時 • 変数xとyが基本型の場合 ▫ x == y • 変数xとyが参照型の場合 ▫ x.equals(y)
  29. 29. 演習12 • 以下のプログラムをwhile文で書き換えなさい public class DrawGraph { public static void main(String[] args) { for (int i =0; i < 10; i++) { System.out.println(i + “:”); for (int j = 0; j < i; j++) { System.out.print (“*”); } System.out.println(“”); } } }
  30. 30. do-while文 • 繰り返す処理を1回必ず実行する →処理を行ってから、条件式を判定する Do { 繰り返す処理 } while (条件式);
  31. 31. break文 • forやwhileの繰り返しを中断する仕組みにbreak 文がある while (…) { … if (条件式) { break; } … } ←while文を抜ける
  32. 32. 二重ループとbreak文 • forやwhileが二重になっている場合、breakで中断 するのは内側のループのみ while (…) { while (…) { if (条件式) { break; } … } … } 内側のwhile文のみ中断
  33. 33. continue文 • ループをスキップするのがcontinue文 while (…) { … if (条件式) { continue; } … } whileの残りの処理をスキップし、 次のループに入る
  34. 34. 演習13 • 次のスライドのプログラムContinueTest.javaは 何をするプログラムか?また、 ContinueTest.javaをcontinueを使わない形式に 書き換えなさい
  35. 35. ContinueTest.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ContinueTest { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { String line; while ((line = reader.readLine()) != null) { if (!line.endsWith("{") && !line.endsWith("}")) { continue; } System.out.println(line); } } catch (IOException e) { System.out.println(e); } } }
  36. 36. if文とwhile文 • if文 if(条件式){ 処理 } • while文 while(条件式) { 処理 } • if文とwhile文は同じ形をしていて、条件式を満 たさない限り、処理は実行されない
  37. 37. if文とwhile文 • if文は繰り返さないwhile文であり、while文はif文の繰り 返しである • 「処理」が実行され始める時は、必ず「条件」は満たさ れた状態になっている ▫ 「もしも条件が満たされたら処理を行う」→「今、この 処理を行うのなら、先ほどの条件は必ず満たされている ことが前提となっている」 (例) while ( i < 100) { if (i < 100) { 処理 } } この場合のif文は無駄
  38. 38. 今回の内容 • メソッド(クラスメソッド) • 配列 • オブジェクト指向に向けて
  39. 39. メソッドとは • n = Integer.parseInt("100"); メソッド 引数 • メソッドから戻ってくる整数100を戻り値と言 う • Integer.parseIntに仕事をしてもらうことをメ ソッド呼び出しと言う
  40. 40. 半額セールの金額計算 • 半額セールで元値が10,000円の商品を買った ら、金額はいくら? • 上記を数式で表してみると ▫ p(金額) ÷2
  41. 41. Java言語で書いてみる • 半額の計算をするプログラムDiscount1.javaを作 成してください。 • pの値は10000とします。
  42. 42. まとまった仕事をメソッドで表現する • 「半額計算をする」という仕事を、halveメソッ ドで表現してみる
  43. 43. メソッドを分解する • • • • • • • • public static int halve ( int n ) return
  44. 44. public • アクセス制御を表す • ここでは、だれでも呼べるメソッド • 詳細は後日
  45. 45. static • クラスメソッド • staticなメソッドからは、staticなメソッドしか 呼び出せない • 詳細はクラスについて学んでから
  46. 46. int halve(int n) • int メソッドの戻り値の型を宣言 • halve 「半分にする」という意味。メソッド名 ▫ 変数の名前は名詞、メソッドの名前は動詞にする ことが多い ▫ 名前は自由だが、名前の途中にアンダースコアつ けるのはJavaのお作法としてはNG • (int n) メソッドの引数(メソッドの入力) ▫ ここではint型のnという変数を意味する
  47. 47. return • メソッドの戻り値を記述する • returnの後ろには式も記述出来る • メソッドからの出力とも言う
  48. 48. 戻り値がないメソッド例 public class Graph1 { public static void main(String[] args) { printGraph(10); } public static void printGraph(int x) { for (int i = 0; i< x; i++) { System.out.print("*"); } System.out.println(""); } }
  49. 49. 戻り値のないメソッド • 戻り値にvoidと記述があると、戻り値がないメ ソッドを表す • 「空の」「無効の」という意味
  50. 50. ローカル変数(局所変数) • printGraphの中に登場する変数iは、このメソッ ド内でのみ有効な変数 ▫ このような変数をローカル変数(局所変数)と言う
  51. 51. 引数の数を変える public class Power1 { public static void main(String[] args) { System.out.println(getPower(8, 2)); } public static int getPower(int x, int n) { int y = 1; for (int i =0; i < n; i++) { y = x * x; } } }
  52. 52. 引数の数を変える • 注意点 ▫ メソッドの引数はいくつあってもOK ▫ メソッドの引数は、型を一つ一つ記述しなければ ならない
  53. 53. Systemクラスはどこにいる? • System クラス名 • out フィールド(変数)名 • println outが持ってるメソッドの名前 • Systemのようによく使用されるものはクラスラ イブラリとして提供されている
  54. 54. 演習1 • printGraphを使用して、以下のような放物線を描くプログラムを記述してくだ さい。 *************************************** *************************** *************** ******** **** * * **** ******** *************** *************************** ***************************************
  55. 55. 配列 • 変数に番号を付けて並べたものを配列という • 配列はクラスと同じく「参照型」
  56. 56. 変数の復習 • 国語・数学・英語の平均点を計算するプログラム public class Heikin1{ public static void main(String[] args) { int kokugo, suugaku, eigo; double heikin; kokugo = 63; suugaku = 90; eigo = 75; heikin = (kokugo + suugaku + eigo) / 3.0; } } System.out.println("国語は" + kokugo + "点"); System.out.println("数学は" + kokugo + "点"); System.out.println("英語は" + eigo + "点"); System.out.println("平均点は" + heikin + "点");
  57. 57. 配列を使ったプログラム public class Heikin2 { public static void main(String[] args) { int[] ten; double heikin; ten = new int[3]; ten[0] = 63; ten[1] = 90; ten[2] = 75; heikin = (ten[0] + ten[1] + ten[2]) / 3.0; } } System.out.println("国語は" + ten[0]+ "点"); System.out.println("数学は" + ten[1] + "点"); System.out.println("英語は" + ten[2] + "点"); System.out.println("平均点は" + heikin + "点");
  58. 58. 配列用の変数を宣言する • int[] ten; ▫ 「 intの配列」という型宣言 ▫ tenは変数名
  59. 59. 配列を確保する • ten = new int[3]; ▫ int型の変数3つ分の領域がメモリ上に確保される ▫ 3は、配列の要素の個数 ▫ newは新しくメモリを確保するときに使うJavaの 予約語 ▫ 配列の要素の個数のことを配列の長さ(length)と 言う
  60. 60. 配列の要素に代入する • Javaの配列要素は必ず0番目から始まる ten[0] = 63; 1個目 ten[1] = 90; 2個目 ten[2] = 75; 3個目 ▫ 要素の数は3つ! • []の間にある数字を添字と言う
  61. 61. 配列の要素と普通の変数の比較 int[]型の変数 int型の変数 宣言 int[] ten; int kokugo, suugaku, eigo; 確保 ten = new int[3]; (不要) 代入 ten[0] = 63; ten[1] = 90; ten[2] = 75; kokugo = 63; suugaku = 90; eigo = 75; 参照 System.out.println("国語は" + ten[0]+ "点"); System.out.println("数学は" + ten[1] + "点"); System.out.println("英語は" + ten[2] + "点"); System.out.println("国語は" + kokugo + "点"); System.out.println("数学は" + kokugo + "点"); System.out.println("英語は" + eigo + " 点");
  62. 62. 添字を変数にする public class Heikin3 { public static void main(String[] args) { int[] ten; int sum; double heikin; ten = new int[3]; ten[0] = 63; ten[1] = 90; ten[2] = 75; sum = 0; for (int i =0; i < 3; i++) { sum = sum + ten[i]; } heikin = sum / 3.0; System.out.println("国語は" + ten[0]+ "点"); System.out.println("数学は" + ten[1] + "点"); System.out.println("英語は" + ten[2] + "点"); System.out.println("平均点は" + heikin + "点"); } }
  63. 63. 配列の長さを表すlength public class Heikin4 { public static void main(String[] args) { int[] ten; int sum; double heikin; ten = new int[5]; ten[0] = 63; ten[1] = 90; ten[2] = 75; ten[3] = 45; ten[4] = 81; sum = 0; for (int i =0; i < ten.length; i++) { sum = sum + ten[i]; } heikin = (double) sum / ten.length; System.out.println("国語は" + ten[0]+ "点"); System.out.println("数学は" + ten[1] + "点"); System.out.println("英語は" + ten[2] + "点"); System.out.println("理科は" + ten[3] + "点"); System.out.println("社会は" + ten[4] + "点"); System.out.println("平均点は" + heikin + "点"); } }
  64. 64. lengthを使う利点 • ten.lengthと記述すれば、「配列の長さ」という 意味がより強くプログラムで表現できる ▫ 人間に読みやすいプログラム • 将来プログラムを変更して、7科目になっても、 ten.lengthの部分は変更しなくて良い
  65. 65. キャスト演算子 • (double) sum / ten.length ▫ 型変換を強制的に行うための演算子 ▫ =キャスト演算子 ▫ ten.lengthはint型なので、キャストしないと小数 点以下が切り捨てになることに注意
  66. 66. 配列の初期化 • 配列はまとめて初期化が出来る ▫ 配列の型[] 配列 = {要素, 要素, 要素, 要素,...}; ▫ 配列 = new 配列の型[] {要素, 要素, 要素, 要素,...};
  67. 67. 初期化の例 public class Heikin5 { public static void main(String[] args) { int[] ten = {63, 90, 75, 45, 81}; int sum; double heikin; sum = 0; for (int i =0; i < ten.length; i++) { sum += ten[i]; } heikin = (double) sum / ten.length; System.out.println("国語は" + ten[0]+ "点"); System.out.println("数学は" + ten[1] + "点"); System.out.println("英語は" + ten[2] + "点"); System.out.println("理科は" + ten[3] + "点"); System.out.println("社会は" + ten[4] + "点"); System.out.println("平均点は" + heikin + "点"); } }
  68. 68. 2次元配列 • 配列の配列を作ることが出来る ▫ これを2次元配列と呼ぶ • 宣言 int[] [] tens; int[][] tens = { {63, 90, 75, 45, 81}, {85, 100, 95, 80, 90}, {100, 100, 100, 95, 100} }; • 2次元配列の要素数は一定でなくてもよい
  69. 69. 表計算 public class Heikin5 { public static void main(String[] args) { int[][] tens = { {63, 90, 75, 45, 81}, {85, 100, 95, 80, 90}, {100, 100, 100, 95, 100} }; } } for (int i = 0; i < tens.length; i++) { int sum = 0; for (int j = 0; j < tens[i].length; j++) { System.out.print("t" + tens[i][j]); sum += tens[i][j]; } System.out.println("t| " + (double)sum / tens[i].length); }
  70. 70. int[] tenとint ten[] • 配列の型表記には2つの方法がある • どちらもまったく同じ意味を持つ
  71. 71. 配列の要素を巡る拡張for文 • Java5より使用出来る拡張for文を使用すると配 列の要素を簡単に回すことが出来る • 拡張for文の形 for (int n: ten) { System.out.print(ten); } for(要素の型 変数名: 配列) { 変数を使った処理 }
  72. 72. 演習2 • 最大値を求めるプログラムを完成させなさい(???の 部分を埋めなさい) public class ShowMaxData { public static void main(String[] args) { int[] data = {31, 41, 59, 26, 53, 58, 97, 93, 23, 84}; int maxData = data[0]; for (int i = 0; i < ???; i++) { ??? } System.out.println("最大値は" + maxData + "です"); } }
  73. 73. 演習3 • 配列dataの要素を小さい順に並べ替えるプログ ラム(ソートプログラム) SortDataを完成させな さい • 表示結果 並べ替える前 31 41 59 26 53 58 97 93 23 84 並べ替えた後 23 26 31 41 53 58 59 84 93 97
  74. 74. SortData public class SortData { public static void main(String[] args) { int[] data = {31, 41, 59, 26, 53, 58, 97, 93, 23, 84}; System.out.println("並べ替える前"); for (int i =0; i < data.length; i++) { System.out.print(data[i] + " "); } System.out.println(""); for (int i = 0; i < ???; i++) { for (int j = i + 1; j < ???; j++) { if (data[i] > data[j]) { // 交換 ??? } } } System.out.println("並べ替えた後"); for (int i = 0; i < data.length; i++) { System.out.print(data[i] + " "); } System.out.println(""); } }
  75. 75. 演習4 • int型の2次元配列の内容を表示するメソッド printArrayを完成させなさい • 実行結果 { { 3, 1, 4, 1, }, {5, 9, 2, }, {6, 5, }, {3, } }
  76. 76. PrintArray.java public class PrintArray { public static void main(String[] args) { int[][] arr = { {3, 1, 4, 1, }, {5, 9, 2, }, {6, 5, }, {3, } }; printArray(arr); } public static void printArray(???) { System.out.println("{"); for (int i =0; ???; i++) { System.out.print(???); for (int j =0; ??? ; j++) { System.out.print(???); } System.out.println(???); } System.out.println("}"); } }
  77. 77. 参考文献 • Java言語 プログラミングレッスン[第3版]上 ▫ 結城浩[著]

×