2016-06-29 10 views
0

私はプログラミングに慣れていないので、間違いを考慮してください。私は、ユーザが空白で区切られた1行に2つの入力番号を与えるプログラムを書いています。最初の入力を整数変数に代入し、2番目を2倍にして、数学を実行して結果を表示する必要があります。以下の私のコードです:スレッド "main"の例外java.lang.ArrayIndexOutOfBoundsException:1エラー

import java.util.Scanner; 
public class foo{ 
    public static void main(String[] args){ 
     String b = null; 
     Scanner sc = new Scanner(System.in); 
     b = sc.next(); 
     String[] split = b.split(" "); 
     int i = Integer.parseInt(split[0]); 
     double d = Double.parseDouble(split[1]); 
     System.out.println(i+20); 
     System.out.println(d-1.50); 
    } 
}  

そして、次はそれを実行している間、私は取得していますエラーです。

F:\java\work\codechef>javac foo.java 

F:\java\work\codechef>java foo 
20 300.50 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
     at foo.main(foo.java:9) 

まず私はb=sc.readLine();でそれを作ってみましたが、そこにコンパイル中に、私は次のエラーを得た:

error: cannot find symbol 
       b = sc.readLine(); 
        ^
    symbol: method readLine() 
    location: variable sc of type Scanner 
1 error 

私はどのように上記の問題を解決するために、これらのエラーを取得していますなぜ。

+3

使用 '代わりにsc.next' – Zircon

+0

@Tunaki'のsc.nextLine'これは重複していない、問題ArrayIndexOutOfBoundsExceptionをスローしますが、別です。 –

+0

@krzyk問題は同じです。範囲外だった配列のインデックスにアクセスしようとしました。なぜなら、 'split [1]'が例外をスローする理由、なぜ 'b.split(" ")'が長さ1の配列を返したのか、なぜ 'next()'スペースは1つしかありませんでした。 OPはhttp://stackoverflow.com/questions/22458575/whats-the-difference-between-next-and-nextline-methods-from-scanner-classを参照することもできます。 – Tunaki

答えて

1

sc.next()を使用しました。次のトークン(トークンは前と後のいずれかの区切り文字)を返しますので、ケースには20または300.50しか含まれていません。

splitを後で使用するには、sc.nextLine()を使用する必要があります。これは完全な行を返します。

または使用:

int i = Integer.parseInt(sc.next()); 
double d = Double.parseDouble(sc.next()); 

や線を取り除く:

b = sc.next(); 
    String[] split = b.split(" "); 
関連する問題