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 wird mir der Fehler in Java angezeigt?

Hallo Freunde, ich bin gerade dabei einen BMI Rechner in Java (NetBeans) zu programmieren. Allerdings kommt immer bei der if /else if abfrage ein Fehlercode. Ich weiß nicht warum der kommt. Hab mir schon Videos angesehen etc aber bei denen ging das alles. if(Alter<=24) if(ergebnis>=0) System.out.println("ACHTUNG!!! Du hast ein Untergewicht"); if else(ergebnis>=19) System.out.println("PERFEKT!!! Du hast ein Normalgewicht"); if else(ergebnis>=24) System.out.println("ACHTUNG!!! Du hast leicht erhöhtes Übergewicht");

bei den zwei if else Abfragen kommt ein Fehler. Ich hab auch nochmal den ganzen Quelltext reingestellt damit man es sich komplett angucken kann. Hoffe jmd kann mit helfen :)

package bmirechner; import java.util.Scanner;

public class BMIrechner {

public static void main(String[] args) {

    double Körpergröße;
    double Gewicht;
    double Geschlecht;
    double ergebnis;
    int Alter;
    Scanner ScannerKörpergröße = new Scanner(System.in);
    Scanner ScannerGewicht = new Scanner(System.in);
    Scanner ScannerGeschlecht = new Scanner(System.in);
    Scanner ScannerAlter = new Scanner(System.in);

    System.out.println("Herzlich Willkommen zum BMI Rechner von Valentin Wagner");
    System.out.println("Sind Sie ein Mann oder eine Frau?");
    System.out.println("Geben Sie (1) für Frau ein und (2) für Mann ein");
    Geschlecht=ScannerGeschlecht.nextDouble();
    System.out.println("Wie alt sind sie?");
    Alter=ScannerAlter.nextInt();
    if(Geschlecht == 1){
        System.out.println("Bitte geben sie Ihre Körpergröße an");
        Körpergröße=ScannerKörpergröße.nextDouble();
        System.out.println("Bitte geben sie Ihr Gewicht an");
        Gewicht=ScannerGewicht.nextDouble();
        ergebnis=Gewicht / (Körpergröße * Körpergröße);
        System.out.println("Ihr BMI beträgt: " + ergebnis);
        if(Alter<=24)
            if(ergebnis>=0)
                    System.out.println("ACHTUNG!!! Du hast ein Untergewicht");
            if else(ergebnis>=19)
                    System.out.println("PERFEKT!!! Du hast ein Normalgewicht");
            if else(ergebnis>=24)
                    System.out.println("ACHTUNG!!! Du hast leicht erhöhtes Übergewicht");
...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

ZIP bestimmte Dateien und Unterordner?

Ich möchte mehrere Dateien mit ihren momentanen Pfaden in eine ZIP-Datei verpacken.

Bsp.: Sagen wir es existieren die folgenden Dateipfade:

C:\a1\b1\c1, C:\a1\b1\c2, C:\a1\b2\c1, C:\a1\b2\c2, C:\a2\b1\c1, C:\a2\b1\c2, C:\a2\b2\c1 und C:\a2\b2\c2

Ich möchte nun a1\b1\c1, a1\b2\c1 und a1\b2\c2 in eine Zip-Datei namens "a1" verpacken, sodass ich (nachdem ich meinen PC neu aufgesetzt habe) sie nur noch nach C:\ entpacken muss. (Die Pfade sollen dann wiederhergestellt (bzw. neu angelegt) werden.)

Am liebsten würde ich das mit 7zip machen, aber jede kostenfreie (und nicht dubiose) Software ist auch in Ordnung.

...zur Frage

Was möchtest Du wissen?