2017-03-03 79 views
-4

我必須在同一行上取兩個整數,並在兩個整數之間插入一個空格,並且將數組放在同一行上。我不斷收到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循環:

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

每次迭代,你複製的臨時值到陣列中的最後一個時隙,而不是做最後只有一次。這將創建重複值,如輸出中看到的值。爲了解決這個問題,只需移動的最終線環的外側for循環,像這樣:

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

一旦你做出這種改變,你的程序工作,你打算,除非你讀的事實數組兩次。在我運行代碼之前,我實際上刪除了這些代碼行,所以我不確定它是否會導致您的NoSuchElement異常。擺脫這些線,你的代碼將正常工作:

for (int i = 0; i < a.length; i++) { 
    a[i] = s.nextInt(); 
}