Javaでコマンドプロンプト上の入力を処理したい
独学でまったりと学んでいる初心者です。現在Javaのキー入力がうまくいかず困っています。
コマンドプロンプト上の処理で整数を入力させるというものなのですが1を押し、Enterを押すとjava.lang.ArrayIndexOutOfBoundsException
が出てきます。
自分の中ではEnterのせいで動作不良が起きているのかなという目星をつけているのですがその場合でもどうすればいいかが思い浮かびません。動作不良の原因、改善点を挙げて説明してもらえると助かります。また、ソースコードを見て改善するべき点があれば遠慮なくダメ出ししてもらえると助かります。
※プログラム自体はフィボナッチ数列の第n項目を表示するというものです。作業環境はEclipseです
↓以下ソースコード
package フィボナッチ数列;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Fibonacci {
/*
* フィボナッチ数列の第n項を表示したい
*/
int fibonacci_number[];
int number;
int n;
//実行
public static void main(String args[]){
new Fibonacci();
}
public Fibonacci(){
System.out.println("フィボナッチ数列の第n項を調べてやる、です");
System.out.println("好きな数を打ちやがれ、です");
Scanner scan = new Scanner(System.in); //キーイベント
try {
int input= scan.nextInt();
fibonacci_number = new int[input]; //配列生成
fibonacci_number[0] = 0;
fibonacci_number[1] = 1;
calculation(input);
}catch(InputMismatchException e){ //入力が数字以外の場合
System.out.println("数字入れろって言ってるダルォ!?");
return;
}
fibonacci_number = new int[n];
}
public void calculation(int x){
n = x; //入力された文字をnへ
if( n < 3){ //入力が3未満だった場合
if(n == 1 ){ //一番目(0)を表示
printresult(fibonacci_number[0]);
}
else if(n == 2){ //二番目(1)を表示
printresult(fibonacci_number[1]);
}
}else{ //ループに入る
for(int i=0;i<n-2;i++){
int two_before = i; //二個前
int before = i++; //一個前
int ans = fibonacci_number[two_before] + fibonacci_number[before];
fibonacci_number[i+2] = ans;
}
printresult(fibonacci_number[n]); //計算結果表示
}
}
//結果を表示する
public void printresult(int s){
System.out.println("フィボナッチ数列の第"+ n + "項目の数は"+ s + "です。");
}
}