Lassen Sie uns was jeden Teil Ihres brechen Code tut, und sehen, ob die Antwort wird klar:
int n=sc.nextInt();
int f=n;
So lesen wir in einer Reihe (in diesem Fall 6), und stellt sowohl n
und f
dieser Wert zu sein.
for(int i=0;i<n;i++)
{
Hier werden wir den folgenden Block 6-mal wiederholen, mit i
gleich 0 ist, dann 1, dann 2, 3, 4 und 5. Wir halten werden, wenn i
nicht mehr weniger als n
, die in diesem Fall 6 ist.
So starten wir die Schleife, und i
ist 0. n
und f
sind beide noch 6, weil wir sie nicht geändert haben.
for(int j=0;i<f;j++)
{
Eine weitere Schleife, diesmal wir mit j
bei 0 fangen, und bis i
weiterhin nicht mehr weniger als f
. Was waren wieder i
und f
? i
ist 0 (wir sind auf dem ersten Mal durch diese äußere Schleife) und f
ist immer noch 6. 0 ist weniger als 6, also starten wir diese Schleife.
System.out.print(" ");
}
Wir drucken einen Raum, und das Ende der Schleife finden, so gehen wir zurück um auf die for(int j=0...
Schleife, Erhöhen j
(weil wir gesagt j++
in Anfang dieser Schleife).
Also, jetzt sind die Werte, die wir haben: j = 1
, und f = 6
. Wir überprüfen die Loop-Bedingung - i<f
- und 0 ist immer noch weniger als 6, also wiederholen wir die Schleife erneut, und drucken Sie ein anderes Leerzeichen, und wiederholen Sie die oben genannten.
Nichts innerhalb dieser Schleife verändert sich immer die Werte von i
oder f
, so die Bedingung für die Schleife (i<f
) ist immer wahr, und wir nur immer in einer Endlos-Schleife, Druckräume enden. j
erhöht sich bei jeder Iteration, also geht es bis zu 1, 2, 3 usw., aber da Sie sich nie wieder darauf beziehen, ist das irrelevant.
Das Problem besteht also darin, dass Sie die Schleifenbedingung ändern müssen, damit Sie die Schleife beenden und zu den anderen Teilen Ihres Programms wechseln können.
Vorausgesetzt, dass Ihre Schleife über j
iteriert, und Sie erhöhen das, wie Sie gehen, meine Vermutung ist, dass Sie verwenden möchten, um zu bestimmen, ob die Schleife zu beenden - also, Sie wahrscheinlich machen möchten es die Bedingung j<f
statt i<f
, das heißt:
for(int j=0;j<f;j++)
{
System.out.print(" ");
}
ich bin nicht sicher, ob das Ihr Programm perfekt machen, oder wenn Sie ein ähnliches Problem betroffen, aber hoffentlich, indem er sie wie diese Sie brechen kann die Art von Gedankenprozess sehen, den Sie durchlaufen müssen, um das zu lösen, was auch immer das nächste Problem ist, auf das Sie stoßen. Im Grunde müssen Sie so tun, als ob Sie der Computer wären, und jede Zeile einzeln bearbeiten, indem Sie den Wert jeder Variablen bei jeder Änderung aufschreiben. Es ist nicht schwer, aber es ist zeitaufwendig und nervig - willkommen zu programmieren!
Gibt es keine Ausgabe oder ist Ihre Ausgabe eine Menge Leerzeichen? – dave
Willkommen bei Stack Overflow! Es sieht so aus, als müssten Sie lernen, einen Debugger zu verwenden. Bitte helfen Sie sich selbst [https://ericlippert.com/2014/03/05/how-to-debug-small-programs/]. Wenn Sie danach noch Probleme haben, können Sie gerne eine spezifischere Frage stellen. –