Java-Programmierung und Schleifeniterationen

Um Ihre Java-Programm die Loops leichter zu schreiben und leichter zu verstehen, müssen Sie wissen, wie Java Unterbrechung

Menu

und fortsetzen Aussagen beeinflussen Schleifendurchläufe.

Java break-Anweisung

Nehmen Sie einen Blick auf das Programm unten. Das Programm generiert zufällig eine Zahl von 1 bis 10, und fragt immer wieder den Benutzer, diese Zahl zu erraten.

Listing 1

import static java.lang.System.out-Import java.util.Scanner-Import java.util.Random-public class GuessAgain {public static void main (String args []) {Scanner Tastatur = new Scanner (System.in) - int numGuesses = 0-int Random = new Random (). nextInt (10) + 1-out.println ( "************") -out.println ( "Willkommen in der Ratespiel ") -out.println (" ************ ") -out.println () - out.print (" ein int Geben Sie 1 bis 10: ") -int Inputnumber = Tastatur. nextInt () - numGuesses ++ -während (Inputnumber! = Random) {out.println () - out.println ( "Try again ...") - out.print ( "ein int Geben Sie 1 bis 10:") -inputNumber = keyboard.nextInt () - numGuesses ++ -}out.print ( "Sie gewinnen, nachdem") -out.println (numGuesses + "Vermutungen".) - keyboard.close () -}}

Die folgende Abbildung zeigt einen Lauf des Codes. Der Benutzer macht fünf Vermutungen. Jedes Mal, prüft der Computer, um zu sehen, ob die Vermutung richtig ist. Eine falsche Vermutung eine Anforderung erneut zu versuchen. Für eine richtige Vermutung, erhält der Anwender eine mitreißende Du gewinnst, zusammen mit einer Bilanz von der Anzahl der Vermutungen er oder sie gemacht. Der Computer wiederholt mehrere Aussagen immer und immer wieder, jedes Mal Überprüfung durch, um zu sehen, ob der Benutzer Vermutung die gleiche wie die zufällig generierte Zahl ist. Jedes Mal, wenn der Benutzer eine Vermutung macht, fügt der Computer 1 auf seine Bilanz von Vermutungen. Wenn der Benutzer die richtige Vermutung macht, zeigt der Computer, dass Tally.

bild0.jpg

Was ist umständlich zu diesem Programm? Nun, ein paar Aussagen erscheinen mehr als einmal im Programm. Normalerweise ist eine Aussage, die von einem Teil eines Programms in ein anderes kopiert ist, ist kein Grund zur Sorge. Doch scheint die Gesamtstrategie verdächtig. Das Programm wird eine Nummer aus dem Benutzer vor der Schleife und (wieder) in der Schleife.

out.print ( "Geben Sie einen int von 1 bis 10:") -int Inputnumber = keyboard.nextInt () -numGuesses ++ -während (Inputnumber = Random!) {out.println () - out.println ( "Try again ...") -out.print ( "Geben Sie einen int von 1 bis 10:") -Inputnumber = keyboard.nextInt () -numGuesses ++ -}

Dieser Code verwendet ein Standard-Trick für Schleifen Arbeit zu machen. Man nennt es Grundieren eine Schleife. Das Muster ist

Holen Eingangswährend der Eingabe Sie haben, ist nicht die letzte Eingabe{ Mehr Eingabe}

Bereits zu Beginn des während Schleife, prüft der Computer einen Zustand mit die Eingabe des Benutzers zu tun. So ist der Computer nicht in die Schleife, bis der Benutzer eine Eingabe gibt. Dann, wenn der Computer innerhalb der Schleife ist, fragt der Computer für mehr Input der Schleife der nächsten Iteration zu füttern. Der Trick scheint seltsam, aber es funktioniert.

Entwickler verwenden diese Technik, eine Schleife Grundierung, die ganze Zeit, so dass es nicht so schlimm sein. Aber es ist eine weitere Möglichkeit.

Listing 2

import static java.lang.System.out-Import java.util.Scanner-Import java.util.Random-public class GuessAgain {public static void main (String args []) {Scanner Tastatur = new Scanner (System.in) - int Inputnumber, numGuesses = 0-int Random = new Random (). nextInt (10) + 1-out.println ( "************") -out.println ( "Willkommen in der Erraten Game ") - out.println (" ************ ") -out.println () -while (true) {out.print ( "Geben Sie einen int von 1 bis 10:") -inputNumber = keyboard.nextInt () - numGuesses ++ -if (Inputnumber == Random) {Unterbrechung-}out.println () - out.println ( "Try again ...") -}out.print ( "Sie gewinnen, nachdem") -out.println (numGuesses + "Vermutungen".) - keyboard.close () -}}

Vom Standpunkt des Benutzers aus betrachtet, macht der Code in Listing 2 genau das gleiche wie der Code in Listing 1 (Um die Ausgabe von jedem Programm zu sehen, die auf die Abbildung beziehen oben.) Die Differenz 2 Eintrag hat nur einen Anruf zu keyboard.nextInt. Dieser Aufruf ist innerhalb der Schleife, so muss der Computer die Schleife eingeben, ohne jede Eingabe zu testen.

Wenn man sich die Schleife Zustand betrachtet, kann man sehen, wie das funktioniert. Der Zustand der Schleife ist immer wahr. Egal, was los ist, wird die Schleife Zustand geht immer seinen Test. So der Zustand der Schleife ist ein großer Betrug. Sie springen nie indem sie nicht den Test in der Schleife der Zustand der Schleife aus. Stattdessen springen Sie aus, wenn Sie die Hit Unterbrechung Anweisung, ist innerhalb der Schleife (und Sie treffen, dass Unterbrechung Aussage, wenn Sie über die bekommen if (Inputnumber == Random) Straßensperre). Das Ganze funktioniert sehr gut.

Wenn der Computer führt ein Unterbrechung Anweisung, die in einer Schleife ist, springt der Computer aus der Schleife (mit der ersten Anweisung, die nach der Schleife kommt).

Mit einem Unterbrechung Anweisung, springt der Computer aus nur einer Schleife. Wenn die Schleife in eine andere Schleife passiert zu sein (eine äußere Schleife) wird der Computer nicht außerhalb der äußeren Schleife zu springen.

public class BreakOutOfLoop {public static void main (String [] args) {for (int i = 0-i lt; 3- i ++) {for (int j = 0- j lt; 100- j ++) {System.out.print (j + "") -wenn (j> 9) {} Break-}System.out.println ( "Ich brach aus!") -}}}

Zur Veranschaulichung, die folgende Abbildung zeigt die Ausgabe des vorhergehenden Code enthält:

image1.jpg

Wenn der Computer erreicht die Unterbrechung Anweisung, springt die Steuerung zu der Ich brach Erklärung. Dass Ich brach Aussage draußen des für j Schleife, aber es ist innerhalb das für i Schleife.

Aus der Sicht des Programmierers in den Code Listing 2 ist natürlicher, als den Code in 1. Nachdem alle Eintrag, wie funktioniert das Spiel weitergehen? Die Benutzer Vermutungen, dann prüft der Computer die Vermutung, und dann (wenn die Vermutung nicht korrekt ist) der Computer sagt "Versuchen Sie es erneut." Das ist die Folge von Ereignissen wie in Listing 2 beschrieben, aber in Listing 1, der Code innerhalb der Schleife scheint die Ereignisse in umgekehrter Reihenfolge zu beschreiben: Die Schleife sagt: "Versuchen Sie es erneut", und dann gibt der Benutzer eine Nummer.

Listing 2 bietet eine schöne Alternative zum Loop-Priming-Technik in Listing 1. Warum also die Mühe Programmierer prime ihre Schleifen? Machen Unterbrechung Aussagen haben keine versteckten Nachteile? Nun, die Antwort hängt von Ihrer Sicht. Einige Programmierer denken, dass Unterbrechung Aussagen in Schleifen sind verwirrend. All das Springen von Aussage zu Aussage macht sie schwindlig und erinnert sie an etwas aus den 1960er Jahren genannt Spaghetti-Code. (Spaghetti-Code Anwendungen gehe zu Aussagen von einer Anweisung zum anderen springen. Im Pascal von Beispiel, Autor B. Burd sagt # 147-Programmierung mit goto ist wie um Paris reisen, indem sie durch ihre Kanalisation schwimmen. Es gibt viele kurze Schnitte, aber keiner von ihnen sind unter Wert. # 148-) eine oder andere Weise, Unterbrechung in Schleifen-Anweisungen sind die Ausnahme, nicht die Regel. Verwenden Sie sie, wenn Sie wollen, aber nicht erwarten, dass Java-Code in anderer Leute viele von ihnen zu finden.

Java continue-Anweisung

Listing 3 bietet mehr geheime Zutat für Loops Ihres Programms. Stellen Sie sich ein Spiel, das nach dem Zufallsprinzip aus 1 drei Zahlen erzeugt 20. Der Benutzer erraten fünf Umdrehungen die Zahlen nimmt. Wenn der Benutzer eine richtige Vermutung gelangt, beglückwünscht das Programm den Benutzer. ( "Gut geraten", sagt das Programm). Wenn der Benutzer eine falsche Vermutung gelangt, wird das Programm keine Rückmeldung liefert.

Listing 3 enthält einen Code alles passieren.

Listing 3

import static java.lang.System.out-Import java.util.Scanner-Import java.util.Random-public class GuessAgainAndAgain {public static void main (String args []) {Scanner Tastatur = new Scanner (System.in) - int Inputnumber-int randNum1 = new Random (). nextInt (20) + 1-int randNum2 = new Random (). nextInt (20) + 1-int randNum3 = new Random (). nextInt (20) + 1-out. println ( "************") -out.println ( "Welcome to the Guessing Game") - out.println ( "************") -out.println () - for (int i = 0-i lt; 5- i ++) {out.print ( "ein int eingeben:") -inputNumber = keyboard.nextInt () -if (Inputnumber! = randNum1 Inputnumber! = randNum2 Inputnumber! = randNum3) { fortsetzen- }out.println ( "Gut geraten!") - out.println () -} out.print ( "Die Zahlen sind") -out.print (randNum1 + "") -out.print (randNum2 + "") -out .print (randNum3 + "") -keyboard.close () -}}

Diese Figur zeigt einen Lauf eines solchen Programms.

image2.jpg

Java fortsetzen Anweisung teilt dem Computer, vorbei an den verbleibenden Anweisungen in der Schleife zu springen. Das heißt, anstatt die verbleibenden Anweisungen in der Schleife ausgeführt wird, fährt der Computer mit dem Beginn der nächsten Iteration der Schleife auf. Also, in Listing 3, wenn die Inputnumber keine der zufällig generierten Zahlen des Programms ist es, variable der Computer springt vorbei an der "Good guess" Code, erhöht den Schleifenzähler (der ich), Und fragt den Benutzer, für einen anderen Eingabewert. (Natürlich, wenn der Schleifenzähler seine Grenze trifft, wird der Computer nicht eine weitere Iteration auszuführen. Stattdessen wird der Computer aus der Schleife springt und führt, was Aussagen kommen nach der Schleife.)

Sie können ganz einfach umschreiben Listing 3, so dass der Code nicht hat fortsetzen Erklärung. Sie müssten den "Good guess" Code in ein zu setzen ob Aussage, aber das wäre in Ordnung. Das fortsetzen Aussage nicht viel tun, um das Aussehen des Listing-3-Programm zu verbessern. Aber wenn Sie wollen innerhalb Verschachtelung Code vermeiden ob Aussagen, die fortsetzen Aussage ist praktisch.

Vielleicht, in der Anwendung, ist der Rest der Schleife eine komplizierte Folge von Anweisungen. Sie wollen nicht, diese Sequenz zu machen scheint komplizierter, indem sie es innerhalb eines einschließe ob Erklärung. Oder vielleicht in Ihrer Anwendung, können Sie nur überspringen selten den Rest der Schleife, und Sie wollen diese Seltenheit zu betonen, indem nicht den Rest der Schleife in eine umschließende ob Erklärung. In jedem Fall wird ein fortsetzen Aussage könnte genau die richtige Wahl sein.

Menü