2017-03-03 8 views
-4

同じ行に2つの整数を入れ、その間に空白を入れて同じ行に配列を取らなければなりません。私はNoSuchElementExceptionを取得し続けますか?

マイ入力:

5 2 
1 2 3 4 5 

マイ出力:

3 4 5 1 2 

私のコードは次のとおりです。

Scanner s = new Scanner(System.in); 
int n, d; 
n = s.nextInt(); 
d = s.nextInt(); 
int a[] = new int[n]; 
for (int j = 0; j < n; j++) { 
    a[j] = s.nextInt(); 
} 
for (int i = 0; i < a.length; i++) { 
    a[i] = s.nextInt(); 
} 
for (int j = 0; j < d; j++) { 
    int temp = a[0]; 
    int i; 
    for (i = 0; i < n - 1; i++) { 
     a[i] = a[i + 1]; 
     a[n - 1] = temp; 
    } 
    for (int i = 0; i < n; i++) { 
     System.out.print(a[i] + " "); 
    } 
} 
+0

私はこの質問を少し書式設定しましたが、この出力が間違っている理由をあなたに説明しています。 – Makoto

+0

'nextInt()'を何回呼び出すかを数えます。読んでみたい整数の数に一致しますか? – Tunaki

+0

出力を3から始める必要があるのはどうですか? – Maverick

答えて

0

あなたが入力のためにあなたのコードを実行するときに、あなたの中に持っているようです質問、これはあなたの出力です:

3 4 1 2 2 

代わりに、あなたの意図した出力のあなたは、この誤った出力を持っている理由は、ループのためにこれです:

for (i = 0; i < n - 1; i++) { 
    a[i] = a[i + 1]; 
    a[n - 1] = temp; 
} 

すべての反復は、配列の最後のスロットに一時的な値をコピーするのではなく、それをやっています最後に一度だけ。これは、出力に見られるような重複した値を作成します。この変更を行う

for (i = 0; i < n - 1; i++) { 
    a[i] = a[i + 1]; 
} 
a[n - 1] = temp; 

たら、あなたのプログラムはあなたが読んでいるという事実を除いて、あなたが意図したとおりに動作しますので、同様にこれを修正するには、単に、forループforループの外の最後の行に移動配列を2回コードを実行する前にこれらのコード行を実際に削除したので、NoSuchElement例外が発生しているかどうかはわかりません。これらの行を取り除くと、コードはうまく動作します:

for (int i = 0; i < a.length; i++) { 
    a[i] = s.nextInt(); 
} 
関連する問題