Java言語プログラミングレッスン上巻
★★★★★
第08章:メソッド
メソッドの例
Integer.parseInt
println
readLine
static
public static int halve (int n) {
↑n 引数
↑int 引数の型
↑halve メソッド名
↑int 戻り値の型、int型(void 戻り値なし)
↑static メソッドの種類:クラスメソッド
↑public アクセス制御:公開されているメソッド
Discount1.java(半額の計算をするプログラム)
----------
public class Discount1 {
public static void main(String[] args) {
int p, q;
p = 10000;
q = p / 2;
System.out.println("元の値段が" + p + "円なら、半額だと" + q + "円になります。");
}
}
----------
画面に
javac Discount1.java
java Discount
元の値段が10000円なら、半額だと5000円になります。
----------
メソッド宣言の一般形
----------
戻り値の型 メソッド名(引数列)
{
処理
return文
}
Discount2.java(メソッドhalveを使って半額の計算)
----------
public class Discount2 {
public static void main(String[] args) {
int p, q;
p = 10000;
q = halve(p);
System.out.println("元の値段が" + p + "円なら、半額だと" + q + "円になります。");
}
public static int halve(int n) {
return n / 2;
}
}
----------
画面に
javac Discount2.java
java Discount2
元の値段が10000円なら、半額だと5000円になります。
----------
メソッドのさまざまな例
Graph1.java(1本だけのグラフ表示)
----------
public class Graph81 {
public static void main(String[] args) {
printGraph(10);
}
public static void printGraph(int x ) {
for (int i = 0; i < x; i++) {
System.out.print("*");
}
}
}
----------
画面に
javac Graph81.java
java Graph81
**********
----------
Power1.java(引数が2つのメソッド)
----------
public class Power1 {
public static void main(String[] args) {
System.out.println(getPower(8, 2));
}
/* x の n 乗の計算 */
public static int getPower(int x, int n) {
int y = 1;
for (int i = 0; i < n; i++) {
y = y * x;
}
return y;
}
}
----------
画面に
javac Power1.java
java Power1
64
----------
学んだこと
。メソッドの宣言と呼び出し
。メソッドの引数と戻り値
練習問題8-1
正しいものに○、誤っているものに×
○ (1) メソッドは名前を持っている
× (2) メソッドは必ずreturn文を含んでいる
メソッドの戻り値の型がvoidの場合には、return文を1つも含まないことがある
× (3) メソッドは必ず1つ以上の引数を持っている
引数が0個の(引数がない)メソッドもある。
例えば、BufferedReaderクラスのメソッドreadLineが引数がない。
× (4) メソッドの中から別のメソッドを呼び出すことはできない
呼び出すことはできる
× (5) 1つのクラスにはメソッドが1つだけ含まれている
1つのクラスにはメソッドがいくつ含まれていてもかまわない
練習問題8-2
Graph2.java(放射線を書くプログラム)
----------
public class Graph2 {
public static void main(String[] args) {
for (int n = -8; n <= 8; n++) {
printGraph(n * n);
}
}
public static void printGraph(int x ) {
for (int i = 0; i < x; i++) {
System.out.print("*");
}
System.out.println("");
}
}
----------
画面い
javac PowerGraph.java
java PowerGraph
****************************************************************
*************************************************
************************************
*************************
****************
*********
****
*
*
****
*********
****************
*************************
************************************
*************************************************
****************************************************************
----------
練習問題8-3
メソッドの名前として、文法上許されるものに○、コンパイルエラーになるものに×
○ (1) printGraph
○ (2) print_Graph
× (3) print-graph (- を使えない)
○ (4) PRINTGRAPH
× (5) 1st_2nd_3rd (数字で始まってはいけない)
○ (6) 設定解除
× (7) public (予約語なので)
○ (8) α
練習問題8-4
PowerGraph.java(メソッド、メソッドの引数、局所変数の一覧を作ってください)
----------
public class PowerGraph {
public static void main(String[] args) {
for (int i = -8; i <= 8; i++) {
if (i < 0) {
printGraph(getPower(i, 2), '-');
} else {
printGraph(getPower(i, 2), '+');
}
}
}
/* x の n 乗の計算 */
public static int getPower(int x, int n) {
int y = 1;
for (int i = 0; i < n; i++) {
y = y * x;
}
return y;
}
/* '*' でグラフ表示 */
public static void printGraph(int x ) {
printGraph(x, '*');
}
/* 指定した文字でグラフ表示 */
public static void printGraph(int x, char c) {
for (int i = 0; i < x; i++) {
System.out.print(c);
}
System.out.println("");
}
}
----------
画面に
javac PowerGraph.java
java PowerGraph
----------------------------------------------------------------
-------------------------------------------------
------------------------------------
-------------------------
----------------
---------
----
-
+
++++
+++++++++
++++++++++++++++
+++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----------
mainメソッド (2-10行目)
。引数:args (String型)
。変数:i (int型)
getPowerメソッド (12-18行目)
。引数:x (int型)
n (int型)
。変数:y (int型)
i (int型)
printGraphメソッド (20-22行目)
。引数:x (int型)
printGraphメソッド (24-29行目)
。引数:x (int型)
c (char型)
。変数:i (int型)
練習問題8-5
以下のプログラムはうまく動作しない。どうしたら2つの文字列を返すことができるでしょうか。
MethodTest.java(メソッドから2つの文字列を返せるのだろうか?)
----------
public class MethodTest {
/* "結城" と "浩" の2つの文字列を返すメソッド(?) */
public static void getYourName(String myoji, String namae) {
myoji = "結城";
namae = "浩";
}
public static void main(String[] args) {
String x;
String y;
getYourName(x, y);
System.out.println("名字は" + x );
System.out.println("名前は" + y);
}
}
----------
画面に
javac MethodTest.java
MethodTest.java:11: 変数 x は初期化されていない可能性があります。
getYourName(x, y);
^
MethodTest.java:11: 変数 y は初期化されていない可能性があります。
getYourName(x, y);
^
エラー 2 個
----------
MethodTest1.java(配列を戻り値にする方法1)
----------
public class MethodTest1 {
public static String[] getYourName() {
String[] myoji_namae = { "結城", "浩" };
return myoji_namae;
}
public static void main(String[] args) {
String[] s = getYourName();
System.out.println("名字は" + s[0]);
System.out.println("名前は" + s[1]);
}
}
----------
画面に
javac MethodTest1.java
java MethodTest1
名字は結城
名前は浩
----------
MethodTest2.java(配列を戻り値にする方法2)
----------
public class MethodTest2 {
public static String[] getYourName() {
String[] myoji_namae = new String[2];
myoji_namae[0] = "結城";
myoji_namae[1] = "浩";
return myoji_namae;
}
public static void main(String[] args) {
String[] s = getYourName();
System.out.println("名字は" + s[0]);
System.out.println("名前は" + s[1]);
}
}
----------
画面に
javac MethodTest2.java
java MethodTest2
名字は結城
名前は浩
----------
MethodTest3.java(配列を引数に渡して、要素に代入する方法)
----------
public class MethodTest3 {
public static void getYourName(String[] args) {
args[0] = "結城";
args[1] = "浩";
}
public static void main(String[] args) {
String[] s = new String[2];
getYourName(s);
System.out.println("名字は" + s[0]);
System.out.println("名前は" + s[1]);
}
}
----------
画面に
javac MethodTest3.java
java MethodTest3
名字は結城
名前は浩
----------
MethodTest4.java(新たなクラスを作り、それを戻り値にする方法)
----------
class MyojiNamae {
String myoji;
String namae;
}
public class MethodTest4 {
public static MyojiNamae getYourName() {
MyojiNamae obj = new MyojiNamae();
obj.myoji = "結城";
obj.namae = "浩";
return obj;
}
public static void main(String[] args) {
MyojiNamae mn = getYourName();
System.out.println("名字は" + mn.myoji);
System.out.println("名前は" + mn.namae);
}
}
----------
画面に
javac MethodTest4.java
java MethodTest4
名字は結城
名前は浩
----------
★★★★★
第8章 終わり
★★★★★
第08章:メソッド
メソッドの例
Integer.parseInt
println
readLine
static
public static int halve (int n) {
↑n 引数
↑int 引数の型
↑halve メソッド名
↑int 戻り値の型、int型(void 戻り値なし)
↑static メソッドの種類:クラスメソッド
↑public アクセス制御:公開されているメソッド
Discount1.java(半額の計算をするプログラム)
----------
public class Discount1 {
public static void main(String[] args) {
int p, q;
p = 10000;
q = p / 2;
System.out.println("元の値段が" + p + "円なら、半額だと" + q + "円になります。");
}
}
----------
画面に
javac Discount1.java
java Discount
元の値段が10000円なら、半額だと5000円になります。
----------
メソッド宣言の一般形
----------
戻り値の型 メソッド名(引数列)
{
処理
return文
}
Discount2.java(メソッドhalveを使って半額の計算)
----------
public class Discount2 {
public static void main(String[] args) {
int p, q;
p = 10000;
q = halve(p);
System.out.println("元の値段が" + p + "円なら、半額だと" + q + "円になります。");
}
public static int halve(int n) {
return n / 2;
}
}
----------
画面に
javac Discount2.java
java Discount2
元の値段が10000円なら、半額だと5000円になります。
----------
メソッドのさまざまな例
Graph1.java(1本だけのグラフ表示)
----------
public class Graph81 {
public static void main(String[] args) {
printGraph(10);
}
public static void printGraph(int x ) {
for (int i = 0; i < x; i++) {
System.out.print("*");
}
}
}
----------
画面に
javac Graph81.java
java Graph81
**********
----------
Power1.java(引数が2つのメソッド)
----------
public class Power1 {
public static void main(String[] args) {
System.out.println(getPower(8, 2));
}
/* x の n 乗の計算 */
public static int getPower(int x, int n) {
int y = 1;
for (int i = 0; i < n; i++) {
y = y * x;
}
return y;
}
}
----------
画面に
javac Power1.java
java Power1
64
----------
学んだこと
。メソッドの宣言と呼び出し
。メソッドの引数と戻り値
練習問題8-1
正しいものに○、誤っているものに×
○ (1) メソッドは名前を持っている
× (2) メソッドは必ずreturn文を含んでいる
メソッドの戻り値の型がvoidの場合には、return文を1つも含まないことがある
× (3) メソッドは必ず1つ以上の引数を持っている
引数が0個の(引数がない)メソッドもある。
例えば、BufferedReaderクラスのメソッドreadLineが引数がない。
× (4) メソッドの中から別のメソッドを呼び出すことはできない
呼び出すことはできる
× (5) 1つのクラスにはメソッドが1つだけ含まれている
1つのクラスにはメソッドがいくつ含まれていてもかまわない
練習問題8-2
Graph2.java(放射線を書くプログラム)
----------
public class Graph2 {
public static void main(String[] args) {
for (int n = -8; n <= 8; n++) {
printGraph(n * n);
}
}
public static void printGraph(int x ) {
for (int i = 0; i < x; i++) {
System.out.print("*");
}
System.out.println("");
}
}
----------
画面い
javac PowerGraph.java
java PowerGraph
****************************************************************
*************************************************
************************************
*************************
****************
*********
****
*
*
****
*********
****************
*************************
************************************
*************************************************
****************************************************************
----------
練習問題8-3
メソッドの名前として、文法上許されるものに○、コンパイルエラーになるものに×
○ (1) printGraph
○ (2) print_Graph
× (3) print-graph (- を使えない)
○ (4) PRINTGRAPH
× (5) 1st_2nd_3rd (数字で始まってはいけない)
○ (6) 設定解除
× (7) public (予約語なので)
○ (8) α
練習問題8-4
PowerGraph.java(メソッド、メソッドの引数、局所変数の一覧を作ってください)
----------
public class PowerGraph {
public static void main(String[] args) {
for (int i = -8; i <= 8; i++) {
if (i < 0) {
printGraph(getPower(i, 2), '-');
} else {
printGraph(getPower(i, 2), '+');
}
}
}
/* x の n 乗の計算 */
public static int getPower(int x, int n) {
int y = 1;
for (int i = 0; i < n; i++) {
y = y * x;
}
return y;
}
/* '*' でグラフ表示 */
public static void printGraph(int x ) {
printGraph(x, '*');
}
/* 指定した文字でグラフ表示 */
public static void printGraph(int x, char c) {
for (int i = 0; i < x; i++) {
System.out.print(c);
}
System.out.println("");
}
}
----------
画面に
javac PowerGraph.java
java PowerGraph
----------------------------------------------------------------
-------------------------------------------------
------------------------------------
-------------------------
----------------
---------
----
-
+
++++
+++++++++
++++++++++++++++
+++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----------
mainメソッド (2-10行目)
。引数:args (String型)
。変数:i (int型)
getPowerメソッド (12-18行目)
。引数:x (int型)
n (int型)
。変数:y (int型)
i (int型)
printGraphメソッド (20-22行目)
。引数:x (int型)
printGraphメソッド (24-29行目)
。引数:x (int型)
c (char型)
。変数:i (int型)
練習問題8-5
以下のプログラムはうまく動作しない。どうしたら2つの文字列を返すことができるでしょうか。
MethodTest.java(メソッドから2つの文字列を返せるのだろうか?)
----------
public class MethodTest {
/* "結城" と "浩" の2つの文字列を返すメソッド(?) */
public static void getYourName(String myoji, String namae) {
myoji = "結城";
namae = "浩";
}
public static void main(String[] args) {
String x;
String y;
getYourName(x, y);
System.out.println("名字は" + x );
System.out.println("名前は" + y);
}
}
----------
画面に
javac MethodTest.java
MethodTest.java:11: 変数 x は初期化されていない可能性があります。
getYourName(x, y);
^
MethodTest.java:11: 変数 y は初期化されていない可能性があります。
getYourName(x, y);
^
エラー 2 個
----------
MethodTest1.java(配列を戻り値にする方法1)
----------
public class MethodTest1 {
public static String[] getYourName() {
String[] myoji_namae = { "結城", "浩" };
return myoji_namae;
}
public static void main(String[] args) {
String[] s = getYourName();
System.out.println("名字は" + s[0]);
System.out.println("名前は" + s[1]);
}
}
----------
画面に
javac MethodTest1.java
java MethodTest1
名字は結城
名前は浩
----------
MethodTest2.java(配列を戻り値にする方法2)
----------
public class MethodTest2 {
public static String[] getYourName() {
String[] myoji_namae = new String[2];
myoji_namae[0] = "結城";
myoji_namae[1] = "浩";
return myoji_namae;
}
public static void main(String[] args) {
String[] s = getYourName();
System.out.println("名字は" + s[0]);
System.out.println("名前は" + s[1]);
}
}
----------
画面に
javac MethodTest2.java
java MethodTest2
名字は結城
名前は浩
----------
MethodTest3.java(配列を引数に渡して、要素に代入する方法)
----------
public class MethodTest3 {
public static void getYourName(String[] args) {
args[0] = "結城";
args[1] = "浩";
}
public static void main(String[] args) {
String[] s = new String[2];
getYourName(s);
System.out.println("名字は" + s[0]);
System.out.println("名前は" + s[1]);
}
}
----------
画面に
javac MethodTest3.java
java MethodTest3
名字は結城
名前は浩
----------
MethodTest4.java(新たなクラスを作り、それを戻り値にする方法)
----------
class MyojiNamae {
String myoji;
String namae;
}
public class MethodTest4 {
public static MyojiNamae getYourName() {
MyojiNamae obj = new MyojiNamae();
obj.myoji = "結城";
obj.namae = "浩";
return obj;
}
public static void main(String[] args) {
MyojiNamae mn = getYourName();
System.out.println("名字は" + mn.myoji);
System.out.println("名前は" + mn.namae);
}
}
----------
画面に
javac MethodTest4.java
java MethodTest4
名字は結城
名前は浩
----------
★★★★★
第8章 終わり