Springen naar inhoud

[java] probleem met input


  • Log in om te kunnen reageren

#1

rvdp

    rvdp


  • >25 berichten
  • 43 berichten
  • Gebruiker

Geplaatst op 14 augustus 2007 - 09: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:

[codebox]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");
}
}
}[/codebox]

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:
[codebox]System.out.println("Geef j in voor een nieuwe cirkel: ");
keuze=inp.readChar();inp.readLine();[/codebox]

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...

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 15 augustus 2007 - 17:58

Ik zie het zo dadelijk niet, bijkomend als ik alles copy paste in bv kladblok dan valt de volledige opmaak weg?
Mss te veel of te weinig { alhoewel ik dit niet vermoedt indien het wel werkt zonder die invoer.

#3

Nvt

    Nvt


  • >25 berichten
  • 99 berichten
  • Ervaren gebruiker

Geplaatst op 16 augustus 2007 - 08:32

Ik zie het zo dadelijk niet, bijkomend als ik alles copy paste in bv kladblok dan valt de volledige opmaak weg?
Mss te veel of te weinig { alhoewel ik dit niet vermoedt indien het wel werkt zonder die invoer.


Moet je ff op de quote knop duwen en van daaruit de code copy en pasten :D

#4

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 16 augustus 2007 - 20:12

Welke compiler gebruik je? eclipse geeft vrijwel onmiddellijk aan dat hij Input niet kan initiŽren onderlijnd het in het rood zodat je dadelijk ziet dat het fout is, zonder te moeten wachten op de compiler fout.

Deze fout omwille van: http://java.syntaxer...te_the_type_Foo probleem is dus dat je met een abstracte class een object wil generen en dat lukt niet omdat zo'n abstracte class enkel een soort mal is, een definitie die verder geÔmplementeerd moet worden door andere subclasse waarvan je dan wel een object kunt genereren.

Dus ik zou zeggen moet je die class Input gebruiken?==>> zo ja dan moet je een subclass zoeken zoals in het voorbeeld.
Zo nee dan zou ik gewoon een eigen andere class maken om de input af te handelen.
Iets in de trend van System.in.ReadChar en dan nagaan wat de unicode is van het ingegeven teken, om te weten wat het was en om dan gepast te reageren.
Die system.in.ReadChar werkt enkel in een console omgeving dus aan te passen als je niet met een console werkt naar iets gelijkaardigs.

Heb je eerst leren programmeren in c++? Groeten.

#5

rvdp

    rvdp


  • >25 berichten
  • 43 berichten
  • Gebruiker

Geplaatst op 17 augustus 2007 - 10:44

De Inputklasse is door mijn leraar ter beschikking gesteld in de vorm van een voorgemaakt bestand, dat ik dan vervolgens ingevoerd heb in JCreator, dus wss is het normaal dat jij hierbij een foutmelding krijgt, bij mij is dat uiteraard niet het geval en ook niet de oorzaak van het probleem denk ik.

Verder geen enkele ervaring met programmeren...

Veranderd door rvdp, 17 augustus 2007 - 10:45


#6

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 17 augustus 2007 - 11:08

Print de variabele 'keuze' elke keer als je hem gezet hebt (door een nieuwe waarde in te lezen). Dat zie je in ieder geval wat er gebeurt en is het makkelijker om te debuggen (je zou natuurlijk ook met een debugger stap voor stap door je programma kunnen lopen...).

#7

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 17 augustus 2007 - 12:59

De Inputklasse is door mijn leraar ter beschikking gesteld in de vorm van een voorgemaakt bestand, dat ik dan vervolgens ingevoerd heb in JCreator, dus wss is het normaal dat jij hierbij een foutmelding krijgt, bij mij is dat uiteraard niet het geval en ook niet de oorzaak van het probleem denk ik.

Verder geen enkele ervaring met programmeren...


Ja okť lijkt me logisch dat, dat hier dan een fout geef alhoewel ik dacht dat het een standaard class is. deze: com.sun.corba.se.spi.orbutil.fsm.Input

Maar goed de fout zit hem waarschijnelijk in die input en daar kan ik u niet mee helpen, zeker niet als ik dat bestand niet heb.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures