2017-03-03 2 views
-4

Ich muss zwei ganze Zahlen in der gleichen Zeile mit einem Leerzeichen dazwischen nehmen, und Array in der gleichen Zeile mit Abstand dazwischen nehmen.Ich bekomme immer NoSuchElementException?

Mein Eingang:

5 2 
1 2 3 4 5 

Meine Ausgabe:

3 4 5 1 2 

Mein Code ist:

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

Ich habe diese Frage ein wenig formatiert, aber es ist Sache * Sie *, uns zu erklären, warum diese Ausgabe nicht korrekt ist. – Makoto

+0

Zählen Sie, wie oft Sie 'nextInt()' aufrufen. Passt es zu der Anzahl von Ganzzahlen, die Sie lesen möchten? – Tunaki

+0

Wie entscheiden Sie, dass Ihre Ausgabe von 3 beginnen soll? – Maverick

Antwort

0

Es scheint, dass, wenn Sie Ihren Code für den Eingang laufen müssen Sie in Ihrem Frage, das ist Ihre Ausgabe:

3 4 1 2 2 

Der Grund, warum Sie diesen falschen Ausgang hat, anstelle der beabsichtigten Ausgabe ist dies für Schleife:

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

Jede Iteration, Sie sind in der Anordnung den temporären Wert in den letzten Slot kopieren, anstatt es zu tun nur einmal am Ende. Dies erzeugt doppelte Werte, wie sie in der Ausgabe zu sehen sind. Um dies zu beheben, verschieben Sie einfach die letzte Zeile des for-Schleife außerhalb der for-Schleife, etwa so:

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

Sobald Sie diese Änderung vornehmen, Ihr Programm wie beabsichtigt funktioniert, mit Ausnahme der Tatsache, dass Sie in das Array zweimal. Ich habe diese Codezeilen tatsächlich entfernt, bevor ich den Code ausgeführt habe. Daher bin ich mir nicht sicher, ob dies Ihre NoSuchElement-Ausnahme verursacht. Befreien Sie sich von diesen Linien, und Ihr Code wird funktionieren:

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