コマンドライン引数を使って複数のメソッドで複数の数字を計算する
研修で取り組み、自力で解けなかった問題への理解を深めるための記事です。
そのため、この記事はJavaについてのみとなります。
サイトや教材を参考にした上で記述していますが、誤っている点がある場合はご指摘いただきますと幸いです。
***
今回の練習問題はこちらです。
任意の整数2つを入力し、加減乗除と剰余算結果を出す
処理はそれぞれメソッドを作り、表示はmainメソッドで行う
メソッドとは
長ったらしいコードを要素ごとに分割する仕組みです。
定義済み処理(サブルーチン)と同じだと講習で習いましたが、自分で調べていくと少し違うような。
メソッド:プログラミングの部品 一連の処理がまとまったもの
サブルーチン:繰り返し何度も使われるような処理を一つの塊(メソッド?)として定義されている。他のメソッドで処理ができるよう、呼び出すための数値が「引数」であり、処理した数値を呼び出し元に返す際は「返り値」という
関数:返り値が存在するサブルーチン
つまり、メソッドの中にサブルーチンがあり、サブルーチンの中に関数が存在するということだと解釈されます。
コマンドライン引数とは
引数
引数(argument) 英語での意味は論拠,議論等です。
プログラミング用語としては、関数についた括弧内の数値あるいは変数を指します。
実引数,仮引数
引数を送る側が実引数(add(10))、受け取る側(add(int a))が仮引数となります。
public static void main(String args){
// 引数として整数を渡す
add(10);
}
public static void add(int a){
この2つはお互いに
- 型
- 順番
- 個数
が一致していないとエラーを起こします。
コマンドライン引数
mainメソッドに渡す変数の値を指します。
public static void main(String args)
上記メインメソッドの、String argsに相当します。Stringということは配列で複数入れることが可能そうです。
argsってなんだよって思ってたけど引数のことだったようです。
コマンドライン引数を文字型から実数にする
java sample 5 //実行
コンパイル後、実行する際に任意の数字を入力することでmainメソッドの文字列配列に格納されます。このサンプルだと5が任意の数字です。複数入力したい際は半スペース区切りで入力していきます。入力した順に格納されていきます。
public static void main(String args)
mainメソッドの文字列配列はString型なので、このままだと入力した数字が数字として認識されず、文字型として認識されてしまいます。
では、この文字型を整数・実数に変換しましょう。
int a = Integer.parseInt(args[0]);
上記はint型への変換です。double型への変換の場合は、intの部分をdoubleに置き換えます。
args[0]は任意の数字にあたります。配列の一つ目なので。複数数字がある場合は、[1],[2]...となります。
これで任意の数字5はint aに格納され整数と化し、数字として計算ができるようになりました。
処理用のメソッドを作成する
public static int plus(int a,int b){
return a + b;
}
加算のみの処理用メソッドを作成しました。
メソッド名はplus,返り値があるためstaticの後にvoidではなくintをおきました。
仮引数としてa,bを同じ名前のまま使っています。
受け取った引数、処理、返り値を表記します
mainメソッドで表示する
System.out.println("加算結果は" + plus(a,b));
(ここも加算の場合のみの表記です。)
コード一覧
クラス名省略
public static void main(String args){
if(args.length != 2){
System.out.println("整数の引数を2つ入力してください");
return;
}
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
System.out.println("加算結果は" + plus(a,b));
:
: //間省略
System.out.println("剰余算結果は" + rema(a,b));
}
public static int plus(int a,int b){
return a + b;
}
: //間省略
public static int rema(int a,int b){
return a + b;
}
長くなるので減〜徐は省略しました。同じことの繰り返しでもあるので。
以上、研修の振り返りです。
加筆・修正するかもしれません。