作成 2010.01.23
更新 2010.01.23
更新 2010.01.23
Java の練習 Level 2
http://oshiete1.goo.ne.jp/qa5612388.html
問題
要件
1からnまでの奇数の和を求めるプログラム sample.java を作成せよ。
条件1. nの入力はコマンドライン引数を利用する。
条件2. 和を計算するためのクラス メソッド "Sum" 戻り値と引数はともにint型。
条件3. 結果を表示するためのクラス メソッド "display" 戻り値はvoid型、引数はint型が2つ。
実行例
$java sample コマンドライン引数がありません! $java sample 100 1から100までの奇数の和は2500です。
解答例
class sample { // 奇数の和 クラス メソッド Sum static int Sum(int num_max){ int int_sum = 0; for(int i=1; i<=num_max; i+=2){ int_sum += i; } return int_sum; } // 結果の表示 クラス メソッド display static void display(int num_max, int sum){ System.out.println("1から" + num_max + "までの奇数の和は" + sum + "です。"); } public static void main(String args[]){ // 引数の処理 if(args.length < 1){ System.out.println("コマンドライン引数がありません!"); }else{ try{ int n = Integer.parseInt(args[0]); sample.display(n, sample.Sum(n)); }catch(NumberFormatException e){ System.out.println("引数は数字を入力してください。"); } } } }
解説のようなもの
- コマンドライン引数について
コマンドラインの引数は main メソッドの引数 (String args[] : 文字列型の配列) として取得できる。
引数が無ければ args の配列の長さが 0 になるため 1 未満の場合は引数が無いと判断する (args.length < 1)。
取得した引数は文字列型だから int型へ変換するために Integer.parseInt を使用する。なお、引数が数字以外であれば、NumberFormatException が発生する。詳細は Integer クラスを参照。 - 奇数の和 Sum メソッドについて
1からnまでの奇数なので for(i=1; i<=n; i+=2) 。
n が奇数の場合は加算対象であることに注意。 - 結果の表示 display メソッドについて
まあ、普通に。文字列の連結は "+" を使用する。数値型は自動的に文字列型へ型変換してくれるので便利。
ちなみに数値型同士を文字列として連結する場合は "" + int + int のように、空文字列を冒頭へ入れると文字列連結として確実に扱ってくれる。 - クラス メソッドとは
クラスを直接指定して呼び出せるメソッド。
インスタンスを作成せずに実行できる。従って「どこから参照しても一意」という意味の static の指定が必要。
ちなみにインスタンスを作成して呼び出すメソッドをインスタンス メソッドという。
インスタンス メソッドとクラス メソッドの使い分けに関してはマルチスレッドを使用する段階で理解できると思う。それまではそういうものがあるというだけでOK。
補足 インスタンス メソッド化した例
main メソッド内で sample s = new sample(); によりインスタンス化して実行している。
class sample { // 奇数の和 インスタンス メソッド Sum int Sum(int num_max){ int int_sum = 0; for(int i=1; i<=num_max; i+=2){ int_sum += i; } return int_sum; } // 結果の表示 インスタンス メソッド display void display(int num_max, int sum){ System.out.println("1から" + num_max + "までの奇数の和は" + sum + "です。"); } public static void main(String args[]){ // 引数の処理 if(args.length < 1){ System.out.println("コマンドライン引数がありません!"); }else{ try{ int n = Integer.parseInt(args[0]); sample s = new sample(); s.display(n, s.Sum(n)); }catch(NumberFormatException e){ System.out.println("引数は数字を入力してください。"); } } } }
タグ: Java