method slide stech - Haikara Cityhaikara-city.com/wp-content/uploads/2020/09/method_slide... ·...

Post on 09-Oct-2020

0 views 0 download

Transcript of method slide stech - Haikara Cityhaikara-city.com/wp-content/uploads/2020/09/method_slide... ·...

小テストウォーミングアップ

メソッド長過ぎるソースコード対策その1

メソッドpublic class Main{public static void main(String[] args){文1文2文3文4文5文6文7文8文9}}

メソッドpublic class Main{public static void main(String[] args){文1文2文3文4文5文6文7文8文9}}

ユーザの入力処理

計算処理

表示処理

メソッド

例5-1 [プロジェクト名] ex5-1

public class Main{public static void main(String[] args){System.out.println(“メソッド呼び出します”);hello();System.out.println(“メソッド呼び出しました”);}

public static void hello(){System.out.println(“こんにちは”);}}

例5-1 [プロジェクト名] ex5-1

public class Main{public static void main(String[] args){System.out.println(“メソッド呼び出します”);hello();System.out.println(“メソッド呼び出しました”);}

public static void hello(){System.out.println(“こんにちは”);}}

例5-1 [プロジェクト名] ex5-1

public class Main{public static void main(String[] args){System.out.println(“メソッド呼び出します”);hello();System.out.println(“メソッド呼び出しました”);}

public static void hello(){System.out.println(“こんにちは”);}}

イメージ図

mainメソッド helloメソッド

Mainクラス

「メソッド呼び出します」と表示。helloメソッド呼び出す。「メソッド呼び出しました」と表示。

「こんにちは」と表示。

イメージ図

mainメソッド helloメソッド

Mainクラス

「メソッド呼び出します」と表示。helloメソッド呼び出す。「メソッド呼び出しました」と表示。

「こんにちは」と表示。①

イメージ図

mainメソッド helloメソッド

Mainクラス

「メソッド呼び出します」と表示。helloメソッド呼び出す。「メソッド呼び出しました」と表示。

「こんにちは」と表示。①②

イメージ図

mainメソッド helloメソッド

Mainクラス

「メソッド呼び出します」と表示。helloメソッド呼び出す。「メソッド呼び出しました」と表示。

「こんにちは」と表示。①②

イメージ図

mainメソッド helloメソッド

Mainクラス

「メソッド呼び出します」と表示。helloメソッド呼び出す。「メソッド呼び出しました」と表示。

「こんにちは」と表示。①② ③

イメージ図

mainメソッド helloメソッド

Mainクラス

「メソッド呼び出します」と表示。helloメソッド呼び出す。「メソッド呼び出しました」と表示。

「こんにちは」と表示。①② ③④

例5-2 [プロジェクト名] ex5-2

public class Main{public static void main(String[] args){methodA();

}

public static void methodA(){System.out.println(“methodAなう。”);methodB();

}

public static void methodB(){System.out.println(“methodBなう。”);

}}

mainメソッド

methodAメソッド

methodBメソッド

例5-2 [プロジェクト名] ex5-2

public class Main{public static void main(String[] args){methodA();

}

public static void methodA(){System.out.println(“methodAなう。”);methodB();

}

public static void methodB(){System.out.println(“methodBなう。”);

}}

mainメソッド

methodAメソッド

methodBメソッド

例5-2 [プロジェクト名] ex5-2

public class Main{public static void main(String[] args){methodA();

}

public static void methodA(){System.out.println(“methodAなう。”);methodB();

}

public static void methodB(){System.out.println(“methodBなう。”);

}}

mainメソッド

methodAメソッド

methodBメソッド

例5-2 [プロジェクト名] ex5-2

public class Main{public static void main(String[] args){methodA();

}

public static void methodA(){System.out.println(“methodAなう。”);methodB();

}

public static void methodB(){System.out.println(“methodBなう。”);

}}

mainメソッド

methodAメソッド

methodBメソッド

イメージ図

mainメソッド methodA

Mainクラス

methodB

「methodAなう。」methodBを呼び出し。

methodAを呼び出し。 「methodBなう。」

イメージ図

mainメソッド methodA

Mainクラス

methodB

「methodAなう。」methodBを呼び出し。

methodAを呼び出し。 「methodBなう。」

イメージ図

mainメソッド methodA

Mainクラス

methodB

「methodAなう。」methodBを呼び出し。

methodAを呼び出し。 「methodBなう。」

mainメソッド外での呼び出し

引数

「決まった処理だけ」のメソッドに意味はない。

例5-3 [プロジェクト名] ex5-3

public class Main{public static void main(String[] args){hello(“あけまつしんじ”);

}

public static void hello(String name){System.out.println(“こんにちは” + name + “さん”);}}

例5-3 [プロジェクト名] ex5-3

public class Main{public static void main(String[] args){hello(“あけまつしんじ”);

}

public static void hello(String name){System.out.println(“こんにちは” + name + “さん”);}}

例5-3 [プロジェクト名] ex5-3

public class Main{public static void main(String[] args){hello(“あけまつしんじ”);

}

public static void hello(String name){System.out.println(“こんにちは” + name + “さん”);}}

イメージ図

mainメソッド helloメソッド

Mainクラス

helloメソッドに「あけまつしんじ」という引数を与えて呼び出す。

イメージ図

mainメソッド helloメソッド

Mainクラス

helloメソッドに「あけまつしんじ」という引数を与えて呼び出す。

イメージ図

mainメソッド helloメソッド

Mainクラス

helloメソッドに「あけまつしんじ」という引数を与えて呼び出す。

イメージ図

mainメソッド helloメソッド

Mainクラス

helloメソッドに「あけまつしんじ」という引数を与えて呼び出す。

「あけまつしんじ」がString型引数nameに入る。

イメージ図

mainメソッド helloメソッド

Mainクラス

helloメソッドに「あけまつしんじ」という引数を与えて呼び出す。

③ 「こんにちは name さん」と表示する。

「あけまつしんじ」がString型引数nameに入る。

イメージ図

mainメソッド helloメソッド

Mainクラス

helloメソッドに「あけまつしんじ」という引数を与えて呼び出す。

③ 「こんにちは name さん」と表示する。

「あけまつしんじ」がString型引数nameに入る。

イメージ図

mainメソッド helloメソッド

Mainクラス

helloメソッドに「あけまつしんじ」という引数を与えて呼び出す。

③ 「こんにちは name さん」と表示する。

仮引数

「あけまつしんじ」がString型引数nameに入る。

例5-4 [プロジェクト名] ex5-4

public class Main{public static void main(String[] args){add_print(2,3);}

public static void add_print(int a, int b){System.out.println(a+b);}}

例5-4 [プロジェクト名] ex5-4

public class Main{public static void main(String[] args){add_print(2,3);}

public static void add_print(int a, int b){System.out.println(a+b);}}

例5-4 [プロジェクト名] ex5-4

public class Main{public static void main(String[] args){add_print(2,3);}

public static void add_print(int a, int b){System.out.println(a+b);}}

イメージ図

mainメソッド add_printメソッド

Mainクラス

add_printメソッドに2という引数と3という引数を与えて呼び出す。

イメージ図

mainメソッド add_printメソッド

Mainクラス

add_printメソッドに2という引数と3という引数を与えて呼び出す。

イメージ図

mainメソッド add_printメソッド

Mainクラス

add_printメソッドに2という引数と3という引数を与えて呼び出す。

イメージ図

mainメソッド add_printメソッド

Mainクラス

add_printメソッドに2という引数と3という引数を与えて呼び出す。

2がint型変数 a,3がint型変数 b に入る。

イメージ図

mainメソッド add_printメソッド

Mainクラス

add_printメソッドに2という引数と3という引数を与えて呼び出す。

2がint型変数 a,3がint型変数 b に入る。

③ a+bの値を表示する。

イメージ図

mainメソッド add_printメソッド

Mainクラス

add_printメソッドに2という引数と3という引数を与えて呼び出す。

2がint型変数 a,3がint型変数 b に入る。

③ a+bの値を表示する。

イメージ図

mainメソッド add_printメソッド

Mainクラス

add_printメソッドに2という引数と3という引数を与えて呼び出す。

2がint型変数 a,3がint型変数 b に入る。

③ a+bの値を表示する。

仮引数

引数

こちらの要求に あわせた処理 を実現。

引数の渡し方メソッド名()

メソッド名(型名 仮引数名)

メソッド名(型名 仮引数名, 型名 仮引数

名…)

練習5-1 実引数、仮引数はどれ??public class Main{public static void main(String[] args){goodMorning_ntimes(5, “あけまつ”);

}

public static void goodMorning_ntimes(int n, String name){for(int i=0; i<n; i++){

System.out.println(“おはようございます” + name + “さん”);}

}}

練習5-2

「3乗メソッド」 cube(int n)

を作りなさい。

(計算結果はcube内の処理で画面に表示)

[プロジェクト名] pra5-2

練習5-2 [プロジェクト名] pra5-2

public class Main{public static void main(String[] args){cube(3);}

public static void cube(int n){System.out.println(n+“の3乗は”+(n*n*n));}}

戻り値値を「戻してもら

う」

例5-3 [プロジェクト名] ex5-3

public class Main{public static void main(String[] args){int a;

a=cube(10);System.out.println(a);}

public static int cube(int n){return n*n*n;}}

例5-3 [プロジェクト名] ex5-3

public class Main{public static void main(String[] args){int a;

a=cube(10);System.out.println(a);}

public static int cube(int n){return n*n*n;}}

例5-3 [プロジェクト名] ex5-3

public class Main{public static void main(String[] args){int a;

a=cube(10);System.out.println(a);}

public static int cube(int n){return n*n*n;}}

イメージ図

mainメソッド cubeメソッド

Mainクラス

cubeメソッドに10という引数を与えて呼び出す。

その戻り値をaに入れる。

イメージ図

mainメソッド cubeメソッド

Mainクラス

cubeメソッドに10という引数を与えて呼び出す。

その戻り値をaに入れる。

イメージ図

mainメソッド cubeメソッド

Mainクラス

cubeメソッドに10という引数を与えて呼び出す。

10がint型変数nに入る。

その戻り値をaに入れる。

イメージ図

mainメソッド cubeメソッド

Mainクラス

cubeメソッドに10という引数を与えて呼び出す。

10がint型変数nに入る。

n*n*nを戻す。その戻り値をaに入れる。

イメージ図

mainメソッド cubeメソッド

Mainクラス

cubeメソッドに10という引数を与えて呼び出す。

10がint型変数nに入る。

n*n*nを戻す。その戻り値をaに入れる。

メソッドの宣言

public static 戻り値の型 メソッド名 (引数リスト){ (ごにょごにょ) return 戻り値; }

練習5-3 [プロジェクト名] pra5-3

2つのdouble型引数をとり、

その和を戻り値として返すメソッド

「add_double(double x, double y)」

を作り、動作を確かめてみよう。

練習5-3 [プロジェクト名] pra5-3

public class Main{public static void main(String[] args){double result;

result=add_double(3.14, 2.18);

System.out.println(“3.14+2.18=” + result);}

public static double add_double(double x, double y){return x+y;

}}

ここから先

ちょっと難しい話。 → 自信が無い人は 見なかったことに…。

配列を渡す

引数として 配列変数も使える。

例5-4 [プロジェクト名] ex5-4

public class Main{public static void main(String[] args){int num[] = {1,2,3,4,5};array_print(num);}

public static void array_print(int[] num){for(int n:num){System.out.println(n);}}}

例5-4 [プロジェクト名] ex5-4

public class Main{public static void main(String[] args){int num[] = {1,2,3,4,5};array_print(num);}

public static void array_print(int[] num){for(int n:num){System.out.println(n);}}}

例5-4 [プロジェクト名] ex5-4

public class Main{public static void main(String[] args){int num[] = {1,2,3,4,5};array_print(num);}

public static void array_print(int[] num){for(int n:num){System.out.println(n);}}}

不思議なことが…public class Main{public static void main(String[] args){int n=0;methodA(n);System.out.println(n);}

public static void methodA(int n){n=10;}}

例5-5 [プロジェクト名] ex5-5

イメージ図

mainメソッド methodAメソッド

Mainクラス

n=0 と初期化して宣言。nをmethodAに渡す。

nを表示。

イメージ図

mainメソッド methodAメソッド

Mainクラス

n=0 と初期化して宣言。nをmethodAに渡す。

nを表示。

イメージ図

mainメソッド methodAメソッド

Mainクラス

n=0 と初期化して宣言。nをmethodAに渡す。

0がint型変数nに入る。

nを表示。

イメージ図

mainメソッド methodAメソッド

Mainクラス

n=0 と初期化して宣言。nをmethodAに渡す。

0がint型変数nに入る。

n=10;

nを表示。

値渡し渡されているのは 値のコピー。 →methodAのn=10では  mainメソッド内の nは書き換えられてない。

値渡し

値渡しcall by value

「値」を渡す

不思議なことが…public class Main{public static void main(String[] args){int n=0;methodA(n);System.out.println(n);

}

public static void methodA(int n){n=10;

}}

値渡し

イメージ図

mainメソッド methodAメソッド

Mainクラス

n=0 と初期化して宣言。nをmethodAに渡す。

nを表示。

値渡し

イメージ図

mainメソッド methodAメソッド

Mainクラス

n=0 と初期化して宣言。nをmethodAに渡す。

nを表示。

値渡し

イメージ図

mainメソッド methodAメソッド

Mainクラス

n=0 と初期化して宣言。nをmethodAに渡す。

0がint型変数nに入る。

nを表示。

値渡し

イメージ図

mainメソッド methodAメソッド

Mainクラス

n=0 と初期化して宣言。nをmethodAに渡す。

0がint型変数nに入る。

n=10;

nを表示。

値渡し

不思議なことが…public class Main{public static void main(String[] args){int[] num={1,2,3,4,5};methodA(num);System.out.println(num[0]);

}

public static void methodA(int[] num){num[0]=100;

}}

イメージ図

mainメソッド methodAメソッド

Mainクラス

num={1,2,3,4,5} と初期化して宣言。numをmethodAに渡す。

num[0]を表示。

値渡し 不思議なことが…

イメージ図

mainメソッド methodAメソッド

Mainクラス

num={1,2,3,4,5} と初期化して宣言。numをmethodAに渡す。

num[0]を表示。

値渡し 不思議なことが…

イメージ図

mainメソッド methodAメソッド

Mainクラス

num={1,2,3,4,5} と初期化して宣言。numをmethodAに渡す。

{1,2,3,4,5}がint型配列numに入る。

num[0]を表示。

値渡し 不思議なことが…

イメージ図

mainメソッド methodAメソッド

Mainクラス

num={1,2,3,4,5} と初期化して宣言。numをmethodAに渡す。

{1,2,3,4,5}がint型配列numに入る。

num[0]=10;

num[0]を表示。

値渡し 不思議なことが…

参照渡し渡されているのは 配列の先頭アドレス。 →methodAの  num[0]=10 も  書き換え先はおなじ。

参照渡し

参照渡しcall by reference

「場所(住所)」を渡す

どんどん質問を!! 演習6