Java for-schleife beenden

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Nun, da sieht man mal wieder, wozu GOTO doch gut war...

Aber in Java geht das nun mal nicht. Wie du vielleicht schon weißt, kommt man mit dem Schlüsselwort break nur aus der momentan aktuellen Schleife heraus. Daher musst du das Problem anders lösen: Entweder, du beendest das gesamte Programm mit

System.exit(0);

Statt 0 kannst du auch einen anderen Wert angeben; wenn das Programm nicht mit 0 beendet wird, heißt das meist, dass ein Fehler aufgetreten ist. Dem Nutzer kannst du das damit zeigen.

Wenn es nach den zwei Schleifen noch mal weitergehen soll, nimmst du am besten eine Variable hinzu, die immer auf true ist, bis beide Schleifen abgebrochen werden sollen:

boolean breakVar = true;

for(...; (deineBedingung) && breakVar; ...)
{
    ...
    for(...; (deineBedingung2) && breakVar; ...)
    {
        ...
        if(programmBeendenBedingung)
        {
            breakVar = false;
            break;
        }
    }
}
... //hier geht es jetzt weiter

Um dein Programm komplett zu beenden kannst du System.exit(0); benutzen.

Wenn du nur aus den beiden Schleifen rauswillst, lege dir ein boolean Feld (standardmäßig auf true) an dass du mit in die beiden for-Bedingungen nimmst. Wird es false wird keine der Schleifen einen weiteren Durchlauf machen können.

Das wäre jetzt eine simple Methode das zu machen. Wenn ich genau wüsste was dein Code machen soll, könnte man evtl noch bessere Wege finden ohne zusätzliche Indikator-Variable

Der Code macht irgendwie keine Sinn, die Abbruchbedingung der inneren Schleife ist von a1 abhängig, was in der inneren Schleife nicht verändert wird.

Mir scheint es so als ob dein gesamtes Konstrukt falsch angelegt ist, was genau soll der Code leisten? Mir scheint es als müssten die Schleifen eigentlich hintereinander gesetzt werden.

die äußere schleife soll eine Variable a abfragen, die innere eine variable b. wenn die eingabe keine zahl ist soll jeweils erneut abgefragt werden, allerdings nur so oft wie vorher im schleifenkopf definiert ist. Wenn für a nun eine zahl eingegben wird geht er in die innere schleife um dort variable b abzufragen. Wenn hier 5 falsche eingaben erfolgen soll das programm beendet werden. bei meinem jetzigen code fängt es allerdings wieder mit der äußeren schleife an und fragt a und b erneut ab.

P.S.: bin absoluter anfänger, habe so codiert wie es für mich logisch erschien.

0
@infonoob

P.P.S.: die beiden variablen sollen zu guter letzt miteinander verglichen und die größere der beiden ermittelt werden, was auch funktioniert.

0

Warum kommt es bei dem Ausführen des Programmes zu einem Fehler?

package pr2;

import javax.swing.JOptionPane;

public class prrrr {
  static int frage = 1;
  static int ende = 1;
  static double durchschnitt = 0;
  static int bstNote = 0;
  static double summe = 0;
  static int i = 0;
  static int schNote = 0;
  static int zahl = 0;
  static int []anzahl;
  ;

  public static void main(String[] args) {
    double noten[] = new double[100];
    double min = Double.MAX_VALUE;
    double max = Double.MIN_VALUE;

    while(frage == 1){
      String zahl2 = JOptionPane.showInputDialog("Welche Noten hast du bekommen?(Wenn du fertig bist gib q ein)");

      if(zahl2.equals("q"))
      {
        frage = 0;
      }
      else
      {
        int zahli = Integer.parseInt(zahl2);
        noten[i] = zahli;
        //System.out.println(noten[i]);

        summe = (noten[i] + summe);
        i++;
        int anzahl[] = new int[i];
      }

      if (frage == 0)
      {
        durchschnitt = summe / i;
        
        //Beste Note

        //Schlechteste Note

        for (int a = 0; a < i; a++) {
          if (noten[a] < min)
          {
            min = noten[a];
            //System.out.println(noten[a] + " + " + min);
          }
        }
        for (int a = 0; a < noten.length; a++) {
          if (noten[a] > max)
          {
            max = noten[a];
            //System.out.println("max: " + max);
          }
        }
        for(int zahl = 0; zahl < 16; zahl++)
          for(int r = 0; r<noten.length + 1; r++)
          {
            if(noten[r] == zahl)
            {
              anzahl[zahl] = anzahl[zahl] + 1;
            }
          }
        System.out.println("Schlechteteste Note: " + (int)min + "\nBeste Note: " + (int)max);
        System.out.println("Der Durchschnit beträgt: " + durchschnitt);
        System.out.println("-------Notenspiegel-------");
        System.out.println("0" + anzahl[0] + "\n");
        System.out.println("1" + anzahl[1] + "\n");
        System.out.println("2" + anzahl[2] + "\n");
        System.out.println("3" + anzahl[3] + "\n");
        System.out.println("4" + anzahl[4] + "\n");
        System.out.println("5" + anzahl[5] + "\n");
        System.out.println("6" + anzahl[6] + "\n");
        System.out.println("7" + anzahl[7] + "\n");
        System.out.println("8" + anzahl[8] + "\n");
        System.out.println("9" + anzahl[9] + "\n");
        System.out.println("10" + anzahl[10] + "\n");
        System.out.println("11" + anzahl[11] + "\n");
        System.out.println("12" + anzahl[12] + "\n");
        System.out.println("13" + anzahl[13] + "\n");
        System.out.println("14" + anzahl[14] + "\n");
        System.out.println("15" + anzahl[15] + "\n");
      }
    }
  }
}

Fehlercode:

Exception in thread "main" java.lang.NullPointerException
at pr2.prrrr.main(prrrr.java:68)

Der Fehler ensteht, nachdem ich alle Notenpunkte eingegeben habe.

...zur Frage

Java - Primzahlen ermitteln

Soll zwischen 1 und 100 alle Primzahlen in Java ermitteln. Lasse ich das Programm laufen wird keine Zahl ausgegeben. Ich habe festgestellt, dass bei jeder Zahl primzahl == false ist. Zu beginn war der boolean primzahl true. Was habe ich falsch gemacht?

System.out.println ("Primzahlen:");

for (i=1 ;i<=100 ;i++ ) {
  if (i==1) {
    primzahl = false;
  } // end of if
    else {
    for (j=2 ;j<i ;j++ ) {
      if (i % j == 0) {
        primzahl = false;
      } // end of if
    } // end of for
  } // end of if-else
  if (primzahl == true) {
    System.out.println (i);
  } // end of if
} // end of for
...zur Frage

Wie kann ich Excel Formel Ergebnisse sortieren?

Beispiel: wir haben folgende Zellen:

A1 --> 2

B2 --> 4

A2 --> =A1+B1 (=6)

A3 --> =A1-B1 (=-2)

A4 --> =B1-A1 (=2)

A5 --> =A1*B1 (=8)

nun möchte ich in der Spalte B die Inhalte der Formelen sortieren:

d.h. in B2=8, B3=6, B4=2, B=-2.

Mit harten Werten weiß ich wie es funktioniert, aber wie funktioniert dies mit Formelergebnisse???

...zur Frage

Wie kann ich mit Batch aus einer Quelldatei mit einer FOR-Schleige GANZE Zeilen auslesen?

Ich habe mir bereits eine FOR-Schleife zu diesem Zwecke geschrieben, alledings bekomme ich leider nie die gesamte Zeile raus, sondern nur das erste Wort. Hier ist ein Beispiel:

Quelle.txt:

Hallo Alice!
Ich bin eine Testdatei.
Freut mich, dass du da bist.

Auslesen.bat:

@echo off
FOR /f %%f IN (Quelle.txt) DO echo %%f
pause >NUL

Kommandozeilenoutput:

Hallo
Ich
Freut

Danke für eure Hilfe! :)

...zur Frage

In for schleife werden Spieler immer mehr?

Hallo. Ich habe eine Frage. Ich Programmiere Java Minecraft Plugins. Ich habe in einem Scheduler der, jede Sekunde ausgeführt wird, eine for schleife, in der alle Spieler in all abgespeichert werden. Jedoch ist es so, dass die Funktion (gekennzeichnet mit //a) mehrmals ausgeführt wird, je mehr Spieler auf dem Server waren. Kann man das Irgendwie verhindern?

Hier ein Video um zu erläutern wie ich das Meine; https://youtu.be/-_26qo3DTJ4

Code:

public void onKick(Player p) {
    if(!Bukkit.getScheduler().isCurrentlyRunning(sched)) {
        sched = Bukkit.getScheduler().scheduleSyncRepeatingTask(main, new Runnable() {
            
            @Override
            public void run() {
                
                if(Bukkit.getOnlinePlayers().size() == 0) {
                    Bukkit.getScheduler().cancelTask(sched);
                    return;
                }
                
                long jetzt = System.currentTimeMillis();
                
                for(Player all : Bukkit.getOnlinePlayers()) {
                    if(zeit.containsKey(all.getName())) {
                        int rest = (int) ((zeit.get(all.getName()) + (1*1000*60)) - jetzt);
                        if(rest/1000 == 30) {
                            MSG(all.getName(), 30); //a
                        }else if(rest/1000 == 20) {
                            MSG(all.getName(), 20); //a
                        }else if(rest/1000 == 10) {
                            MSG(all.getName(), 10); //a
                        }else if(rest/1000 == 5) {
                            MSG(all.getName(), 5); //a
                        }else if(rest/1000 == 4) {
                            MSG(all.getName(), 4); //a
                        }else if(rest/1000 == 3) {
                            MSG(all.getName(), 3); //a
                        }else if(rest/1000 == 2) {
                            MSG(all.getName(), 2); //a
                        }else if(rest/1000 == 1) {
                            MSG(all.getName(), 1); //a
                        }else if(rest/1000 <= 0) { //&lt;= bedeutet kleiner gleich
                            all.kickPlayer("§cDu wurdest gekickt, da deine Spielzeit abgelaufen ist!");
                            zeit.remove(all.getName());
                            if(Bukkit.getOnlinePlayers().size() == 0) {
                                Bukkit.getScheduler().cancelTask(sched);
                            }
                        }
                    }
                }
            }
        }, 0, 20);
    }
}

 //a
public void MSG(String name, int i) {
    if(main.getConfig().getBoolean("KickCountdown."+name)){
        Bukkit.broadcastMessage("§b"+name+ " §7wird in §b"+i+" §7Sekunden gekickt!");
        main.getConfig().set("KickCountdown."+name, false);
        main.saveConfig();
        Bukkit.getScheduler().runTaskLater(main, new Runnable() {
            
            @Override
            public void run() {
                main.getConfig().set("KickCountdown."+name, true);
                main.saveConfig();
            }
        }, 19);
    }
}
...zur Frage

Java:Taschenrechner:Konsole:Problem

import java.util.Scanner;

public class test{
    public static void main(String[] args){

        System.out.println("Dies ist ein Taschenrechner, bitte nur folgende Rechenmethoden verwenden(ausgeschrieben): ");
        System.out.println("plus\n"+"minus\n"+"mal\n"+"durch\n");

        Scanner eingabe = new Scanner(System.in); //Scanner

        String rechenmethode = String.valueOf(eingabe); //String deklarieren

        double zahl1, zahl2; //Varriablen deklarieren


        System.out.println("Erste Zahl bitte: "); //Abfrage erste Zahl
        zahl1 = eingabe.nextDouble();
        System.out.println("Rechenmethode bitte: "); //Abfrage Rechenmethode
        rechenmethode = eingabe.next();
        System.out.println("Zweite Zahl bitte: "); //Abfrage zweite Zahl
        zahl2 = eingabe.nextDouble();
        Double Summe = zahl1+zahl2; //verarbeiten der eingaben
        Double Differenz = zahl1-zahl2; //verarbeiten der eingaben
        Double Produkt = zahl1*zahl2; //verarbeiten der eingaben
        Double Quotient = zahl1/zahl2; //verarbeiten der eingaben


        if(rechenmethode.equals("plus")){ //Ausgeben des Ergebnisses
            System.out.println(Summe);
        }
        else if(rechenmethode.equals("minus")){ //Ausgeben des Ergebnisses
            System.out.println(Differenz);
        }
        else if(rechenmethode.equals("mal")){ //Ausgeben des Ergebnisses
            System.out.println(Produkt);
        }
        else if(rechenmethode.equals("durch")){ //Ausgeben des Ergebnisses
            System.out.println(Quotient);
        }




        System.out.println("\n\nby Max Musterma"); //Ausgabe des wundervollen Namen des Programmierers

    }
}

Taschenrechner der 2Zahlen zusammenrechnet...

Nun will ich beliebig viele Zahlen zusammenrechnen..

import java.util.Scanner;
public class Rechner2 {
    public static void main(String[]args){

        Scanner eingabe = new Scanner(System.in);

        double ergebnis = 0;
        int i = 0;

        while(i<1){
            System.out.println("Zahl:");
            double zahl = eingabe.nextDouble();
            if(zahl == 0){
                break;
            }
            System.out.println("Rechenmethode:");
            String zeichen = eingabe.next();
            if(zeichen.equals(0)){
                break;
            }
            switch(zeichen){
                case "+": ergebnis = ergebnis + zahl;
                break;
                case "-": ergebnis = ergebnis - zahl;
                break;
                case "*": ergebnis = ergebnis * zahl;
                break;
                case "/": ergebnis = ergebnis / zahl;
                break;  
            }
        }
        System.out.println(ergebnis);

        System.out.println("\n\nMax Mustermt");
    }
}

testen...

man kann nun beliebig viele Zahlen zusammenrechnen, mit verschiedenen

...zur Frage

Was möchtest Du wissen?