[java] probleem met input
Geplaatst: di 14 aug 2007, 10:51
Eerst even kort het programma schetsen. Zolang de letter j ingegeven wordt, worden er cirkels gecreeërd en via een opgegeven (verplicht positieve) straal wordt met een statische methode ook de oppervlakte berekend. Wanneer een ander letter ingeveven wordt en de lus dus doorbroken is, verschijnt er een menu waarin men door middel van een cijfer 1, 2, 3 of 4 een aantal gegevens zoals het totaal aantal cirkels, aantal foute cirkels (met negatieve straal), grootste oppervlakte enz. Ik heb dit geprogrammeerd en de compiler geeft geen fouten. Ik stoot echter op een probleem. Eerst even de code geven:
Het invoeren van de eerste cirkel gaat goed. Maar wanneer er dan gevraagd wordt j te typen voor het ingeven van de tweede cirkel, en ik wel degelijk j typ, dan verschijnt onmiddellijk het menu, ipv de vraag naar de straal van de cirkel. Het gaat dus over deze 2 lijnen:
Wanneer ik nu zelf instel dat keuze='j', dus zonder invoer van de gebruiker zelf, dan werkt alles perfect. Volgens mij wordt dus op een of andere manier de input verkeerd gelezen of geïnterpreteerd... maar ik vind de oplossing niet.
PS: Wss kunnen er wel heel wat zaken beter of korter geschreven worden, maar daar gaat het niet om. Het is nog maar mijn eerste jaar Java en als het programma werkt ben ik al tevreden...
Code: Selecteer alles
public class Examenoefening
{
public static double berekenOppervlakte(double straal)
{
double oppervlakte=straal*straal*Math.PI;
return oppervlakte;
}
public static void main(String[]args)
{
char keuze; double straal; double oppervlakte; int menu; int aantalGoed=0; int aantalFout=0; double grootsteOpp=0;
Input inp=new Input();
System.out.println("Geef de letter j in voor nieuwe cirkel: ");
keuze=inp.readChar();
inp.readLine();
while(keuze=='j')
{
System.out.println("Geef de straal in: ");
straal=inp.readDouble();
if (straal>=0)
{
aantalGoed++;
System.out.println("De straal is "+straal+ "cm.");
System.out.println("De oppervlakte is "+berekenOppervlakte(straal)+ "cm.");
oppervlakte=berekenOppervlakte(straal);
if (oppervlakte>grootsteOpp) grootsteOpp=oppervlakte;
}
else { aantalFout++; System.out.println("Foutieve straal.");}
System.out.println("Geef j in voor een nieuwe cirkel: ");
keuze=inp.readChar();inp.readLine();
}
if(keuze!='j')
{
System.out.println("Menu:");
System.out.println("Typ 1 voor aantal goede stralen:");
System.out.println("Typ 2 voor aantal foutieve stralen:");
System.out.println("Typ 3 voor totaal aantal stralen:");
System.out.println("Typ 4 voor grootste oppervlakte:");
menu=inp.readInt();
while (menu<=4 && menu>=1)
{
switch(menu)
{
case 1: System.out.println("Aantal goede stralen: "+aantalGoed);break;
case 2: System.out.println("Aantal foutieve stralen: "+aantalFout);break;
case 3: System.out.println("Totaal aantal stralen: "+(aantalGoed+aantalFout));break;
case 4: System.out.println("Grootste oppervlakte: "+grootsteOpp);break;
default: System.out.println("Ongeldig.");
}
System.out.println("Menu:");
System.out.println("Typ 1 voor aantal goede stralen:");
System.out.println("Typ 2 voor aantal foutieve stralen:");
System.out.println("Typ 3 voor totaal aantal stralen:");
System.out.println("Typ 4 voor grootste oppervlakte:");
menu=inp.readInt();
}
System.out.println("Einde");
}
}
}
Code: Selecteer alles
System.out.println("Geef j in voor een nieuwe cirkel: ");
keuze=inp.readChar();inp.readLine();
PS: Wss kunnen er wel heel wat zaken beter of korter geschreven worden, maar daar gaat het niet om. Het is nog maar mijn eerste jaar Java en als het programma werkt ben ik al tevreden...