For- en while-lussen in Java. Cycli

Een cyclus is een fragment van een programma dat zich vele malen herhaalt.

Er zijn twee soorten lussen in Java: het type "while" en het type "n-time".

Het eerste type ‘terwijl’ is bedoeld om een ​​actie te herhalen zolang aan een bepaalde voorwaarde wordt voldaan. Voorbeeld: verhoog een getal met 5 totdat het drie cijfers bereikt.

Het tweede type “n-time” is bedoeld om sommige acties een vooraf bepaald aantal keren te herhalen. Voorbeeld: vermenigvuldig een getal 4 keer met zichzelf.

While-lus (while en do...while-instructies)

De while-instructie wordt herhaald gespecificeerde acties zolang de parameter waar is.

Een dergelijke lus wordt bijvoorbeeld 4 keer uitgevoerd en "1 2 3 4" wordt op het scherm weergegeven:

Int ik = 1; terwijl (ik< 5) { System.out.print(i + " "); i++; }

Zo'n lus wordt niet één keer uitgevoerd en er verschijnt niets op het scherm:

Int ik = 1; terwijl (ik< 0) { System.out.print(i + " "); i++; }

Deze lus loopt eindeloos door en op het scherm verschijnt “1 2 3 4 5 6 7...”:

Int ik = 1; while (waar) ( System.out.print(i + " "); i++; )

De voorwaarde die bepaalt of de lus opnieuw wordt herhaald, wordt vóór elke stap van de lus gecontroleerd, inclusief de allereerste. Ze zeggen wat er aan de hand is vooraf controleren voorwaarden.

Er is een cyclus zoals “doei” met controle achteraf voorwaarden. Om het te schrijven wordt een constructie van do...while-instructies gebruikt.

Deze lus wordt 4 keer uitgevoerd en “2 3 4 5” wordt op het scherm weergegeven:

< 5);

Deze lus wordt 1 keer uitgevoerd en “2” wordt op het scherm weergegeven:

Int ik = 1; do ( i++; System.out.print(i + " "); ) while (i< 0);

De hoofdtekst van de do...while-lus wordt uitgevoerd volgens ten minste eenmaal. Deze operator is handig om te gebruiken wanneer een actie in het programma minstens één keer moet worden uitgevoerd, maar onder bepaalde omstandigheden vele malen moet worden herhaald.

Uitchecken volgende programma(ze raadt een willekeurig geheel getal uit een segment en vraagt ​​de gebruiker om het te raden, door opties in te voeren vanaf het toetsenbord, totdat de gebruiker het getal raadt, het programma zal hem dit vragen en hem vertellen of het geraden getal meer of minder is dan wat het getal is gebruiker ingevoerd):

Importeer java.util.Scanner; public class Main ( public static void main(String args) ( // prog - een getal gemaakt door het programma // user - een getal ingevoerd door de gebruiker int prog, user; // Genereer een willekeurig geheel getal van 1 tot 10 prog = (int)(Math. random() * 10) + 1; System.out.println("Ik heb een getal van 1 tot 10 geraden, raad het." System.out.print("Voer uw nummer in: ") ; System.in); // Controleer of er een geheel getal in de invoerstroom zit if(input.hasNextInt()) ( do ( // Lees een geheel getal uit de invoerstroom user = input.nextInt(); if(user = = prog) ( System.out.println("Je raadt het al!"); ) else ( // Controleer of het nummer in het segment is opgenomen if (gebruiker > 0 && gebruiker<= 10) { System.out.print("Вы не угадали! "); // Если число загаданное программой меньше... if(prog < user) { System.out.println("Моё число меньше."); } else { System.out.println("Моё число больше."); } } else { System.out.println("Ваше число вообще не из нужного отрезка!"); } } } while(user != prog); } else { System.out.println("Ошибка. Вы не ввели целое число!"); } System.out.println("До свиданья!"); } }

Breng de volgende wijzigingen aan in het programma:

    Het programma moet een getal bedenken dat niet uit het segment komt, maar uit een geheel getal uit het segment uit [−10;10], met uitzondering van nul. Probeer er tegelijkertijd voor te zorgen dat de verdeling van de door het programma gegenereerde willekeurige getallen uniform is (d.w.z. als er een nul terechtkomt, kan deze niet eenvoudigweg worden vervangen door een ander getal, bijvoorbeeld 1, omdat dan 1 zal vallen met tweemaal de waarschijnlijkheid dan de restgetallen).

    Het programma moet de gebruiker waarschuwen dat hij een fout heeft gemaakt in het bord als het programma een positief getal heeft geraden en de gebruiker een negatief getal heeft ingevoerd. En omgekeerd.

N-tijdlus (voor statement)

De for-instructie bevat drie parameters. De eerste wordt initialisatie genoemd, de tweede wordt herhalingsvoorwaarde genoemd en de derde wordt iteratie genoemd.

For (initialisatie; voorwaarde; iteratie) ( // loop body, d.w.z. acties die cyclisch worden herhaald)

In de eerste parameter selecteert u gewoonlijk een variabele die wordt gebruikt om het aantal herhalingen van de lus te tellen. Het heet een teller. De teller krijgt een initiële waarde (ze geven aan vanaf welke waarde deze zal veranderen).

De tweede parameter geeft een beperking van de teller aan (geef aan tot welke waarde deze zal veranderen).

De derde parameter specificeert een expressie die de teller na elke lusstap verandert. Meestal is dit een verhoging of verlaging, maar u kunt elke uitdrukking gebruiken waarbij aan de teller een nieuwe waarde wordt toegewezen.

Vóór de eerste stap van de lus wordt aan de teller een initiële waarde toegewezen (initialisatie wordt uitgevoerd). Dit gebeurt slechts één keer.

Vóór elke stap van de lus (maar na initialisatie) wordt de herhalingsvoorwaarde gecontroleerd als deze waar is, waarna het lichaam van de lus opnieuw wordt uitgevoerd; Tegelijkertijd wordt het lichaam van de lus mogelijk niet één keer uitgevoerd als de voorwaarde op het moment van de eerste controle onwaar is.

Na het voltooien van elke stap van de lus en vóór het starten van de volgende (en dus voordat de herhalingsvoorwaarde wordt gecontroleerd), wordt een iteratie uitgevoerd.

Het volgende programma geeft cijfers van 1 tot 100 weer:

Voor (int i = 1; i<= 100; i++) { System.out.print(i + " "); }

Het volgende programma geeft getallen van 10 tot −10 weer:

For (int s = 10; s > -11; s--) ( Systeem.uit.print(s + " "); )

Het gepresenteerde programma geeft de oneven getallen van 1 tot 33 weer:

Voor (int i = 1; i<= 33; i = i + 2) { System.out.print(i + " "); }

Het gepresenteerde programma berekent de som van de elementen van een fragment van de reeks 2, 4, 6, 8,... 98, 100. Dus:

Int som = 0; // We verzamelen hier het resultaat voor (int j = 2; j

Het gepresenteerde programma zal een getal uit een variabele verhogen A naar natuurlijke graad van variabel N:

Dubbel a = 2; intn = 10; dubbele resolutie = 1; // We verzamelen hier het resultaat voor (int i = 1; i<= n; i++) { res = res * a; } System.out.println(res);

Het gepresenteerde programma zal de eerste 10 elementen van de reeks 2n+2 weergeven, waarbij n=1, 2, 3…:

Voor (int i = 1; i< 11; i++) { System.out.print(2*i + 2 + " "); }

Het gepresenteerde programma zal de eerste 10 elementen van de reeks 2a n−1 +3 weergeven, waarbij a 1 =3:

Int a = 3; voor (i=1; ik<=10;i++) { System.out.print(a + " "); a = 2*a + 3; }

In één cyclus kunt u meerdere tellers tegelijk instellen. In dit geval worden verschillende uitdrukkingen in iteratie en initialisatie gescheiden door komma's. Er kan slechts één herhalingsvoorwaarde worden opgegeven, maar het kan een expressie zijn die meerdere tellers tegelijk bevat.

Het gepresenteerde programma zal de eerste 10 elementen van de reeks 2a n−1 -2 weergeven, waarbij a 1 =3:

Want (int a=3, i=1; i<=10; a=2*a-2, i++) { System.out.print(a + " "); }

Het gepresenteerde programma zal de volgende reeks “0 -1 -4 -9 -16 -25” weergeven:

Voor (int a=0, b=0; a-b<=10; a++, b--) { System.out.print(a*b + " "); }

Een lus vroegtijdig beëindigen (break-instructie)

Zowel de lus van het “while”-type als de lus van het “n-time”-type kunnen vroegtijdig worden beëindigd als u de operator in de lustekst belt pauze. In dit geval wordt de lus onmiddellijk afgesloten; zelfs de huidige stap wordt niet voltooid (dat wil zeggen: als er na break nog andere instructies waren, worden deze niet uitgevoerd).

Als resultaat van het volgende voorbeeld worden alleen de cijfers “1 2 3 4 End” op het scherm weergegeven:

Voor (int a=1; a

Wanneer het programma de lus voor de vijfde keer uitvoert (een lus binnengaat met een teller gelijk aan 5), wordt de voorwaarde waaronder de break-instructie wordt uitgevoerd onmiddellijk gecontroleerd en waar bevonden.

Het resterende deel van de lusbody (uitvoer naar het scherm) wordt niet geproduceerd: het programma gaat onmiddellijk verder met het uitvoeren van de bewerkingen die na de lus en daarna zijn gespecificeerd.

Ints = 100; while (true) ( ​​System.out.print(s + " "); s = s / 2; if(s == 0) ( break; ) )

Het is zinvol om de break-operator alleen aan te roepen als er zich een bepaalde situatie voordoet, anders wordt de lus bij de allereerste stap eerder dan gepland voltooid.

Int een; for (a=25; a>0; a--) ( break; System.out.print(a + " "); ) System.out.print("a=" + a);

In het bovenstaande voorbeeld zal uitvoer naar het scherm in een lus niet eens voorkomen, zelfs niet wanneer de variabele A wordt na de lus op het scherm weergegeven, het blijkt dat de waarde ervan nooit is veranderd, d.w.z. "a=25" wordt weergegeven (en niets meer).

Merk ook op dat de variabele werd gedeclareerd voordat de lus begon. Wanneer een variabele wordt gedeclareerd in de parameters van een lus, blijkt deze daarbuiten ontoegankelijk te zijn, maar in dit geval was er iets anders nodig: uitzoeken welke waarde de teller zal hebben nadat de lus is beëindigd.

Taken

    Maak een programma dat alle viercijferige getallen in de reeks 1000 1003 1006 1009 1012 1015… weergeeft.

    Schrijf een programma dat de eerste 55 elementen van de reeks 1 3 5 7 9 11 13 15 17 … weergeeft.

    Schrijf een programma dat alle niet-negatieve elementen van de reeks 90 85 80 75 70 65 60… weergeeft.

    Schrijf een programma dat de eerste 20 elementen van de reeks 2 4 8 16 32 64 128 … weergeeft.

    Geef alle termen van de reeks 2a n-1 -1 weer, waarbij a 1 =2, die kleiner zijn dan 10000.

    Geef alle tweecijferige termen van de reeks 2a n-1 +200 weer, waarbij a 1 = -166.

    Maak een programma dat de faculteit berekent van een natuurlijk getal n dat de gebruiker via het toetsenbord invoert.

    Geef alle positieve delers van een natuurlijk getal weer, ingevoerd door de gebruiker via het toetsenbord.

    Controleer of het natuurlijke getal dat de gebruiker via het toetsenbord invoert, een priemgetal is. Probeer geen onnodige acties uit te voeren (nadat u bijvoorbeeld ten minste één niet-triviale deler hebt gevonden, is het al duidelijk dat het getal samengesteld is en hoeft u niet verder te controleren). Merk ook op dat de kleinste deler van een natuurlijk getal n, als deze al bestaat, zich in het segment moet bevinden.

    Schrijf een programma dat de eerste 12 elementen van de reeks 2a n-2 -2 weergeeft, waarbij a 1 =3 en a 2 =2.

    Geef de eerste 11 termen van de Fibonacci-reeks weer. We herinneren je eraan dat de eerste en tweede term van de reeks gelijk zijn aan één, en dat elke volgende de som is van de twee voorgaande.

    Voor een natuurlijk getal dat door de gebruiker via het toetsenbord wordt ingevoerd, berekent u de som van alle cijfers (het is niet van tevoren bekend hoeveel cijfers het getal zal bevatten).

    In stad N wordt met de tram gereisd met papieren scheurkaartjes. Elke week bestelt de tramremise bij de plaatselijke drukkerij een rol kaartjes met de nummers 000001 t/m 999999. Een kaartje wordt als “geluk” beschouwd als de som van de eerste drie cijfers van het getal gelijk is aan de som van de laatste drie cijfers, zoals bijvoorbeeld op kaartjes met nummer 003102 of 567576. De tramremise heeft besloten om de winnaar van elk gelukskaartje een souvenir te geven en vraagt ​​zich nu af hoeveel souvenirs er nodig zullen zijn. Tel met behulp van het programma hoeveel gelukstickets er in één rol zitten?

    In stad N bevindt zich een groot magazijn met 50.000 verschillende planken. Voor het gemak van de werknemers besloot het magazijnmanagement voor elke plank een plaat met een nummer van 00001 tot 50000 te bestellen bij een plaatselijke drukkerij, maar toen de platen werden gedrukt, bleek dat de drukpers, als gevolg van een storing, heeft het nummer 2 niet afgedrukt, dus alle platen waarvan de nummers een of meer twee bevatten (bijvoorbeeld 00002 of 20202) - u moet het opnieuw typen. Schrijf een programma dat telt hoeveel van deze foutieve platen zich in de defecte batch bevonden.

    De elektronische klok geeft de tijd weer in het formaat van 00:00 tot 23:59. Tel hoe vaak per dag het voorkomt dat links van de dikke darm een ​​symmetrische combinatie wordt weergegeven in plaats van die rechts van de dikke darm (bijvoorbeeld 02:20, 11:11 of 15:51).

    In het Amerikaanse leger wordt het getal 13 als ongelukkig beschouwd, en in het Japans - 4. Vóór internationale oefeningen besloot het hoofdkwartier van het Russische leger om aantallen militair materieel met de getallen 4 of 13 uit te sluiten (bijvoorbeeld 40123, 13313, 12345 of 13040) om buitenlandse collega’s niet te verwarren. Als het leger over 100.000 eenheden militair materieel beschikt en elk gevechtsvoertuig een nummer heeft van 00001 tot en met 99999, hoeveel nummers moeten er dan worden uitgesloten?

2010, Alexey Nikolajevitsj Kostin. Afdeling TIDM, Faculteit Wiskunde, Pedagogische Staatsuniversiteit van Moskou.

Wanneer dezelfde actie meerdere keren moet worden uitgevoerd of totdat aan een bepaalde voorwaarde is voldaan, komen loops ons te hulp.

Er zijn verschillende manieren om lussen in Java te maken. Zoals je misschien al geraden hebt, zullen we ze allemaal overwegen.

De eerste manier om een ​​lus te declareren is door het volgende construct te gebruiken: for (startvoorwaarde van lus; eindvoorwaarde; stap waarop de lus zal gaan) (lichaam van lus)

Laten we meteen naar de voorbeelden gaan. Laten we zeggen dat we de taak hebben om de zinsnede “Hallo wereld” 10 keer weer te geven. Als je geen loops gebruikt, kun je gewoon System.out.println("Hallo wereld"); tien keer en we zullen het probleem oplossen. Laten we hiervoor lussen gebruiken. Maak een nieuwe klasse en noem deze bijvoorbeeld CuclesInJava. Verklaar nu de lusvoorwaarde (laat deze 0 zijn), de eindvoorwaarde - 10 en de stap. We gaan in stappen van één. Plaats in de hoofdtekst van de lus de regel System.out.println("Hallo wereld");

Hier is een codevoorbeeld:

Het resultaat van deze code is 10 regels op rij met de zin "Hallo wereld!"

Hoe zit het met het schrijven van iets complexer. We hebben de basis al geleerd. Laten we ze gebruiken.

Laten we een eenvoudige applicatie schrijven die elke keer dat een stap + een variabele gelijk is aan 5 een waarschuwingsregel weergeeft. Ik ben erg slecht in verbeelding))

Laten we eerst een code schrijven die een variabele die vanuit de console wordt ingevoerd als invoer accepteert. In het vorige artikel gaf ik een voorbeeld van deze code en we spraken af ​​dat ik dan zou uitleggen hoe het werkt en waar het vandaan komt. En nu zullen we het gewoon gebruiken:

Vervolgens moet je een lus schrijven die begint bij nul en tot tien telt (zoals in het vorige voorbeeld). In de body van de lus schrijven we een voorwaardelijke operator die controleert of deze variabele gelijk is aan 5 en zo ja, dan geven we de regel “OK” weer. Dit is wat ik heb:

    java.util.Scanner importeren;

    openbare klasse CuclesInJava(

    int variabele = scanner.nextInt(); //we zullen hier geleidelijk aan komen en dan zal duidelijk worden hoe het werkt

    voor (int i = 1; ik< 10 ; i++ ) {

    int nieuweVariabele = i + variabele;

    if (nieuweVariabele==5) (

Het bleek niet heel ingewikkeld. Met dit voorbeeld wilde ik laten zien hoe je lussen met vertakkingen in combinatie kunt gebruiken.

De volgende manier om lussen te declareren is met de constructie: while(voorwaarde is waar)(uit te voeren codeblok). Dit ontwerp heeft een andere vorm:

do(uit te voeren codeblok)while(voorwaarde is waar). Het verschil tussen de eerste en de tweede is dat de tweede één lus uitvoert, ongeacht of de voorwaarde waar is of niet. Je kunt zelf bedenken: eerst voeren we de code uit, en dan controleren we de voorwaarde. En zelfs als de voorwaarde niet waar is, zal de code nog steeds één keer worden uitgevoerd, op het moment dat bij het eerste type constructie de voorwaarde voor het eerst wordt gecontroleerd, en totdat deze waar is, zal de code niet worden uitgevoerd.

De code moet intuïtief zijn. Ik denk dat het de moeite waard is om te vermelden dat je dat met de while- en do-while-constructies kunt doen "lus" programma als de voorwaarde voor het verlaten van de lus niet of onjuist is opgegeven. Kijk naar het bovenstaande voorbeeld en bedenk wat er zou zijn gebeurd als ik niet i—, maar i++ had geschreven; of in plaats van i>0, i<0. Моя программа никогда не вышла бы из цикла и продолжала бы выводить строку Hello world! до тех пор, пока не завис компьютер. Поэтому, будьте очень осторожными с циклами и всегда следите, чтобы из них Ваша программа могла выйти или закончить работу.

Nou, een voorbeeld met do-while:

Hierover kunnen we, denk ik, het artikel afmaken lussen in Java. Zoals je kunt zien, zijn de ontwerpen niet erg complex, maar wel erg nuttig. Ze zullen vooral nuttig zijn als we kennis maken met arrays en strings.

Zoals vrijwel elke programmeertaal beschikt Java over tools die zijn ontworpen om een ​​specifiek stukje code steeds opnieuw te herhalen. Dergelijke hulpmiddelen worden meestal cycli genoemd. In Java worden lussen weergegeven door uitspraken zoals while en for en hun variaties. Lussen worden doorgaans gebruikt om een- en meerdimensionale arrays en datastructuren te doorkruisen om specifieke elementen te vinden en daarop verdere bewerkingen uit te voeren. Maar dit is verre van de enige manier om een ​​tool als de Java-loop te gebruiken. Er worden gebruiksvoorbeelden verstrekt wanneer we deze beoordelen.

Java while-lus: beschrijving en voorbeelden

While is de fundamentele lusoperator in Java. Het codefragment dat in de hoofdtekst is ingesloten, wordt herhaald totdat de voorwaarde van de tussen haakjes geplaatste expressie voldoet aan de werkelijke waarde. De while-operator heeft over het algemeen de volgende vorm: while (condition)(//loop body). Zodra de Booleaanse voorwaarde niet langer waar is, stopt de uitvoering van de code in de lusbody. De besturing wordt overgedragen naar de lijn die er direct achteraan komt. Als de hoofdtekst van de lus slechts één statement bevat, kunt u de accolades weglaten. Onder programmeurs wordt het echter als een goede vorm beschouwd om ze altijd in te stellen. Laten we eens kijken naar een voorbeeld:

Openbare les terwijlDemo (

System.out.println (“Getallen van 1 tot 10 afdrukken”);

terwijl (tel<=10) {

System.out.println(telling);

Het aanvankelijk gedeclareerde aantal variabelen heeft de waarde 1. Vervolgens zien we een logische expressie, die tussen haakjes staat achter de naam van de operator. Als de waarde waar is, retourneert de lus waar totdat de waarde van de telvariabele gelijk is aan of kleiner is dan 10. Bij elke doorgang of iteratie wordt de waarde van de variabele met 1 verhoogd en afgedrukt op het consolescherm. Toen de waarde van de variabele de waarde 11 bereikte, werd de lus beëindigd. Als de waarde van het aantal variabelen aanvankelijk gelijk was aan 11, zou de lusvoorwaarde onwaar zijn. Het programma wilde het lichaam niet eens binnendringen. Opgemerkt moet worden dat u met de Java-syntaxis een While-instructie zonder hoofdtekst kunt gebruiken. Beschouw het volgende voorbeeld. Stel dat u twee variabelen heeft: i=100 en j=200. We worden geconfronteerd met de taak om hun rekenkundig gemiddelde programmatisch te berekenen; voor dit doel kunnen we een “holle” while-lus gebruiken:

Terwijl(++i<- — j);

Als gevolg van deze bewerking zal de waarde van elk van deze twee variabelen gelijk zijn aan het gemiddelde van hun initiële waarden. Zoals je in dit voorbeeld kunt zien, werkte de lus prima zonder body en voerde alle noodzakelijke acties uit in de voorwaardelijke expressie.

do-while-lus

Als in de voorgaande voorbeelden de voorwaarde-expressie false retourneerde, negeerde het programma de hoofdtekst van de lus en ging verder met de uitvoering. Maar soms doen zich situaties voor waarin de code in de hoofdtekst van de lus minstens één keer moet worden uitgevoerd, ongeacht de waarheid van de voorwaarde-expressie. Met andere woorden: soms komt het voor dat u de waarheid van een voorwaardelijke uitdrukking aan het begin moet controleren, in plaats van aan het einde van de lus. Een variatie op de while-lus, met de codenaam do-while, kan vergelijkbare functionaliteit bieden. Het heeft de volgende vorm: do (//loop body) while (voorwaarde). Zoals u kunt zien, wordt hier eerst de hoofdtekst van de lus uitgevoerd en vervolgens wordt de waarheid van de voorwaarde gecontroleerd. Dit gebeurt bij elke iteratie. De bovenstaande code werkt ongeveer hetzelfde als in het geval van while. Maar als we het aantal op 11 zetten, zou de hoofdtekst van de lus nog steeds één keer worden uitgevoerd voordat de instructie de waarheid van de uitdrukking kon testen.

Voorbeelden en beschrijving: for – Java-lus

De for-lus is een universele en efficiënte taalvorm in de Java-taal. Tot versie 5 van de JavaSDK was er slechts één traditionele vorm van de for-instructie. Daarna verscheen er een nieuwe - foreach. In dit gedeelte wordt de nadruk gelegd op de traditionele vorm van de operator. De for-lus in Java ziet er als volgt uit:

voor (inti=0; i<10; i++) {//Loop statements to be executed

Voordat de besturing wordt overgedragen naar de code aan het einde van de lus, wordt de variabele i geïnitialiseerd, die als teller fungeert. Vervolgens moet u de voorwaardelijke expressie controleren waarin de teller werd vergeleken met een specifieke waarde. Als het programma true retourneert, wordt de body van de lus uitgevoerd. In dit geval verandert de tellerwaarde met een vooraf bepaalde stap en wordt de voorwaardelijke uitdrukking opnieuw gecontroleerd. Dit gebeurt totdat de voorwaarde onwaar wordt. Voor een beter begrip volgt hier een voorbeeld van hoe een Java for-lus werkt.

openbare klasse ForLoops (

public static void main (String-args) (

beoogde_waarde =11;

voor )