while Schleife und Bedingung

werdas34

Bekanntes Mitglied
Hallo,
ich habe folgendes Codeproblem.
Java:
while(wert > 0){
//Anweisungen (auch wert wird geändert)
wert = Objekt.read();
}
Es ist so, das irgendwann Objekt.read() einen Wert liest (-1) der die Schleifenbedingung nicht erfüllt. Jedoch soll die Schleife dann noch genau einmal weiter durchlaufen werden, um die letzten Berechnungen durchzuführen.
Habe schon probiert innerhalb der Schleife eine weitere Variable zu setzen und mittels if-Anweisung, den Wert künstlich hochzuhalten. Ich überlege schon seit ner Stunde, um irgendetwas zu finden, aber mir fällt nichts ein.

Gibt es einen Trick, damit die Schleife, die eigentlich beendet ist, nochmal einen einzigen Durchlauf macht?

Ein anderes Problem zu der Bedingung einer while-Schleife:
Es geht darum, sobald ein Wert nicht zwischen A und Z oder a und z liegt, soll 26 addiert bzw subtrahiert werden, um wieder zu einem Buchstaben zu gelangen.

Java:
char code = 'A'
code -= 1 // code = 64 und kein Großbuchstabe im Unicode mehr
while(code > 'Z' || code < 'A')){
code += 26; // code =90 entspricht Z
}
Das funktioniert. Wenn ich es jedoch um die kleinen Buchstaben erweitere funktioniert das nicht mehr.
Dann sowas:
Code:
while(!(code > 'A' && code < 'Z') || !(code > 'a' && code < 'z')){

}

Da bleibt er aber länger in der Schleife und macht die Rechnung mehrmals.

Vielleicht erkennt jemand das Problem und kann mir helfen.

Danke.
PS: Beide Aufgaben sollen ohne eigene Funktionen und "besonderen" Sachen auskommen.
 
Habe das zweite Problem nun gelöst.
Ich schrieb, das man quasi nur die einfachsten Dinge nutzen darf, aber die Bibliotheksfunktionen sind da auch mit drin.
Code:
while(!Character.isLetter(code)){
}

Jedoch bin ich bei meinem ersten Schleifenproblem noch nicht weiter.
 
Warum wird wert denn in der Schleife verändert? Das dürfte deutlich einfacher sein, wenn man den Wert nicht verändert, und für die Berechnungen in der Schleife eine eigene Variable nutzt.

Eine Schleife, die einfach so noch einen Durchlauf macht, gibts nicht. uU kann man das zu einer do-while umformen, das kommt aber in dem Fall aus das drumherum an.
Wo kommt den der allererste Wert her?
 
Das war ein Teil der Aufgabe, das dieser wert in die Bedingung kommt. Ob man noch weitere hinzufügt ist selbst einem überlassen.
Der wert wird über die Konsole (also wenn man cmd in Windows eingibt, weiß nicht ob das so heißt) und es können werte von 1 - 9 kommen. Kommt keine Zahl mehr bekommt der wert -1. Man liest in der Schleife den wert ein und führt im nächsten Schleifendurchlauf dann Berechnungen mit werten durch, die man zuvor ermittelt hat und in andere Variabeln umgeändert hat.
Ungefähr so:
Java:
while(methode()){

if(var1 > var2 && var2 > var3){
print ...
}
wert = Objekt.read(); // liest aktuellen Wert ein
var1 = var2;
var2 = var3;
var3 = wert;
}
Da ich eigentlich doch etwas Java kann und nicht weiß wie man das sonst lösen soll, hab ich jetzt eine Methode geschrieben, die das für mich löst. Und das funktioniert jetzt auch.
 
werdas34 hat gesagt.:
while(!(code > 'A' && code < 'Z') || !(code > 'a' && code < 'z')
Ich würde an deiner Stelle andere Bezeichnungen vergeben, so dass es bereits beim Lesen von Code
klar ist, was die Methode macht. Es ist sicher mit mehr Schreibarbeit verbunden, hat aber den Vorteil, dass man den Code auch später ohne weiteres versteht.
Java:
public class Test
{

    public static void main(String[] args)
    {

        boolean leftFree= true;
        boolean rightFree = false;

        String info = isPossibleToCrossTheStreet(leftFree, rightFree) ? "Ich kann über die Strasse gehen" : "Ich muss noch warten";
        System.out.println(info);

    }

    static boolean isPossibleToCrossTheStreet(boolean... value)
    {
        boolean isTrue = true;
        for (Boolean b : value) {
            if (!b) {
                isTrue = !isTrue;
                return isTrue;
            }
        }
        return isTrue;
    }

}
 
Es ist sicher mit mehr Schreibarbeit verbunden, hat aber den Vorteil, dass man den Code auch später ohne weiteres versteht.
Deine Intention ist löblich, aber das finde ich jetzt auch nicht so ganz ohne weiteres zu verstehen: isTrue = !isTrue;
Genauso wie das direkt folgende return isTrue;, was tatsächlich ja false zurück liefert.

Mein Vorschlag wäre:
Java:
    static boolean canCrossTheStreet(boolean... value)
    {
        // todo: Parameter auf null oder leer prüfen
        for (Boolean b : value) {
            if (!b) {
                return false;
            }
        }
        return true;
    }
 
Genauso wie das direkt folgende return isTrue;, was tatsächlich ja false zurück liefert.
Nein, macht es nicht. Die Methode wird ja gleich beim ersten Falsch-Wert wieder verlassen. Ergo das Zweite return übersprungen. Nur, wenn alle Werte Wahl liefern, wird isTrue als ursprünglich deklariert auch zurückgegeben.

Aber deine Ausführung ist natürlich smarter 🙂
 
@temi
Ich glaube, wir schreiben an einander vorbei 🙂
Java:
static boolean isPossibleToCrossTheStreet(boolean... value)
    {
        //Nur, wenn alle Werte Wahr liefern, wird isTrue als ursprünglich deklariert auch zurückgegeben
        boolean isTrue = true;
        for (Boolean b : value) {
            if (!b) {
                //Hier wird der erstmoegliche Falschwert registriert, die Variable isTrue negiert und zurueckgegeben
                //Wie du es bereits vorgefuehrt hast, ist ein return false; uebersichtlicher und kommt ganz ohne der
                //Variable isTrue aus.
                isTrue = !isTrue;
                return isTrue;
            }
        }
        return isTrue; //Hier, nur wenn alle Werte Wahr liefern.
    }
 

Neue Themen


Zurück
Oben