▼解答編5
「再帰関数,標準入力ストリーム」
← 前
:
次 →
問1の解答.
「Fib.java」
public class Fib {
public static void main(String[] args) {
Fib f;
int userNum;
// 引数のエラー判定1(あるかないか)
if(args.length!=1) {
System.out.println("引数ないよ or 多いよ");
System.exit(1);
}
// 引数のエラー判定2(自然数かどうか)
try {
userNum=Integer.parseInt(args[0]);
} catch(NumberFormatException nfe) {
userNum=-1;
}
if(userNum<0) {
System.out.println("正の整数じゃないよ");
System.exit(1);
}
System.out.println("ユーザ入力:"+userNum);
// 自身のインスタンス生成
f=new Fib();
// 再帰呼び出し しまくり
for(int i=0;i<userNum;i++) {
System.out.print(f.fib(i)+",");
}
System.out.println(f.fib(userNum));
}
public int fib(int i) {
if(i==0) {
// f(0)=0 という条件
return 0;
} else if(i==1) {
// f(1)=1 という条件
return 1;
}
// f(i)=f(i-1)+f(i-2) : i>1 という条件
return fib(i-1)+fib(i-2);
}
}
|
問2の解答.
ベルくん(仮称)の回答(反転させて出力する部分)が,シンプルで良いです.
良いですが,せっかくなので違った解答を用意してみました.for(int i = ouputStr.length()-1; i >=0; i--) { System.out.println(outputStr.charAt(i)); }
「InputString.java」
import java.io.*;
public class InputString {
/**
* 標準入力ストリームを保持するインスタンス変数.
*/
private BufferedReader inputReader;
/**
* コンストラクタ.
*/
public InputString() {
// 標準入力ストリーム(System.in)から InputStreamReader を生成
// さらに,そのインスタンスから入力効率の良い BufferedReader を生成
inputReader=new BufferedReader(new InputStreamReader(System.in));
}
/**
* @return ユーザ入力文字列
*
* 標準入力ストリームから文字列を取得するメソッド.
*/
public String getUserInput() {
String userStr;
try {
// 標準入力ストリームからユーザが入力した文字列を取得
userStr=inputReader.readLine();
} catch(IOException ioe) {
// I/O 例外が起きた場合には,ユーザ入力は空
userStr="";
}
return userStr;
}
/**
* @param args コマンド・ライン引数
*
* メイン・メソッド.
*/
public static void main(String[] args) {
InputString is;
String userStr;
String resultStr;
// 自身のインスタンスを生成
is=new InputString();
// ユーザ入力
System.out.print("Input :");
userStr=is.getUserInput();
System.out.println("");
// 反転出力
resultStr=new String(is.reverseArray(is.convertStringToArray(userStr)));
System.out.println("Output:"+resultStr);
}
/**
* @param srcStr 対象文字列
* @return 対象文字列から作成した文字配列
*
* 文字列から文字配列を取得するメソッド.
*/
public char[] convertStringToArray(String srcStr) {
char[] dstArray;
// 配列の確保
dstArray=new char[srcStr.length()];
// 文字列から文字配列へ文字をコピー
srcStr.getChars(0,srcStr.length(),dstArray,0);
return dstArray;
}
/**
* @param srcArray 対象文字配列
* @return 対象文字配列を反転させた文字配列
*
* 文字配列から逆順文字配列を取得するメソッド.
*/
private char[] reverseArray(char[] srcArray) {
char[] dstArray;
int arrayLength;
// 配列の長さを取得
arrayLength=srcArray.length;
// 配列の確保
dstArray=new char[arrayLength];
// 反転
for(int i=0;i<arrayLength;i++) {
dstArray[i]=srcArray[(arrayLength-1)-i];
}
return dstArray;
}
}
|
ムダに長くなってしまいました・・・.