プログラミング入門1

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

プログラミング入門1

プログラミング入門1

プログラミング入門1

メソッドのまとめ

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

プログラミング入門1

プログラミング入門1

プログラミングA

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

ガイダンス

メソッドのまとめ

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

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

2

Microsoft PowerPoint - prog03.ppt

プログラムの基本構成

K227 Java 2

JavaプログラミングⅠ

Java講座

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

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

2

Microsoft PowerPoint - 計算機言語 第7回.ppt

プログラミング実習I

JavaプログラミングⅠ

デジタル表現論・第4回

Microsoft PowerPoint - 09.pptx

デジタル表現論・第6回

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog04.ppt

PowerPoint プレゼンテーション

Prog1_6th

2

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

Java言語 第1回

Prog1_15th

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

JavaプログラミングⅠ

Program Design (プログラム設計)

Prog1_2nd

プログラミングA

Microsoft Word - java a.doc

JavaプログラミングⅠ

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

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

gengo1-11

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft Word - no11.docx

スライド 1

プログラミングA

Microsoft PowerPoint - prog07.ppt

Microsoft Word - CompA-Ex doc

GEC-Java

JavaプログラミングⅠ

PowerPoint プレゼンテーション

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

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

Javaプログラムの実行手順

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

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

Microsoft PowerPoint - CproNt02.ppt [互換モード]

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

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

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

オブジェクト指向プログラミング・同演習 5月21日演習課題

JavaプログラミングⅠ


<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

PowerPoint プレゼンテーション

Prog1_3rd

プログラミング入門1

Microsoft PowerPoint - chap10_OOP.ppt

Sort-of-List-Map(A)

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

情報実習Ⅱ

JavaプログラミングⅠ

8 if switch for while do while 2

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

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

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

gengo1-10

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

5

slide5.pptx

Prog2_9th

マークアップ言語

PowerPoint Presentation

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

問題1 以下に示すプログラムは、次の処理をするプログラムである

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

PowerPoint Presentation

JAVA入門

情報処理Ⅰ

Prog2_10th

Si 知識情報処理

ガイダンス

Transcription:

プログラミング入門 1 第 7 回 メソッド (1)

授業開始前に自己点検 前回までの必須課題はすべてできていますか 前回までの学習項目であいまいな所はありませんか 他人による評価でなく 自身による評価ができるということが自立するということです 自立なしには大学での勉学は成り立ちません Java 1 第 7 回 2

前回のテーマ switch 文 主に break 文とともに 条件分岐のもうひとつのやり方 for 文, while 文における break 文 ループ抜け出しの非常手段 プロジェクトの持ち運び Eclipse の機能から export import Java 1 第 7 回 3

多くの選択肢からひとつを選んで実行するこんな形でよく使う if (n==2) B1 else if (n==3) B2 else if (n==5) B3 else if (n==7) B4 else B5 switch 文を使うと switch(n){ case 2: B1 break; case 3: B2 break; case 5: B3 break; case 7: B4 break; default: B5 Java 1 第 7 回 4

ループ抜け出しの break 文の例 value が素数か判定する int divisor = 0; for (int i = 2; i < value; i++) { if (value % i == 0) { divisor = i; break; if (divisor==0) System.out.println(value + " is prime"); else System.out.println(value + " is divisible by " + divisor); 素朴な素数判定法である break 文は途中でのループ抜け出しに使える Java 1 第 7 回 5

プロジェクトの持ち運び export/import の詳細ついては第 1 回講義資料を参照 ラボ教室の作業環境 個人の作業環境 ( 自宅など ) Eclipse Eclipse import プロジェクトを export プロジェクトを import export java2007.zip zip ファイル E メール添付で java2007.zip zip ファイル Java 1 第 7 回 6

今回のテーマ メソッドとは いくつかの命令の列を束ねて 一つの命令として扱えるようにしたもの 今回学ぶメソッドの役割は その他のプログラミング言語では関数またはサブルーチンと呼ばれることがある メソッドを書く 宣言あるいは定義 メソッドを使う 起動あるいは呼び出し (call) Java 1 第 7 回 7

メソッドの例 public class SayHello { public static void main(string[] args) { sayhello(); sayhello(); sayhello(); public static void sayhello() { System.out.print("Hello!"); System.out.println("This is sayhello."); これを実行すると Hello!This is sayhello. Hello!This is sayhello. Hello!This is sayhello. Java 1 第 7 回 8

メソッドを定義する public class SayHello { public static void main(string[] args) { sayhello(); sayhello(); sayhello(); public static void sayhello() { System.out.print("Hello!"); System.out.println("This is sayhello."); これを実行すると Hello!This is sayhello. Hello!This is sayhello. Hello!This is sayhello. Java 1 第 7 回 9

sayhello メソッドを起動する ( 呼び出す )- 初めて public class SayHello { public static void main(string[] args) { sayhello(); sayhello(); sayhello(); public static void sayhello() { System.out.print("Hello!"); System.out.println("This is sayhello."); これを実行すると Hello!This is sayhello. Hello!This is sayhello. Hello!This is sayhello. Java 1 第 7 回 10

sayhello メソッドを起動する ( 呼び出す )-2 回目 public class SayHello { public static void main(string[] args) { sayhello(); sayhello(); sayhello(); public static void sayhello() { System.out.print("Hello!"); System.out.println("This is sayhello."); これを実行すると Hello!This is sayhello. Hello!This is sayhello. Hello!This is sayhello. Java 1 第 7 回 11

sayhello メソッドを起動する ( 呼び出す )-3 回目 public class SayHello { public static void main(string[] args) { sayhello(); sayhello(); sayhello(); public static void sayhello() { System.out.print("Hello!"); System.out.println("This is sayhello."); これを実行すると Hello!This is sayhello. Hello!This is sayhello. Hello!This is sayhello. Java 1 第 7 回 12

sayhello メソッドを使わないと public static void main(string[] args) { System.out.print("Hello!"); System.out.println("This is sayhello."); System.out.println("Hello!"); System.out.println("This is sayhello."); System.out.println("Hello!"); System.out.println("This is sayhello."); Java 1 第 7 回 13

メソッドを利用することの利点 命令を束ねて使うことができる プログラムを短くできる 一連の命令に名前をつけられる (sayhello) プログラムが見やすくなる 一連の処理を一つにまとめることができる プログラムに間違いがあっても修正しやすい Java 1 第 7 回 14

メソッドを利用するには メソッドの宣言 ( 定義 ) が必要 メソッドの名前 メソッドがどのような命令を束ねているのかの記述 メソッドの起動 ( 呼び出し ) メソッドを 1 つの命令として実行すること メソッドの宣言と起動をしっかり区別すること Java 1 第 7 回 15

メソッドの宣言最も単純な形 public static void < メソッドの名前 > () { < メソッド本体 > ここに命令文を並べる Java 1 第 7 回 16

メソッドの宣言を置く位置 クラスブロックの中 クラスブロックの外にメソッドを宣言してはいけない 各メソッドの外側 メソッドの中に他のメソッドを宣言してはいけない public class SomeClass{... public class SomeClass{ public static void main(sring[] args){... Java 1 第 7 回 17

クラスブロックの外にあるとエラー public class SayHello2 { public static void main(string[] args) { sayhello(); // クラスブロックの外側にあるのでエラー public static void sayhello() { System.out.print("Hello!"); System.out.println("This is sayhello."); Java 1 第 7 回 18

main メソッドの内側にあるのでエラー public class SayHello3 { public static void main(string[] args) { sayhello(); // main メソッドの内側にあるのでエラー public static void sayhello() { System.out.print("Hello!"); System.out.println("This is sayhello."); Java 1 第 7 回 19

メソッドの起動 起動したい位置で < メソッドの名前 >(); public class SayHello { public static void main(string[] args) { sayhello(); sayhello(); sayhello(); public static void sayhello() { System.out.print("Hello!"); System.out.println("This is sayhello."); Java 1 第 7 回 20

以下の質問に答えられますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか Java 1 第 7 回 21

引数 ( ひきすう パラメータ ) のあるメソッド public class LoopSayHello { public static void sayhello(int n) { for (int i = 0; i < n; i++) { System.out.println("Hello!"); public static void main(string[] args) { sayhello(10); Java 1 第 7 回 22

実引数 ( じつひきすう ) は仮引数に代入 ( 値渡し ) されてメソッドが起動される public class LoopSayHello { public static void sayhello(int n) { for (int i = 0; i < n; i++) { System.out.println("Hello!"); public static void main(string[] args) { sayhello(10); Java 1 第 7 回 23

実引数には変数や式を書いてもよい実際には変数や式の値が仮引数に渡される public class FlexLoopSayHello { public static void sayhello(int n) { for (int i = 0; i < n; i++) { System.out.println("Hello!"); public static void main(string[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int count = Integer.parseInt(reader.readLine()); sayhello(count * count); Java 1 第 7 回 24

引数は 2 つ以上でも OK 実引数は順序通りに仮引数に渡される public class Adder { public static void add(double x, double y) { System.out.println(x + y); public static void main(string[] args) { add(10.5, 12.3); add(-2.3, 2.4); 実行結果 22.8 Java 1 第 7 回 25

実引数の個数と仮引数の個数は一致しなければならない public class Adder { public static void add(double x, double y) { System.out.println(x + y); public static void main(string[] args) { add(10.5, 12.3); add(-2.3, 2.4); 実行結果 22.8 0.10000000000000009 余計な桁はなぜでしょう? Java 1 第 7 回 26

引数をもったメソッドの宣言 public static void < メソッドの名前 > (< 仮引数 >) { < メソッド本体 > あるいは, で区切られた複数の仮引数 Java 1 第 7 回 27

以下の質問に答えられますか? メソッドの仮引数 実引数とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか 引数つきのメソッドの宣言はどのようにしますか 引数つきのメソッドの起動はどのようにしますか Java 1 第 7 回 28

変数のスコープ ( 有効範囲 ) for (int i = 0; i < 10; i++) { //... // ERROR: ここで変数 i は使用できない System.out.println(i); // i を for の外で宣言することによって // for の外側でも利用できるようにする int i; for (i = 0; i < 10; i++) { //... // これなら変数 i を使用できる System.out.println(i); Java 1 第 7 回 29

ローカル変数のスコープ これまで使用してきた変数はすべてローカル変数 ローカルでない変数も近い将来勉強する スコープは宣言した場所から その宣言が置かれている最も内側のブロックの末尾まで Java 1 第 7 回 30

パラメータ変数 public class ParameterScope { public static void hoge(int foo) { // foo の有効範囲を開始... // foo の有効範囲を終了 public static void main(string[] args) { // ここでは foo を使用できない (foo は有効範囲外 )... Java 1 第 7 回 31

値渡し (call by value) public class CallByValue { public static void main(string[] args) { int a = 10; int b = 20; swap(a, b); System.out.println("a = " + a); System.out.println("b = " + b); // 二つの変数の中身を交換する ( 値渡しをするので失敗 ) public static void swap(int x, int y) { int temp = x; x = y; y = temp; Java 1 第 7 回 32

swap メソッドのやっていること 変数 x と y の値を入れ替えている // 二つの変数の中身を交換する ( 値渡しをするので失敗 ) public static void swap(int x, int y) { int temp = x; x = y; y = temp; x va x vb x vb y temp vb va y temp vb va y temp va va Java 1 第 7 回 33

実際には swap(10,20) として swap メソッドを起動 public class CallByValue { public static void main(string[] args) { int a = 10; int b = 20; swap(a, b); System.out.println("a = " + a); System.out.println("b = " + b); // 二つの変数の中身を交換する ( 値渡しをするので失敗 ) public static void swap(int x, int y) { int temp = x; x = y; y = temp; Java 1 第 7 回 34

swap メソッドはコピーされた値を自分のローカル変数の間でやり取りするだけ public class CallByValue { public static void main(string[] args) { int a = 10; int b = 20; swap(a, b); System.out.println("a = " + a); System.out.println("b = " + b); // 二つの変数の中身を交換する ( 値渡しをするので失敗 ) public static void swap(int x, int y) { int temp = x; x = y; y = temp; Java 1 第 7 回 35

注意 : ローカル変数のスコープ名前は同じでも無関係な変数なので状況は変わらない public class CallByValue { public static void main(string[] args) { int a = 10; int b = 20; swap(a, b); System.out.println("a = " + a); System.out.println("b = " + b); // 二つの変数の中身を交換する ( 値渡しをするので失敗 ) public static void swap(int a, int b) { int temp = a; a = b; b = temp; 仮引数の名前を a,b にしてみたが Java 1 第 7 回 36

以下の質問に答えられますか? ローカル変数のスコープとは何ですか ローカル変数の宣言とその宣言の置かれているブロックはスコープにどのような影響を与えますか メソッドの仮引数のスコープはどうなっていますか 値渡しとは何ですか Java 1 第 7 回 37

演習に入る前に 自動テストは大変な恩恵を与えてくれるが 自動テストをパスしたら それで満足 というのではあなたは伸びません! 講義資料にのっているテストの詳細を熟読し 自分でテストを設計できるようになって欲しい そのための準備として 課題でプログラムを書いたら 自動テストだけに頼らずに 自分で考えたテストを実行すること Java 1 第 7 回 38

演習に入る前に今週より 骨格テスト の内容が変わる 今までは クラス クラスは存在するか main メソッド main メソッドは存在するか public static void... で宣言されているか throws IOException が必要なら付いているか 今回から追加 main 以外のメソッドについても正当性が検証される 骨格テストのタイミング すべてのメソッドの宣言がなされた後 Java 1 第 7 回 39

演習に入る前にテストは骨格 単体 機能テストの 3 本立てに 今までは 骨格テスト 機能テスト 今回から 骨格テスト 単体テスト 各メソッドを単独で起動したときの動作を確認する 機能テスト Java 1 第 7 回 40

演習に入る前に Print3Method と PrintMult という 2 つのプログラムを各自作成し実行 テストまでを一斉にやる 頃合をみて 2 つのプログラムの詳細な解説をするが 講義資料の解説を見ながらその意味を自分でよく考えること この 2 つのプログラムの意味をきちんと理解できた人だけが課題に進んでよい Java 1 第 7 回 41

一緒にやってみよう 今回の演習で使うテストドライバをいつものようにインストールする ライブラリのアップデートがあるので手順を正確に実行すること テストドライバの導入に成功すると プロジェクト java2007 の中の test というフォルダに j1.lesson07.xml という名前のファイルが作成される このファイルには今週使用するテスト一式が記述されている j1.lesson07 というパッケージを作成する 講義資料にある Print3Method, PrintMult というプログラムを このパッケージに作成する 講義資料にある手順でテスト 実行までやること Java 1 第 7 回 42

Print3Method の解説 public class Print3Method { public static void main(string[] args) { printhello(); printhello(); printhello(); printbye(); public static void printhello() { System.out.println("Hello!"); public static void printbye() { System.out.println("Bye."); Java 1 第 7 回 43

メソッド printhello, printbye を宣言宣言しただけでは実行されない public class Print3Method { public static void main(string[] args) { printhello(); printhello(); printhello(); printbye(); public static void printhello() { System.out.println("Hello!"); public static void printbye() { System.out.println("Bye."); Java 1 第 7 回 44

printhello メソッドを 3 回起動する public class Print3Method { public static void main(string[] args) { printhello(); printhello(); printhello(); printbye(); public static void printhello() { System.out.println("Hello!"); public static void printbye() { System.out.println("Bye."); Java 1 第 7 回 45

printbye メソッドを 1 回起動する public class Print3Method { public static void main(string[] args) { printhello(); printhello(); printhello(); printbye(); public static void printhello() { System.out.println("Hello!"); public static void printbye() { System.out.println("Bye."); Java 1 第 7 回 46

public class PrintMult { public static void main(string[] args) { for (int i = 1; i <= 9; i++) { printmult(10, i); for (int i = 1; i <= 9; i++) { printsquare(i); PrintMult の解説 public static void printmult(int a, int b) { int c = a * b; System.out.println(a + " * " + b + " = " + c); public static void printsquare(int a) { printmult(a, a); Java 1 第 7 回 47

メソッド間の呼び出し関係 main printsquare printmult Java 1 第 7 回 48

printmult メソッドを 9 回起動 public class PrintMult { public static void main(string[] args) { for (int i = 1; i <= 9; i++) { printmult(10, i); 起動 for (int i = 1; i <= 9; i++) { printsquare(i); 実引数から仮引数への受け渡し public static void printmult(int a, int b) { int c = a * b; System.out.println(a + " * " + b + " = " + c); public static void printsquare(int a) { printmult(a, a); Java 1 第 7 回 49

printsquare メソッドを 9 回起動 public class PrintMult { public static void main(string[] args) { for (int i = 1; i <= 9; i++) { printmult(10, i); for (int i = 1; i <= 9; i++) { printsquare(i); 起動 public static void printmult(int a, int b) { int c = a * b; System.out.println(a + " * " + b + " = " + c); public static void printsquare(int a) { printmult(a, a); 実引数から仮引数への受け渡し Java 1 第 7 回 50

printsquare から printmult を起動 public class PrintMult { public static void main(string[] args) { for (int i = 1; i <= 9; i++) { printmult(10, i); for (int i = 1; i <= 9; i++) { printsquare(i); public static void printmult(int a, int b) { int c = a * b; System.out.println(a + " * " + b + " = " + c); 実引数から仮引数への受け渡し public static void printsquare(int a) { printmult(a, a); 起動 Java 1 第 7 回 51

課題 各自のペースで 第 07 週目の課題 をやってみよう Java 1 第 7 回 52

課題 0701 のヒント main 入力のための準備 a,b,c を入力する heron を a,b,c を実引数として起動する heron 引数を 3 つとる面積を計算して結果をプリントする Java 1 第 7 回 53

課題 0702 のヒント main 入力のための準備入力する ( 入力の適切性をみる ) 入力が適切なら入力された整数を実引数として printdivisors を起動する printdivisors(n) // n の約数を小さい順にプリントする 1 をプリント for(i を 2 から n まで走らせる ) n を i で割って割り切れたらスペースと i をプリント改行する Java 1 第 7 回 54