Toon posts:

Do/While loop werkt niet

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn vraag

Hoi iedereen, gisteren heb ik geprobeerd een code te schrijven, maar ik krijg mijn code niet aan de praat. Ik ben nog maar een beginner hoor, dus de ervaren programmeur ziet het waarschijnlijk direct. De bedoeling is dat ik een code schrijf waarbij de gebruiker een waarde opgeeft tussen 10 en 20. Als de waarde niet correct is, vraag het systeem opnieuw een waarde op te geven. Mijn code is:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Scanner;
public class DoWhile {
public static void main(String[] args) {
Scanner Toetsenbord = new Scanner(System.in);
int Invoer;

do {
System.out.println("Noem een getal tussen 10 en 20.");
Invoer = Toetsenbord.nextInt();
} 

while ((Invoer < 10) && (Invoer > 20)); 
System.out.println("Yeah, het is je gelukt om een getal tusen 10 en 20 op te geven.");
}
}


Relevante software en hardware die ik gebruik
...

Wat ik al gevonden of geprobeerd heb
...

Beste antwoord (via Verwijderd op 26-03-2019 22:00)


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Het systeem ziet dat 5 kleiner is dan 10: "Invoer < 10" is true. Wat gebeurt er met de rest van de uitdrukking? Wat is de uitkomst van deze uitdrukking?
Java:
1
(Invoer < 10) && (Invoer > 20)

[ Voor 3% gewijzigd door GlowMouse op 26-03-2019 21:32 ]

Alle reacties


Acties:
  • +4 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Met [code]-tags kun je de code beter opmaken. Kun je eens uitleggen wat er op deze regel gebeurt als een gebruiker het getal 5 invult?
Java:
1
while ((Invoer < 10) && (Invoer > 20));

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
O ja bedankt voor de tip. De uitkomst van het antwoord 5 is:
code:
1
Yeah, het is je gelukt om een getal tusen 10 en 20 op te geven.

Eigenlijk is dit de uitkomst van elke invoer. Ook als ik 15 of 30 invoer is dit de uitkomst.

[ Voor 6% gewijzigd door Verwijderd op 26-03-2019 21:20 ]


Acties:
  • +2 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
En wat gebeurt er op die regel met while in termen van true of false?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat zou denk ik moeten afhangen van het antwoord van de gebruiker. Als de gebruiker 5 invult, zou ik willen dat het systeem ziet dat 5 kleiner is dan 10 en dat het antwoord dus true is en dat het systeem dus weer zou moeten doorgaan met do. Dan moet er dus opnieuw om een waarde worden gevraagd, net zo lang tot de gebruiker wel iets invult dat groter is dan 10 en kleiner is dan 20.

Acties:
  • Beste antwoord
  • +5 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Het systeem ziet dat 5 kleiner is dan 10: "Invoer < 10" is true. Wat gebeurt er met de rest van de uitdrukking? Wat is de uitkomst van deze uitdrukking?
Java:
1
(Invoer < 10) && (Invoer > 20)

[ Voor 3% gewijzigd door GlowMouse op 26-03-2019 21:32 ]


Acties:
  • +2 Henk 'm!

  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 15:02
Bij het merendeel van je code plaats ik vraagtekens. Je fout zit in de eerste instantie op regel 12. Je gaat de while loop in als invoer kleiner (<) is dan 10 EN (&&) invoer groter (>) is dan 20. Dat kan natuurlijk nooit waar zijn en dus gaat die de while loop nooit in. Alsof je alleen een achtbaan in mag als je kleiner bent dan 1.50 en groter dan 1.95. ;)

Verder is het verstandig om je probleem in delen op te splitsen. Vergeet die while-loop en ga terug naar stap 1. Vraag de gebruiker om een getal te raden. En laat hem iets intypen en check of dat getal groter of gelijk is aan 10 en kleiner of gelijk aan 20. Stap 2 is dan in een loop de gebruiker opnieuw laten vragen totdat invoer juist is.

[ Voor 13% gewijzigd door Marco1994 op 26-03-2019 21:38 . Reden: Typos op mobiel ]


Acties:
  • +1 Henk 'm!

  • Tokkes
  • Registratie: September 2011
  • Laatst online: 12-12-2022
https://docs.oracle.com/j...a/nutsandbolts/while.html - eerste Google resultaat bij zoeken "java do while loop"

Ook de plaats/volgorde waarin je de System.out.println statement maakt (die "yeah, het is je gelukt...") gaat ervoor zorgen dat dit altijd gaat worden uitgevoerd. Daarom krijg je de uitkomst bij elk getal dat je invoert.

Daarbij is ook, zoals Marco aangeeft, je conditie op lijn 12 onmogelijk ooit True te zijn in dit geval.

Samen zorgen deze 2 dingen ervoor dat je code niet werkt.

[ Voor 28% gewijzigd door Tokkes op 26-03-2019 21:44 ]

GoTBF3 Race topic! -- Battlelog - Battalion'44 Servers :10Slots Wartide 213.32.98.194:7777 - TDM = 213.32.98.194:7781


Acties:
  • +1 Henk 'm!

Verwijderd

Topicstarter
Ik snap het nog niet helemaal:
code:
1
 (Invoer < 10) && (Invoer > 20)

Bij de invoer van 5 is de uitkomst kleiner dan 10 en dus is de uitkomst true. O, maar het is natuurlijk niet groter dan 20 dus ik zou het eigenlijk zo moeten schrijven:
code:
1
 (Invoer < 10) || (Invoer > 20)

En nu doet hij het wel. Supertof. Enorm bedankt.

[ Voor 7% gewijzigd door Verwijderd op 26-03-2019 22:00 ]


Acties:
  • +1 Henk 'm!

  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 15:02
Lezen is lastig.

[ Voor 96% gewijzigd door Marco1994 op 26-03-2019 22:44 ]


Acties:
  • +1 Henk 'm!

Verwijderd

Topicstarter
Ehhhhmmmm.... okay jah, 8) 8). Supertof dat ik zo snel een antwoord had op mijn vraag. Had ik niet verwacht.

[ Voor 56% gewijzigd door Verwijderd op 26-03-2019 22:56 ]

Pagina: 1