Abbruchbedingung funktioniert nicht

Status
Nicht offen für weitere Antworten.

redfalcon

Mitglied
Hi,
ich habe die Aufgabe ein Programm zu entwerfen, welches nach Eingabe von Name, Personalnummer, Stundenlohn und Arbeitsstunden auswertet und ausgibt. Sobald als Personalnummer 0 eingegeben wird, soll die Eingabe von Daten abgebrochen werden und zur Auswertung/Ausgabe fortgeschritten werden. Der Code.
Code:
public class brutto {
public String[] persNr = new String[10];                //Array für Personalnummern
public String[] name = new String[10];                  //Array für die Namen 
public int[] stdlohn =new int[10];                          //Array für den Stundenlohn
public int[] arbstd =new int[10];                           //Array für die Arbeitstunden
public int[] brutto =new int[10];                           //Array für die Bruttosumme
public double summe;                                          //Lohnkosten insgesamt
public int pers=0;                                               //Hilfvariable für Personen
public double durchstd;                                       //Durchschnittliche Arbeitsstunden
public double durchlohn;                                      //Durchschnittlicher Lohn
public int p=0;                                                   //Hilfsvariable für Arrays

  public void eingabe() {
  while(pers<3){

    System.out.println("Geben sie die Personalnummer ein." );
	
		persNr[p]=StdIn.stringInput();
			if(persNr[p].equals("0")){
			this.verarbeitung();
			}
			
    else{
		System.out.println("Geben sie den Namen des Mitarbeiters ein." );
			name[p]=StdIn.stringInput();
		System.out.println("Geben sie die Arbeitsstunden des Mitarbeiters ein." );
			arbstd[p]=StdIn.intInput();
		System.out.println("Geben sie den Stundenlohn des Mitarbeiters ein." );
			stdlohn[p]=StdIn.intInput();
		brutto[p]=brutto[p]+(stdlohn[p]*arbstd[p]);
		p++;
		pers++;
    }
  }
  }

  public void verarbeitung() {
    if(pers==0)
      this.exit();
    else{
  
  for(int durch=0;durch<pers;durch++){
    durchstd=durchstd+arbstd[durch]/pers;
    durchlohn=durchlohn+stdlohn[durch]/pers;
  }
    }
    for(int durch=0;durch<pers;durch++){
      summe=summe+brutto[durch];
    }
  }



    public void ausgabe() {
      System.out.println("PersNr.\t Name\t Stunden\t Std. Lohn\t Brutto\t");
    for(int aus=0;aus<pers;aus++){
      System.out.println(persNr[aus]+"\t"+name[aus]+"\t"+arbstd[aus]+"\t"+stdlohn[aus]+"\t"+brutto[aus] );
    }
    System.out.println("Lohnsumme: "+summe);
    System.out.println("Durchscnittslohn: " +durchlohn );
    System.out.println("Durchschnittliche Arbeitsstunden: "+durchstd);
  }
    
    public void exit(){
      System.exit(1);
    }



  public static void main (String[]args) {
         brutto pro = new brutto();
         pro.eingabe();
         pro.verarbeitung();
         pro.ausgabe();
         pro.exit();

  }

}

Das Problem ist nun: Wenn ich eine 0 als Personalnummer eingeben, wird zwar die weitere Eingabe übersprungen, allerdings lande ich wieder in der while-Schleife drin, obwohl ich ja eigentlich ich verarbeitung() springe. Wo ist der Fehler?
 
B

Beni

Gast
In "verarbeitung" fragst du "pers==0" ab, aber du setzt ja "pers" niemals = 0, nachdem der Benutzer 0 eingegeben hat.
 

Kian

Aktives Mitglied
Sobald du "0" eingibst, wird nirgends der Wert von pers verändert, die while wird nur ausgeführt solange pers < 3 ist.
Ich würde das mit einem BOOL - Wert machen, aber es gibt sicher auch eine einfachere Lösung (es geht immer einfacher, meistens jedenfalls!). Das hier dürfte die WHILE mit Sicherheit stoppen:

Code:
public class brutto {
public String[] persNr = new String[10];                //Array für Personalnummern
public String[] name = new String[10];                  //Array für die Namen
public int[] stdlohn =new int[10];                          //Array für den Stundenlohn
public int[] arbstd =new int[10];                           //Array für die Arbeitstunden
public int[] brutto =new int[10];                           //Array für die Bruttosumme
public double summe;                                          //Lohnkosten insgesamt
public int pers=0;                                               //Hilfvariable für Personen
public double durchstd;                                       //Durchschnittliche Arbeitsstunden
public double durchlohn;                                      //Durchschnittlicher Lohn
public int p=0;                                                   //Hilfsvariable für Arrays
boolean run = true;     //!!! BOOL für WHILE !!!

  public void eingabe() {
  while(run == true){

    System.out.println("Geben sie die Personalnummer ein." );
   
      persNr[p]=StdIn.stringInput();
         if(persNr[p].equals("0")){
         run = false; // WHILE stoppen
         this.verarbeitung();
         }
         
    else{
      System.out.println("Geben sie den Namen des Mitarbeiters ein." );
         name[p]=StdIn.stringInput();
      System.out.println("Geben sie die Arbeitsstunden des Mitarbeiters ein." );
         arbstd[p]=StdIn.intInput();
      System.out.println("Geben sie den Stundenlohn des Mitarbeiters ein." );
         stdlohn[p]=StdIn.intInput();
      brutto[p]=brutto[p]+(stdlohn[p]*arbstd[p]);
      p++;
      pers++;
    }
  }
  }

  public void verarbeitung() {
    if(pers==0)
      this.exit();
    else{
 
  for(int durch=0;durch<pers;durch++){
    durchstd=durchstd+arbstd[durch]/pers;
    durchlohn=durchlohn+stdlohn[durch]/pers;
  }
    }
    for(int durch=0;durch<pers;durch++){
      summe=summe+brutto[durch];
    }
  }



    public void ausgabe() {
      System.out.println("PersNr.\t Name\t Stunden\t Std. Lohn\t Brutto\t");
    for(int aus=0;aus<pers;aus++){
      System.out.println(persNr[aus]+"\t"+name[aus]+"\t"+arbstd[aus]+"\t"+stdlohn[aus]+"\t"+brutto[aus] );
    }
    System.out.println("Lohnsumme: "+summe);
    System.out.println("Durchscnittslohn: " +durchlohn );
    System.out.println("Durchschnittliche Arbeitsstunden: "+durchstd);
  }
   
    public void exit(){
      System.exit(1);
    }



  public static void main (String[]args) {
         brutto pro = new brutto();
         pro.eingabe();
         pro.verarbeitung();
         pro.ausgabe();
         pro.exit();

  }

}

EDIT:
@Beni:
selbst wenn er pers auf "0" setzt, würde die while weiterlaufen, zudem würde es später in der Verarbeitung zu Fehlern kommen, wenn er zuvor schon Daten eingegeben hat -> siehe FOR - Schleifen!
 
B

Beni

Gast
Ne, der Code springt ja dann von verarbeitung zu exit zu System.exit?

Ok, ein bisschen *hust* unübersichtlich finde ich das ganze ja schon, und KIAN's Lösung hat ein gutes Stück Sicherheit mehr.

Ich frage mich, wieso springst du zuerst zu Verarbeitung, und nicht direkt zu exit?
 

redfalcon

Mitglied
@Kian: Dann hab ich aber das Problem, dass die While-Schleife theoretisch unendlich lang gehen kann (wenn man nicht abbricht). Es sollen aber maximal 10 Mitarbeiter eingetragen werden.
 

Kian

Aktives Mitglied
redfalcon hat gesagt.:
@Kian: Dann hab ich aber das Problem, dass die While-Schleife theoretisch unendlich lang gehen kann (wenn man nicht abbricht). Es sollen aber maximal 10 Mitarbeiter eingetragen werden.

Code:
while(run == true && p < 10)

oder pers anstatt p, je nachdem was bei dir die Mitarbeiter zählt.

Wenn run == false ist und wenn p >= 10 ist wird abgebrochen!
 

redfalcon

Mitglied
Oh, stimmt hätte ich auch selbst draufkommen können :autsch:. Auf jedenfall funzt das Programm jetzt, wie es soll. Danke für eure Hilfe!
 

redfalcon

Mitglied
Doch noch was. Wenn ich die Eingabe für nur eine Person mache und dann abbreche, sind die Durchschnittswerte (Gesamt, Lohn und Stunden) verdoppelt. Wenn ich aber zwei oder mehr eingebe ist die Summe wieder korrekt. Woran liegt das? Hier mein aktueller Code:
Code:
public class brutto {
public String[] persNr = new String[10];    //Array für Personalnummern
public String[] name = new String[10];      //Array für Namen
public int[] stdlohn =new int[10];          //Array für Stundenlohn
public int[] arbstd =new int[10];           //Array für Arbeitsstunden
public int[] brutto =new int[10];           //Array für Bruttolohnsumme
public double summe=0;                      //Gesamtlohnsumme
public int pers=0;                          //Anzahl Personen
public double durchstd=0;                   //Durchschnittliche Arbeitsstunden
public double durchlohn=0;                  //Durchschnittlicher Lohn
public int p=0;                             //Hilfsvariable für While-Schleife
boolean run = true;                         //Boolean zum beenden der While-Schleife

//Eingabe

 public void eingabe() {
  while(run == true && pers < 3) {
    System.out.println("Geben sie die Personalnummer ein." ); 
    persNr[p]=StdIn.stringInput();
    
      if(persNr[p].equals("0")){
        run = false; 
        this.verarbeitung(); 
      }
      
      else{
        System.out.println("Geben sie den Namen des Mitarbeiters ein." );
          name[p]=StdIn.stringInput();
        System.out.println("Geben sie die Arbeitsstunden des Mitarbeiters ein." );
          arbstd[p]=StdIn.intInput();
        System.out.println("Geben sie den Stundenlohn des Mitarbeiters ein." );
          stdlohn[p]=StdIn.intInput();
        brutto[p]=brutto[p]+(stdlohn[p]*arbstd[p]);
        p++;
        pers++;
        StdIn.cls();
      }
  }
 }
  
//Verarbeitung

  public void verarbeitung() {
      for(int durch=0;durch<pers;durch++){
        durchstd=durchstd+arbstd[durch];
        durchlohn=durchlohn+stdlohn[durch];
      }
    
      for(int durch=0;durch<pers;durch++){
        summe=summe+brutto[durch];
      }
      durchlohn=durchlohn/pers;
	  durchstd=durchstd/pers;
  }


//Ausgabe
  
    public void ausgabe() {
      System.out.println("PersNr.\t Name\t\t Stunden  Std.Lohn Brutto");
        for(int aus=0;aus<pers;aus++){
          System.out.println(persNr[aus]+"\t"+name[aus]+"\t "+arbstd[aus]+"\t  "+stdlohn[aus]+"\t   "+brutto[aus]+"\n" );
        }
        System.out.println("Lohnsumme: "+summe);
      System.out.println("Durchscnittslohn: " +durchlohn );
      System.out.println("Durchschnittliche Arbeitsstunden: "+durchstd);
  }
    
//Main
    
  public static void main (String[]args) {
         brutto pro = new brutto();
         pro.eingabe();
         pro.verarbeitung();
         pro.ausgabe();      

  }

}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
G Scanner und Abbruchbedingung/Pattern Allgemeine Java-Themen 2
Linad Tiefe der Rekursion als Abbruchbedingung Allgemeine Java-Themen 6
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
Lukas2904 Wie funktioniert ein KeyLogger? Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
I Wieso funktioniert das nich? Allgemeine Java-Themen 5
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
X JNA funktioniert nicht mehr Allgemeine Java-Themen 4
bueseb84 FolderWatcher mit WatchService funktioniert nur bedingt Allgemeine Java-Themen 5
Drachenbauer Division mit Int funktioniert nicht Allgemeine Java-Themen 3
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Tesseract-OCR 4.0 unter Linux funktioniert nicht Allgemeine Java-Themen 3
J Wie konkret funktioniert das Modulsystem unter Java 11? Allgemeine Java-Themen 4
J Neuronales Netz funktioniert mal und mal nicht. Allgemeine Java-Themen 3
T Umlaute in Eclipse einlesen funktioniert nicht Allgemeine Java-Themen 16
A Methodenaufruf funktioniert nicht richtig Allgemeine Java-Themen 5
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
J FTPSClient funktioniert nicht Allgemeine Java-Themen 4
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
M Operatoren Warum funktioniert diese überprüfung nicht? Allgemeine Java-Themen 7
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
E Open Declaration Funktioniert nicht Allgemeine Java-Themen 0
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
RalleYTN requires transitive funktioniert nicht? Allgemeine Java-Themen 7
R Bruteforce hashes mit multithreading. Funktioniert das so? Allgemeine Java-Themen 0
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
J Exclude funktioniert nicht Allgemeine Java-Themen 2
K .jar funktioniert nicht vollständig Allgemeine Java-Themen 1
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
O Fahrenheit/Celsius Converter funktioniert nicht Allgemeine Java-Themen 2
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
U PersistenceManager.createEntityManager funktioniert nicht Allgemeine Java-Themen 3
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
JG12111989 Auswertung von Fragebogen funktioniert nicht! Allgemeine Java-Themen 7
M Primzahlberechnung funktioniert nicht. Allgemeine Java-Themen 4
A JFreeChart funktioniert nicht :( Allgemeine Java-Themen 6
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
F Datei einlesen funktioniert nicht Allgemeine Java-Themen 3
A Debugger im Java-Editor funktioniert nicht Allgemeine Java-Themen 5
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
F JTextField funktioniert nicht Allgemeine Java-Themen 6
Athena Programm funktioniert nur beim Debugging korrekt, sonst nicht. Allgemeine Java-Themen 1
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
G Verschlüsselungsalgorythmus funktioniert nicht Allgemeine Java-Themen 2
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
W getResources funktioniert nur in Eclipse, nicht in JAR Allgemeine Java-Themen 2
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M exec() funktioniert nicht Allgemeine Java-Themen 1
M RC4-Chiffre (funktioniert eingeschränkt) Allgemeine Java-Themen 6
X Datentypen Dropzone.options funktioniert nicht Allgemeine Java-Themen 1
D Java funktioniert nur mit deaktivierter Grafikkarte Allgemeine Java-Themen 3
L Erste Schritte Eclipse und Lokal funktioniert - in HTML nicht! Allgemeine Java-Themen 2
K MD5 funktioniert nicht korrekt !? Allgemeine Java-Themen 9
M JAR Datei erstellen funktioniert nicht Allgemeine Java-Themen 5
Q JLabel Textausgabe funktioniert nicht Allgemeine Java-Themen 4
E SimpleDateFormat-Konvertierung funktioniert nicht Allgemeine Java-Themen 3
T Dateidownload Funktioniert nicht Allgemeine Java-Themen 4
C Wie funktioniert Projektplanung? Allgemeine Java-Themen 18
K String.replace funktioniert nicht Allgemeine Java-Themen 3
G treeMap.putall funktioniert nicht?! Allgemeine Java-Themen 2
DaniSahne96 Threads Code funktioniert nicht wie er sollte Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben