Frage von Nutzer19999, 50

ich hab hiere in problem(so orginel) bei diesenm skript wieder holt sich die for strucktur nur einmal warum egal wie viel ich bei der frage nach der jury einge?

import static javax.swing.JOptionPane.*;

public class Turmsprung

{

public static void main()

{

    String eingabe;

    int schwierigkeit=0,jury=0,punkte=0,gesamtpunkte=0,Min=10,Max=0,name; 

    while(schwierigkeit<1 || schwierigkeit>5)

    {

        eingabe = showInputDialog(null,"Wie schwer war der Sprung?","Schwierigkeit?",1);

        schwierigkeit = Integer.parseInt(eingabe);

    }

    while(jury<3)

    {

        eingabe = showInputDialog(null,"Wie viele leute sitzen in der Jury?","Jury?",1);

        jury = Integer.parseInt(eingabe);

    }

    for(int i=0;i<jury;i++)

    {

        while(punkte<1 || punkte>10)

        {

            name = i+1;

            eingabe = showInputDialog(null,"Wie gut war der Sprung Jurymitglied "+name+" ?","Jurymitglied "+name+" ?",1);

            punkte = Integer.parseInt(eingabe);

        }

        if(punkte>Max)

        {

            Max=punkte;

        }

        if(punkte<Min)

        {

            Min=punkte;

        }

        gesamtpunkte = gesamtpunkte+punkte;

    }

    gesamtpunkte = gesamtpunkte-Min-Max;

    jury = jury-2;

    gesamtpunkte = gesamtpunkte/jury;

    gesamtpunkte = gesamtpunkte*3;

    gesamtpunkte = gesamtpunkte*schwierigkeit;

    showMessageDialog(null,"Du hast "+gesamtpunkte+" Punkte",gesamtpunkte+" Punkte",1);

}

}

Antwort
von CarolaA, 16

Deine Variable "jury" hat inital den Wert "0".

Dann kommst du in die "while"-Schleife und gibt den Wert  "3" ein, somit ist der Wert nicht mehr kleiner 3 und springst aus der "while"-Schleife heraus.

Und dann ist die Frage, was du bei den Punkten eingibst, denn hier hast du eine "while"-Schleife drin, die ich nicht ganz verstehe.

Könntest du mir deine 3te "while"-Schleife erklären??

Liebe Grüße, CarolaA.

Kommentar von Nutzer19999 ,

ich sage da eig nur mit diesen while schleifen immer nur das nicht werte rauskommen soll die ich nich brauche also punkte unter eins und über 10 können so nicht vergeben werden

Antwort
von coding24, 37

Welchen Wert hat Jury vor der Stelle

 for(int i=0;i<jury;i++)

?

Kommentar von Nutzer19999 ,

der wir darüber abgefragt ich hab 3 eingeben

Kommentar von coding24 ,

Die Frage ist nicht, was du eingegeben hast - sondern welchen Wert die Variable an dieser Stelle besitzt. Darum solltest du dir anschauen, welchen Wert sie hat ...

Kommentar von Nutzer19999 ,

ich hab ihr den wert 3 gegeben also 3 oder nicht? 

Kommentar von TUrabbIT ,

Das ist ja die Frage. Setz eine Kontrolle an der Stelle ein, also z.B.:
System.out.println("Jury: " + jury);

Es ist wichtig um zu wissen wo das Problem liegen kannn.

Kommentar von TUrabbIT ,

Also an in der Zeile vor der Schleife und in der Schleife auch nochmal und da auch den Wert von i

Kommentar von Nutzer19999 ,

und ich hab auch mal das jury direkt gegen 3 ausgetauscht lief trotzdem nur einmal durch

Kommentar von coding24 ,

Dann solltest du schritt für Schritt genauso innerhalb der for-schleife vorgehen und prüfen, welche Werte die einzelnen Variablen haben ...

Entweder mit einem println, mit einem Dialog-Popup oder mit dem Debugger. Dann siehst du, an welchen Stellen sich Werte wie Verändern.

Lass dir nach

gesamtpunkte = gesamtpunkte+punkte;

einfach mal i und jury ausgeben.

Kommentar von Nutzer19999 ,

er wiederholt irgenwie die while und if strucktur nicht er hat jetzt dreimal das fenster geöffnet wo ich i und jury anzeigen lassen hab

Antwort
von TUrabbIT, 10

Ich schätze dein Problem ist nicht, das die for Schleife nur einmal ausgeführt wird (wird sie nicht) sondern das die while-Schleife für Punkte nur einmal ausgeführt wird.

Denn du hast vergessen, die Punkte nach dem ersten Durchlauf der for Schleife zu reseten.

Dadurch wird nur die erste Jury gefragt und der Rest entfällt

Expertenantwort
von KnusperPudding, Community-Experte für Java, 8

Sobald du vom ersten Jury-Mitglied die Punkte abfrägst, ist folgende Bedingung nicht mehr wahr:

while (punkte < 1 || punkte > 10) {

Reinitialisiere die Punkte einfach mit 0, nachdem du die Gesamtpunkte aufaddiert hast:

gesamtpunkte = gesamtpunkte + punkte;
punkte = 0;
Kommentar von Nutzer19999 ,

ahh ok danke

Antwort
von Schachpapa, 7

Du musst vor dem Eintritt in die Punkteabfrage die Punkte auf 0 zurücksetzen.

Wenn Jurymitglied 1 drei Punkte vergeben hat, werden 2 und 3 gar nicht gefragt, weil die while-schleife vorher auf punkte<1 || punkte > 10 prüft.

Hier böte sich eine fußgesteuerte do...while Schleife an.

Der Fehler war gut versteckt ;-)


Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten