Upload
cain-allen
View
23
Download
2
Embed Size (px)
DESCRIPTION
第3回 手続き指向のプログラム. ~同じ仕事は2度書かない~. 学習目標. 手続き指向のプログラムを書ける メソッドを使う利点を説明できる Java でのメソッドの使い方を説明できる 引数と返り値の説明ができる メソッドを使って手続き指向のプログラムが書ける. 3.1 同じ意味の 仕事はカタマリに. 3.1.1 同じ仕事が何度も ①前回のプログラムの問題点 ②同じ意味の仕事は2度書かない. 3.1.1 同じ仕事が何度も. ①前回のプログラムの問題点. 例題3-1 ( Example3_1.java). //商品種類を追加する - PowerPoint PPT Presentation
Citation preview
3.1.1 同じ仕事が何度も ① 前回のプログラムの問題点
//商品種類を追加する int addId = 1001;//コーラを追加する for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } } addId = 1002;//ソーダを追加する for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } }
例題 3-1(Example3_1.java
)
問題点 同じ仕事を2度書いてしまっている
追加、削除を100回やるために、100回ほとんど同じことを書かなくてはいけない。
100回書いたはいいが、アルゴリズムを変えるときはどうするのか?
人間の仕事ではない
② 同じ仕事は2度書かない プログラム中で同じ意味の仕事は2度
書いてはいけない 変更が容易にできるプログラムのために 他人が読めるプログラムのために バグの少ないプログラムのために
コピーペーストをしてからちょっとだけ変更
3.2 メソッド 3.2.1 メソッドとは 3.2.2 メソッドを使ったプログラム
① メソッドを定義する ② メソッドを呼び出す ③ 引数を渡す Java の文法-変数のスコープ- ④ 返り値のあるメソッド
3.2.1 メソッドとは? メソッドは、何度も同じ仕事を書かなくてすむよう
に、仕事をまとめて書くことができる仕組みです。 仕事ごとにプログラムを分けると、人間にわかりや
すいプログラムになります。 一つのプログラムは、たくさんのメソッドから成
り立ちます。 main() もメソッドの一つです。
プログラム
メソッドmain メソッド
add メソッド
追加して!
メソッドを使う //商品種類を追加する int addId = 1001;//コーラを追加する for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } } addId = 1002;//ソーダを追加する for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } }
同じ仕事だから // 「追加する」メソッド public static void add(int[] targetArray,int addId){ for(int i=0;i<10;i++){//商品種類が… if(itemTypeArray[i] == -1){//入っていない itemTypeArray[i] = addId;//書き込む break; } } }
同じ仕事を一つにした「追加する」メソッドを作ります
例題 3-2(Example3_2.java
)
例題 3-1(Example3_1.java
)
3.2.2①メソッドを定義する
public static void add(int[] targetArray,int addId){ // 商品種類が入っていない箱を探す for(int i=0;i<10;i++){ if(targetArray[i] == -1){//入っていない targetArray[i] = addId;//書き込む break; } }}
メソッドの名前
引数
仕事
メソッドを置く位置 Javaでは、クラスの中にメソッドを書きます。
(メソッドの中にはメソッドは書けません。 )
public class Example3_1{ public static void main(String args[]){ … }
public static void add(int[] targetArray,int addId){ … }}
メソッドには必ずコメントをつける
メソッドには、必ずどのような目的を持った仕事をするのか、コメントで書いておきます。public class Example3_1{
/** * プログラム・メイン */ public static void main(String args[]){ … }
/** * 商品種類を追加する */ public static void add(int[] targetArray,int addId){ … }}
例題 3-1(Example3_1.java
)
② メソッドを呼び出す
add メソッド
メソッドは作っただけでは意味がない 実行して、自動的に呼ばれるのは、 main メソッド
だけ
プログラム
main メソッドmain メソッドmain メソッド
メソッドを呼び出す メソッドは、メソッドから呼び出され
て仕事をします。 仕事が終わると、呼び出し側が仕事の続き
をします。
追加して!
add メソッド
プログラム
main メソッドmain メソッドmain メソッド add メソッドmain メソッド add メソッドmain メソッド
メソッドを呼び出す方法
public class Example3_2{ /** * メインメソッド */ public static void main(String args[]){ … //追加する (メソッドを呼び出す ) add(itemTypeArray,1001); }
/** * 追加するメソッド */ public static void add(int[] targetArray,int addId){ … }}
メソッドの名前と引数を渡してメソッドを呼び出します。
例題 3-2(Example3_2.java
)
メソッドの呼び出し練習問題
次のプログラムの出力はどうなります?
public class Practice3_1 {
public static void main(String args[]){ System.out.println("A"); method1(); System.out.println("B"); method2(); System.out.println("C"); }
public static void method1(){ System.out.println("D"); method2(); System.out.println("E"); }
public static void method2(){ System.out.println("F"); }
public static void method3(){ System.out.println("G"); }}
テキスト練習問題 3-1
③ 引数を渡す 仕事をするときに、材料が必要な場合
があります 「追加する」という仕事をするためには、
どんな材料が必要ですか?
add メソッド
addId1001
追加する商品種類
[5][4][3][2][1][0]-1 -1 -1 -1 -1 -1
追加する配列
引数 メソッドを作るときは、仕事をするた
めに必要な材料を明らかにします。それを引数(ひきすう)といいます。
add メソッド
addId1001
追加する商品種類
[5][4][3][2][1][0]-1 -1 -1 -1 -1 -1
追加する配列
仕事の材料=引数
仮引数として受け取るためには
public static void add(int[] targetArray,int addId){ …} 仮引数を宣言する
メソッドを作るときに仮引数を宣言します。 通常の変数の宣言と同じ形にします。 複数ある場合は「 , 」で区切ります。
実引数として受け渡すには
メソッドを呼び出すときに、実引数を渡します。 宣言ではありません。実際の値を渡します。 仮引数に代入する感じで。
public static void main(String args[]){ int[] itemTypeArray = new int[10]; … add(itemTypeArray,1001); }
実引数を渡す
実引数と仮引数の結合
add(itemTypeArray,1001);
public static void add(int[] targetArray,int addId)
呼び出し側
呼び出され側
メソッドが呼ばれると、実引数が仮引数に自動的に代入されるので、材料が渡せます。
int[] targetArray = itemTypeArrayint addId = 1001
実引数と仮引数の結合
Java の文法-変数のスコープー メソッド内で宣言した変数はメソッド
内でのみ有効public class A{
public static void main(String args[]){int i;
i = 3;//これは OK } public static void methodA(int x){
i = 3;//コンパイルエラー }}
i の有効範囲
変数のスコープ(2) メソッドの仮引数の有効範囲もそのメ
ソッド内のみpublic class A{
public static void main(String args[]){x = 3;//コンパイルエラー
} public static void methodA(int x){
x = 3;//OK}
}
仮引数 target の有効範囲
変数のスコープ(3) 実は、クラス内で有効な変数も作るこ
とができます。来週やります。(今日は使いません)
public class A{ static int i;
public static void main(String args[]){i = 3;
}}
なぜ引数が必要なのか (1) スコープで説明したように、 add メ
ソッドは main メソッドでのみ有効な「 itemTypeArray 」を知ることができません。public class Example{
public static void main(String args[]){int[] itemTypeArray = new int[10];System.out.println(itemTypeArray[3]);//OK
} public static void add(){
System.out.println(itemTypeArray[3]);//コンパイルエラー}
}
public class Example{
public static void main(String args[]){ int[] itemTypeArray = new int[10]; System.out.println(itemTypeArray[3]);
} public static void add(int[] targetArray){
System.out.println(targetArray[3]); //OK}
}
なぜ引数が必要なのか (2) add メソッドが itemTypeArray を知
るためには、教えてもらう必要があります。そこで仮引数を利用するのです。
public class Example{
public static void main(String args[]){int[] itemTypeArray = new int[10];add(itemTypeArray);
} public static void add(int[] targetArray){
System.out.println(targetArray[3]);}
}
なぜ引数が必要なのか (3) main メソッドは実引数として値itemTypeArray を与えます。
public class Example{
public static void main(String args[]){int[] itemTypeArray = new itemTypeArray[10];add(itemTypeArray);
} public static void add(int[] targetArray){
System.out.println(targetArray[3]);}
}
なぜ引数が必要なのか (4) 与えられた実引数 itemTypeArray が
仮引数 targetArray に代入され、 addメソッドで追加するために使えるようになります。
代入される
Java で返り値のあるメソッドを書く
まず、返り値をどの型で返すのかを決めます 今回の場合、「あった、なかった」なので、
真偽値型の boolean を使うことにしましょう
true = あったfalse = なかった
返り値の型を宣言する メソッド宣言の返り値を boolean にし
ます public static boolean search(int[] targetArray,int searchId){ … }
追加メソッドの時は、「 void 」でした。void とは、「返り値がない」という意味なのでした
適切な値を返す
public static boolean search(int[] targetArray,int searchId){ //一つ一つ商品種類を探す for(int i=0;i<10;i++){ if(targetArray[i] == searchId){//見つかった return true; } }
//見つからなかった return false; }
return [ 値 ] で返り値を返します
例題 3-2(Example3_2.java
)
このプログラム間違ってない?
public static boolean search(int[] targetArray,int searchId){ //一つ一つ商品種類を探す for(int i=0;i<10;i++){ if(targetArray[i] == searchId){//見つかった return true; } }
//見つからなかった return false; }
見つかって、 true を返した後、for 文を抜けたら、 false も返してしまわないですか?
例題 3-2(Example3_2.java
)