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

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

スライド 1

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

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

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

Prog1_6th

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

デジタル表現論・第4回

プログラミング入門1

メソッドのまとめ

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

プログラミング実習I

プログラミング入門1

PowerPoint プレゼンテーション

Prog1_2nd

Microsoft Word - no11.docx

プログラミング入門1

デジタル表現論・第6回

Microsoft PowerPoint - prog04.ppt

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

Microsoft PowerPoint - prog03.ppt

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

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

Java講座

PowerPoint Presentation

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

Microsoft PowerPoint - 09.pptx

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

Javaプログラムの実行手順

gengo1-10

PowerPoint プレゼンテーション

ガイダンス

JavaプログラミングⅠ

PowerPoint プレゼンテーション

Javaによるアルゴリズムとデータ構造

PowerPoint Presentation

メソッドのまとめ

gengo1-11

PowerPoint プレゼンテーション

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

基礎プログラミング2015

Java言語 第1回

Prog1_3rd

プログラミング入門1

JavaプログラミングⅠ

GEC-Java

プログラミングA

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

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

プログラミング入門1

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

Microsoft PowerPoint - prog09.ppt

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

Microsoft PowerPoint - prog09.ppt

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

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

PowerPoint プレゼンテーション

プログラミング入門1

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

講習No.12

Prog1_10th

Program Design (プログラム設計)

情報処理Ⅰ演習

Microsoft Word - java a.doc

JavaプログラミングⅠ

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

2

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

Microsoft PowerPoint - chap10_OOP.ppt

情報処理Ⅰ

Microsoft PowerPoint - prog07.ppt

ゲームエンジンの構成要素

Prog1_15th

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

JavaプログラミングⅠ

JavaプログラミングⅠ

Microsoft PowerPoint L07-Imperative Programming Languages-4-students ( )

JavaプログラミングⅠ

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

情報実習Ⅱ

Microsoft PowerPoint pptx[読み取り専用]

Prog2_9th

情報技術 Java の特徴 Java は現在 事務処理計算用プログラミング言語として開発された COBOL に取って代わり C 言語や C++ と並んで 現在最も使われているプログラミング言語の一つである Java は Write Once, Run Anywhere( プログラムを一度作成したらど

関数の中で宣言された変数の有効範囲はその関数の中だけです さっきの rectangle _s で宣言されている変数 s は他の関数では使用できません ( 別の関数で同じ名前の変数を宣言することはできますが 全く別の変数として扱われます このように ある関数の中で宣言されている変数のことをその関数の

JavaプログラミングⅠ

Microsoft PowerPoint - ruby_instruction.ppt

GEC-Java

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

メディプロ1 Javaプログラミング補足資料.ppt

新・明解Javaで学ぶアルゴリズムとデータ構造

Javaの作成の前に

プログラミング入門1

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

GEC-Java

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

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

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

明解Javaによるアルゴリズムとデータ構造

PowerPoint プレゼンテーション

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

Transcription:

メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが 特定のクラスに属しているという特徴がある メソッドは自分で定義して利用することもできる プログラムで繰り返し利用される処理をメソッドとして作成してしまえば それ以降のプログラムや他のプログラムでそのまま あるいは一部を修正して利用することが出来るので 再利用性の高いプログラムを作成することができる また 処理単位でメソッドを作成するため プログラムの可読性 ( 読みやすさ ) が高まる これらのメリットはプログラムの保守性 ( 管理のしやすさ ) に関わるため 大事な要因である 今回はメソッドの作り方 ( 宣言 ) と使い方 ( 呼び出し ) について説明していく 簡単なメソッドを用いたプログラム以下のプログラムはメソッドを用いて2つの整数の和を求め 結果を出力するプログラムである プログラム例 1 public class Prog08_01 static int add(int a, int b) // メソッドの宣言 int c; c = a + b; return c; int a = 3, b = 4, c; c = add(a, b); // メソッドの呼び出し System.out.println("a + b = " + c); 実行結果 a + b = 7 このプログラムの場合にどのような順番で実行されるかを下図に示す public class Prog08_01 (2) xにa yにbの値がコピーされる static int add(int x, int y) (3) int z; z = x + y; return z; (4) cにzの値がコピーされる (1) int a = 3, b = 4, c; c = add(a, b); System.out.println("a + b = " + c); (5) 図 1 プログラムの流れ - 1 -

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッドの x と y にそれぞれコピーされる (3)add( ) メソッドが順番に実行される (4)main( ) メソッドに処理が戻る その際 add( ) メソッドの z の値が main( ) メソッドの変数 c に代入される (5)main( ) メソッドの残りの処理が実行される add(a, b) や int add(int x, int y) ので用いられている a b x y はメソッドに与えるパラメータであり これらを 引数 という 特に main( ) メソッドで add( ) メソッドの呼び出しに使っている add(a, b) の a と b は実際に処理に使っている値であることから 実引数 といい それに対して add( ) メソッドの定義に用いている int x と int y は 仮引数 という また add( ) メソッド終了時に return z; と書いているが これは main( ) メソッドに z の値を戻している処理である このことから z を 返却値 という メソッドの宣言メソッドの宣言は以下の書式に従う 書式 static 返却型メソッド名 ( 仮引数の型引数名,, 仮引数の型引数名 ) メソッド本体 使用例 ( プログラム例 1 の抜粋 ) メソッド名返却型仮引数の並び メソッド頭部 static int add ( int x, int y ) メソッド本体 int z; z = x + y; return z; メソッド名や引数名は自由に付けられる 返却型や引数の型 個数は必要に応じて変更する必要がある メソッドは一般的に引数によって値を受け取り return で返却値を返す しかし引数や返却値が必要無いメソッドも存在する この場合 以下の例のように 引数が無い ならば仮引数の並びは空白とし 返却値が無い 場合には返却型に void 型 を使う 例えば 返却値が無く 引数が int 型で二つ必要な場合には以下のようになる static void func(int s, int t) もう一つ例を示すと 返却値が int 型であり 引数が無い場合には以下のようになる static int func() - 2 -

次に return 文について説明を加えていく return 文はメソッドにおいて 値を返す必要がある時 以下の書式で用いる 書式 return 値 ; または return 式 ; 値を返す必要のないときには return; と記述できるが メソッドの最後でリターンする場合は省略するのが通常である 使用例 処理 return; 省略する ただし この書き方はメソッドの途中で呼び出し元に処理を戻す場合には便利である 使用例 処理 if( 条件式 ) return; 処理 また メソッド内で return 文を複数書くことも可能である 例えば引数で渡された変数の値の正負を判定し 絶対値を返却値として返すプログラムの場合 以下のようなプログラムが考えられる プログラム例 2 public class Prog08_02 static double abs(double x) if(x >= 0) return x; else return -x; double a = -3.0; System.out.println(a + " の絶対値は " + abs(a) + " です "); 出力例 -3.0 の絶対値は 3.0 です 使用例いくつかのプログラムを示す プログラム中の下線部の処理について メソッドを用いたプログ - 3 -

ラムに変更する例を示していく プログラム例 3 public class Prog08_03 System.out.println(" メソッドの練習 "); 変更後 public class Prog08_03 System.out.println(" メソッドの練習 "); func(); このプログラムの場合には出力処理をメソッドで記述する 引数と返却値は必要ないため メソッドの頭部は となる プログラム例 4 public class Prog08_04 int n = 10; System.out.println(n); 変更後 public class Prog08_04 static void func(int s) System.out.println(s); int n = 10; func(n); - 4 -

このプログラムの場合も出力処理をメソッドで記述する 変数 n を出力に使っているため この値は引数を用いてメソッドに渡す必要がある 返却値は必要ないため メソッドの頭部は static void func(int s) のようになる プログラム例 5 public class Prog08_05 int a = 5, b = 1, c; c = a * b; System.out.println(c); 変更後 public class Prog08_05 static int func(int x, int y) int z; z = x * y; return z; int a = 5, b = 1, c; c = func(a, b); System.out.println(c); このプログラムの場合では 2 つの変数を用いて 乗算を行いその結果を出力する 出力には変数を用いているので その処理で得られる値が必要となる この場合メソッドの引数は整数型で 2 つ 返却値として整数型が必要となる よって メソッドの頭部は static int func(int x, int y) のようになる もう少し具体的な使用例を示す 次のプログラムは 2 倍角の公式 sin 2 2sin cos において 角度を 0~360 度まで 5 度ずつ変化させて両辺の計算結果を表示させている Math.sin() Math.cos() Math.toRadians () のメソッドはそれぞれ sin の計算 cos の計算 度からラジアンに変換を行う Math クラスは String クラスと同様に import 宣言を行わなくても自動的に import される プログラム例 6 public class Prog08_06 static double function1(double x) double y; y = Math.sin(2.0 * x); return y; - 5 -

static double function2(double x) double y; y = 2.0 * Math.sin(x) * Math.cos(x); return y; int i; double theta, y1, y2; for(i = 0; i <= 360; i += 5) theta = Math.toRadians(i); // 角度をラジアンに変換 y1 = function1(theta); y2 = function2(theta); System.out.println(i + "\t" + y1 + "\t" + y2); 数学関数を利用する場合 Math.sin() のようにMath. と付けて書く必要がある この場合プログラムが煩雑になるという問題がある それを避けるためJavaには静的インポート宣言というものがあり プログラムの最初の部分に import static java.lang.math.*; としてインポートを行うとsin() やcos() のように簡潔に書くことができる このようなimport 宣言についての詳しい情報は教科書のp.363 第 11 章パッケージ に 静的インポート宣言についてはp.370に紹介されている 授業では取りあげないが 各自での確認を勧める 有効範囲ここまでに変数はメソッドの中で宣言して利用してきたが メソッドの外で宣言することもできる 以下のプログラムはメソッドの中と外で同じ変数名 x で宣言を行っている これらはその識別子 ( 名前 ) の通用する範囲である 有効範囲 ( スコープ ) が異なる プログラム例 7 import java.util.scanner; public class Prog08_07 static int x = 700; クラス有効範囲 static void printx() System.out.println("x = " + x); System.out.println("x = " + x); // 4 // 1 int x = 800; メソッド有効範囲 System.out.println("x = " + x); // 2 System.out.println("Prog08_07.x = " + Prog08_07.x); // 3 printx(); - 6 -

出力結果 x = 700 x = 800 Prog08_07.x = 700 x = 700 このプログラムはコメントの 1~4 の順番にプログラムが実行される 動作の説明を以下に述べる 1 この時点では main メソッド内に x は宣言されていない そのため メソッドの外で宣言された static int x = 700; によっての 700 が出力される 2 この時点では main メソッド内において int x = 800; と初期化されている よって 800 が出力される クラス有効範囲とブロック有効範囲に同一の変数 x が存在する場合 局所変数である int x = 800; が優先される 3 クラス有効範囲で宣言した static int x = 700; の値を表示する場合にはクラス名の Prog08_07 を付けて Prog08_07.x として利用する 4 printx メソッドで出力を行う メソッド間で値を受け渡す場合には引数を用いる必要があるが このメソッドでは引数が無い そのため printx 内で有効となる変数 x はクラス有効範囲 static int x = 700; の値である 演習プログラム例 1~7 を作成して 出力を確認しなさい 課題 5 2 2 課題 5-1 プログラム例 6を参考として もう 1つの 2 倍角の公式 cos 2 cos sin を確認するプログラムを作成しなさい 課題 5-2 3つ整数値の最小値を求めて返却するメソッドを持つクラスを作成し 実行結果を表示するプログラムを作成しなさい ( 教科書の演習 7-2) 課題 5-3 1 から n までの全整数の和を求めて返却するメソッドを持つクラスを作成し 実行結果を表示するプログラムを作成しなさい ( 教科書の演習 7-4) 課題 5-4 a 以上 b 未満の乱数を生成して その値を返却するメソッドを持つクラスを作成し 実行結果を表示するプログラムを作成しなさい ( 教科書の演習 7-8 改 ) メソッド内部では乱数を生成する標準ライブラリを呼び出すこと b の値が a より小さい場合には a と b の値を交換する処理をメソッド内で行うこと 課題 5 には続きがある 提出締め切りは後で示す - 7 -