メソッドのまとめ

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

プログラミング入門1

プログラミング入門1

メソッドのまとめ

Microsoft PowerPoint - prog03.ppt

プログラミング入門1

デジタル表現論・第6回

JavaプログラミングⅠ

Java講座

Java プログラミング Ⅰ 11 回目多次元配列 2 次元配列 2 次元配列配列要素が直線上に並ぶ一次元配列に対して 平面上に並ぶ配列要素をもつ配列 直観的には 2 次元配列の準備配列変数の宣言は型と識別子を指定して次のように行う 型識別子 [ ][ ]; または 型 [ ][ ] 識別子 ; 配

Prog1_10th

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

Prog1_6th

プログラミング入門1

Javaプログラムの実行手順

memo

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

プログラミング入門1

プログラミング入門1

Microsoft PowerPoint - chap10_OOP.ppt

プログラミングA

Microsoft Word - 3new.doc

情報処理Ⅰ演習

情報処理Ⅰ

デジタル表現論・第4回

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

2

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

PowerPoint プレゼンテーション

ToDo: 今回のタイトル

Java言語 第1回

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

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

JavaプログラミングⅠ

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

Prog1_15th

pp2018-pp9base

プログラミングA

memo

Microsoft PowerPoint - 5Chap15.ppt

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

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Microsoft PowerPoint - prog03.ppt

2

プログラミングA

02: 変数と標準入出力

Microsoft PowerPoint - ruby_instruction.ppt

PowerPoint プレゼンテーション

ファイル入出力

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

ファイル入出力

JAVA入門

02: 変数と標準入出力

PowerPoint Presentation

02: 変数と標準入出力

02: 変数と標準入出力

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

Microsoft PowerPoint - prog07.ppt

JavaScriptで プログラミング

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

プログラミング実習I

gengo1-11

講習No.9

cp-7. 配列

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

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

ガイダンス

memo

PowerPoint プレゼンテーション

Microsoft Word - no202.docx

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

プログラミング入門1

人工知能入門

プログラムの基本構成

プログラミング入門1

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

Prog1_3rd

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

Microsoft PowerPoint - 09.pptx

02: 変数と標準入出力

02: 変数と標準入出力

Prog1_2nd

Microsoft Word - no11.docx

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

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Microsoft PowerPoint - kougi6.ppt

プログラミング入門1

Microsoft PowerPoint - 11.pptx

Prog2_10th

PowerPoint プレゼンテーション

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

PowerPoint プレゼンテーション

プログラミングI第5回

基礎プログラミング2015

基礎プログラミング2015

GEC-Java

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

JAVA入門

Transcription:

配列 (2) 2 次元配列, String http://jv2005.cis.k.hosei.c.jp/

授業の前に自己点検 配列変数に格納される配列の ID と配列の実体の区別ができていますか 配列変数の宣言と配列の実体の生成の区別ができていますか メソッドの引数に配列が渡されるとき 実際に渡されるものは何ですか このことの重要な帰結は何ですか 引数の値渡しと参照渡しということばを例を挙げて説明できますか 授業で扱う例題はすべて基本的な処理の定石です 国語や英語の勉強では暗誦すべきものに相当します 何も見なくてもすらすらと口をついて出てきますか プログラミング入門 1 第 12 回 2

配列変数の宣言 配列の実体の生成 初期化 int[] = {10, 20, 30, 40; 省略形 int[] = new int[]{10, 20, 30, 40; 変数の宣言とその初期化 配列の実体の生成とその初期化をまとめて書くと int[] ; = new int[]{10, 20, 30, 40; 配列の実体の生成とその初期化をまとめて書くと int[] ; = new int[4]; [0] = 10; [1] = 20; [2] = 30; [3] = 40; 配列の ID を格納するための変数を宣言 長さ 4 の配列の実体を生成し その ID を に格納する が指している配列本体の各要素に値を格納する 3

配列の長さ int[] = {1, 2, 3; for (int i = 0; i <.length; i++) { System.out.println([i]); 実行結果 1 2 3 擬似コードで書くと 最後の要素のインデックスは = {1, 2, 3 for i を 0 から ( 配列 の長さ - 1) まで print [i] プログラミング入門 1 第 12 回 4

配列の ID のコピー と が指し示す配列の実体 (ID=750) が同じものになってしまっている つまり の各要素に加えられた変更は の各要素にも反映してしまうことになる プログラミング入門 1 第 12 回 5

配列の実体のコピー プログラミング入門 1 第 12 回 6

配列の型はメソッドの引数 戻り値にも使用できる pulic sttic void min(string[] rgs) { int[] = cretearry();... int 配列型 pulic sttic int[] cretearry() { return new int[]{10, 20, 30, 40; pulic sttic void printarry(int[] rry) { for (int i = 0; i < rry.length; i++) { System.out.println(rry[i]); プログラミング入門 1 第 12 回 7

引数の値渡しと参照渡し int 型, doule 型は値渡し プログラミング入門 1 第 12 回 8

引数が配列型だと参照渡し コピーされるのは配列の実体の ID プログラミング入門 1 第 12 回 9

今回のテーマ 2 次元配列 2 次元の画像処理を行う場合や 行列を用いた演算をするような場面でよく利用される 配列の要素がまた配列 いろいろな型 chr 型 oolen 型 String 型 プログラミング入門 1 第 12 回 10

2 次元配列は行列を扱うのに便利 int[][] =new int[3][2]; この例では 行 3 と考えることができる 2 列の行列を 宣言している [0][0] [0][1] [1][0] [1][1] [2][0] [2][1] プログラミング入門 1 第 12 回 11

実際は下の概念図のようになっているので数学でいう行列のように長方形にデータが並んでいるのとは違う このことを意識しないといけない場面がある プログラミング入門 1 第 12 回 12

2 次元配列の変数の宣言 int [][] ; 2 次元配列の実体を指す ID を格納するための変数 を宣言する ID を書き付けた紙をしまうための箱がつくられる int [][] ; = new int[3][2]; 要素を格納する箱をつくるには int [][] = new int[3][2]; まとめて書ける 3 次の実正方行列を扱いたいのなら以下のように宣言すればよい doule [][] = new doule[3][3]; プログラミング入門 1 第 12 回 13

要素まで一度に初期化する int[][] = {{1, 2, {3, 4, {5, 6; 3 行 2 列の行列ができたことになる 1 3 5 2 4 6 プログラミング入門 1 第 12 回 14

行単位に管理されている int[][] = {{1, 2, {3, 4, {5, 6; 3 行 2 列の行列ができたことになる 1 2 [0] 3 4 5 6 [1] [2] プログラミング入門 1 第 12 回 15

2 次元配列を走査するときの書き方 int[][] = {{1,2, {3,4, {5,6; for (int i = 0; i <.length; i++) { for (int j = 0; j < [i].length; j++) { System.out.println("[" + i + "][" + j + "] = " + [i][j]);.length は行数 [i].length は第 i 行の長さ ( 列数 ) プログラミング入門 1 第 12 回 16

chr 型文字を扱う chr c = 'C'; chr spce = ' '; chr = ' あ '; chr 型の変数に文字を格納することができる chr = 'A'; System.out.println(); chr 型のデータつまり文字は println 命令や print 命令で表示することができる プログラミング入門 1 第 12 回 17

chr 型のデータの比較 chr = 'A'; if ( == 'A') {... == で等しいか判定できる chr c = 'C'; if ('A' <= c && c <= 'Z') { // 大文字のときの処理 else if ('' <= c && c <= 'z') { // 小文字のときの処理 文字には番号が振られているので大小の比較ができる chr c = 'C'; if (Chrcter.isUpperCse(c)) { // 大文字のときの処理 else if (Chrcter.isLowerCse(c)) { // 小文字のときの処理 こちらの方が読みやすい書き方 18

oolen 型 true と flse の 2 つの値だけ if ( < 0)... この式は oolen 型で 式の値は true または flse のいずれか プログラミング入門 1 第 12 回 19

oolen を戻り値にもつメソッド pulic sttic void min(string[] rgs) {... if (isequilterl(,, c)) System.out.println(" 入力された三角形は正三角形 "); else if (isisosceles(,, c)) System.out.println(" 入力された三角形は二等辺三角形 "); else System.out.println(" 入力された三角形は通常の三角形 "); pulic sttic oolen isequilterl(doule, doule, doule c) { return ( == && == c); pulic sttic oolen isisosceles(doule, doule, doule c) { return ( == == c c == ); 20

oolen 型を明示的に使う // 無限ループ while (true) {... // 探索 oolen found = flse; for (int i = 0; i < rry.length; i++) { if (rry[i] == serching) { found = true; if (found) { // 見つかった場合の処理 プログラミング入門 1 第 12 回 21

String 型文字列を扱うための型 String line = "Hello, world!"; int length = line.length(); 文字列 line の長さは line.length() で取得できる 配列 の長さは.length プログラミング入門 1 第 12 回 22

line chrat 命令 String line = "Hello, world!"; // 先頭の文字を取得 chr hed = line.chrat(0); // 末尾の文字を取得 chr til = line.chrat(line.length() - 1); line.chrat(5) H e l l o, w o r l d! line.chrat(0) line.chrat(line.length()-1) プログラミング入門 1 第 12 回 23

chrat 命令をループの中で使う String line = "Hello, world!"; for(int i = line.length() - 1; i >= 0; i--){ System.out.print(line.chrAt(i)); 出力!dlrow,olleH プログラミング入門 1 第 12 回 24

コンソールから入力された文字列 int input = Integer.prseInt(reder.redLine()); 実は 2 段階の操作をまとめて書いたものだった String line = reder.redline(); int input = Integer.prseInt(line); redline 命令が返すのは String 型のデータ つまり文字列 プログラミング入門 1 第 12 回 25

redline 命令で獲得した String を そのまま処理する pulic sttic void min(string[] rgs) throws IOException { BufferedReder reder = new BufferedReder(new InputStremReder(System.in)); String line = reder.redline(); for(int i=line.length()-1; i>=0; i--){ System.out.print(line.chrAt(i)); System.out.println(); Hello, world!!dlrow,olleh 入力 出力 プログラミング入門 1 第 12 回 26

chr[] 型と String 型 chr[] rry = new chr[10]; chr[] rry = {'H', 'e', 'l', 'l', 'o'; chr [] 型だと要素の変更ができる String は変更ができない ( その代わり便利な点もあるがここでは説明しない ) 相互の変換もできる ( 詳しくは講義資料参照 ) プログラミング入門 1 第 12 回 27

一緒にやってみよう 今回の演習で使うテストドライバをいつものように指示通り正確にインストールする テストドライバの導入に成功すると プロジェクト jv2005 の中の test というフォルダに 12 という名前のフォルダが作成される このフォルダには今週使用するテスト一式が入っている j1.lesson12 というパッケージを作成する 演習資料にある ReversePrint, MtrixAdd を擬似コードの検討から開始し 一連のテストを手順通りに実行せよ プログラミング入門 1 第 12 回 28

MtrixAdd の解説どのメソッドも責任があるプログラムは責任のネットワーク min 責任 :2 つの行列を用意し dd, printarry を起動する 行列の和を返す 2 つの行列を渡す 行列を渡す dd printarry 責任 : 行列の足し算責任 : 出力 プログラミング入門 1 第 12 回 29

dd メッソッド pulic sttic int[][] dd(int[][], int[][] ) { int[][] c = new int[.length][[0].length]; for (int i = 0; i < c.length; i++) { for (int j = 0; j < c[i].length; j++) { c[i][j] = [i][j] + [i][j]; return c; 行数 第 i 行の長さ どの行も同じ長さを想定しているので列の数と考えてよい プログラミング入門 1 第 12 回 30

printmtrix メソッド pulic sttic void printmtrix(int[][] mtrix) { for (int i = 0; i < mtrix.length; i++) { for (int j = 0; j < mtrix[i].length; j++) { System.out.print(mtrix[i][j]); System.out.print(" "); System.out.println(); 第 i 行の出力 プログラミング入門 1 第 12 回 31

課題 各自のペースで今回の課題をやってください プログラミング入門 1 第 12 回 32

ヒント : 行列の掛け算 c[0][0] = 00 10 20 01 11 21 02 12 22 00 00 + 01 10 + 00 10 20 02 20 01 11 21 02 12 22 for(int k=0; k<3; k++){ c[0][0]+=[0][k][k][0]; プログラミング入門 1 第 12 回 33

ヒント : 行列の掛け算 c[0][1] = 00 10 20 01 11 21 02 12 22 00 01 + 01 11 + 02 21 00 10 20 01 11 21 02 12 22 for(int k=0; k<3; k++){ c[0][1]+=[0][k][k][1]; プログラミング入門 1 第 12 回 34

ヒント : 行列の掛け算 c[0][2] = 00 10 20 01 11 21 02 12 22 00 02 + 01 12 + 00 10 20 01 11 21 02 12 22 02 22 for(int k=0; k<3; k++){ c[0][2]+=[0][k][k][2]; プログラミング入門 1 第 12 回 35

ヒント : 行列の掛け算 c[1][0] = 00 10 20 10 00 01 11 21 + 11 02 12 22 10 + 00 10 20 12 20 01 11 21 02 12 22 for(int k=0; k<3; k++){ c[1][0]+=[1][k][k][0]; プログラミング入門 1 第 12 回 36

ヒント : 行列の掛け算 c[i][j] = 00 10 20 01 11 21 02 12 22 + 00 10 20 + 01 11 21 i 0 0 j i 1 1 j i 2 2 j 02 12 22 C[i][j]=0; for(int k=0; k<3; k++){ c[i][j]+=[i][k][k][j]; プログラミング入門 1 第 12 回 37

ヒント : 行列の掛け算 for (int i; ; ){ for (int j; ; ){ c[i][j] の計算 プログラミング入門 1 第 12 回 38