Java Do-While-Schleifen

...komplette Frage anzeigen

5 Antworten

import java.util.*;

public class FahrenheitCelsius {

/**
 * @param args
 */
public static void main(String[] args) {

    //Benötigte Variablen deklarieren
    double min = 0.995;
    double max = 1.005;
    double fahrenheit = 0.0, celsius;

    //Für die Eingabe von der Tastatur
    Scanner in = new Scanner(System.in);

    //Berechnungsschleife
    do {
            // Anleitung
            System.out.println("Programm endet durch Eingabe von 1");
            System.out.println("Eingabe der Fahrenheit-Temperatur: ");
            // Eingabe, Double-Wert einlesen
            fahrenheit = in.nextDouble();
            // Umrechnen in Celsius
            celsius = fahrenheit * 5.0/9.0 - 160.0/9.0;
            // Ausgabe des Ergebnis
            System.out.println( + fahrenheit + " Grad Fahrenheit sind " + celsius + " Grad Celsius \n");
    // Schleife durch Eingabe von 1 verlassen?
    } while ();
}

}

Also ich habe jetzt einfach mal meinen Quellcode reinkopiert. Ich habe jetzt nämlich die Methode mit && probiert, aber das ging nicht. Das Programm lief zwar, aber ich habe eine 7 eingegeben und danach war Schluss, wenn man sich meine Grenzen anguckt soll aber natürlich bei der 1 Schluss sein. Was ist daran falsch? Ich sitze schon recht lange daran und es wird einfach nicht.

do { ... }
while (fahrenheit < min || fahrenheit > max);

oder
do { ... }
while ( ! (fahrenheit > min && fahrenheit < max) );

allerdings gibt er dann die Berechnung für 1 grad fahrenheit auch noch aus und beendet danach erst, fragt also nicht mehr nach ner neuen Zahl.

0
@Rakasch

noch einfacher wirds, wenn du min und max weglässt und es gleich so schreibst:

do { ... }
while (fahrenheit < 1 || fahrenheit > 1 );

Das Programm macht weiter, solange die eingegebene Zahl kleiner oder größer als 1 ist.

0
@Rakasch

Ah, ok, dann war vorhin wohl der Fehler, dass ich " && " verwendet aber das " ! " nicht gesetzt hatte. Puh, langsam aber sicher kapier ichs. Tausend Dank!

0

ich möchte eine Do-While-Schleife ausführen lassen, bis in die Tastatur irgendeine Zahl eingegeben wird, die zwischen 2 Zahlen liegt.

do{
.... // mach irgendwas
boolean abbruch= eingegebeneZahl > a && eingegebeneZahl < b;
}
while(abbruch);

also ich meine, dass die Schleife nur so lange ausgeführt wird, wie ein wert y eingegeben wird

Das ist aber ein anderes Problem, als das obige... willst du jetzt dass es die Schleife ausführt BIS du etwas eingibst oder jedesmal WENN du etwas eingibst?

Da ist mir ein kleiner Denkfehler passiert, die Bedingung gehört genau andersrum, also

while( !abbruch)

wenn abbruch zutrifft soll er ja aufhören, und solange es nicht zutrifft, soll er weitermachen.

0

Ich möchte, dass es die Schleife ausführt BIS ich etwas eingebe, dann soll es die Schleife noch einmal ausführen und sie dann verlassen...

0
while( y > 9 && y < 21)

//Übersetzt: Solange y größer ist als 9 und y auch gleichzeitig kleiner ist als 21, dann schleife wiederholen.

do{

}while(min > eingabe || max < eingabe)

wird solange ausgeführt, solange die eingabe nicht zwischen den beiden werten min & max liegt

Super, hiermit hat es jetzt tatsächlich funktionier, vielen Dank! :) Das " || " funktioniert also praktisch wie ein "und"?

Und noch eine Frage, um die Sache noch ein wenig komplizierter zu machen: könnte man das ganze auch mit Math.abs lösen, oder geht das nicht?

Vielen Dank allen auf jeden Fall für eure Antworten. Ihr habt mit gut weitergeholfen!! :-)

0
@DerOhrring

|| = oder

&& = und

Beispiel:

min = 0, max = 5

Usereingabe: -3

min > eingabe = true => er durchläuft die schleife nocheinmal

Usereingabe: 7

max < eingabe = true => er durchläuft die schleife nocheinmal

Usereingabe: 3

beide bedingungen = false => er durchläuft die schleife nicht nocheinmal

Was willst du den mit Math.abs?

0
@DerOhrring

übrigends kannst du aus einer Schleife mithilfe des Schlüsselwortes "break;" springen..

do{
         ......
             if(min < eingabe && max > eingabe){
                         break;
             }
}while(true);

würde das gleiche bedeuten

0
@DerJoint

Ok, perfekt. Vielen Dank nochmal!

Ich habe nur irgendwo gelesen, dass man wohl angeblich mit Math.abs auch so Eingrenzungen machen kann? Ich habe das hier im Internet auf irgendeiner Seite entdeckt, deswegen kann es auch gut sein, dass das totaler Bullshit war, das wollte ich nur in Erfahrung bringen. (Wie gesagt, ich bin totaler Neuling auf dem Gebiet).

Wofür braucht man das denn dann? (Falls du Lust hast es zu erklären)

0
@DerOhrring

Math.abs macht nichts anderes als den Betrag einer Zahl auszurechnen. Math.abs( 7 ) = 7
Math.abs( -7 ) = 7

Wären deine Grenzen zB von -5 bis +5, könntest du diese beide Varianten benutzen:

do { ... }
while ( fahrenheit < -5 || fahrenheit > 5 );

do { ... }
while ( Math.abs(fahrenheit) > 5 );

0
@DerJoint

Die Benutzung von breaks gilt aber als "unschön", da es den Code unübersichtlich macht.

0
@Rakasch

sollte man trotzdem wissen, manchmal ist es nämlich ziemlich nützlich (wie continue)

0
int min = 5;
int max = 10;
int val = 0;

do
{
    val++;
}
while(min <= val <= max)

Das wäre zumindest die Benutzung der doWhile-Schleife. Um die tastatureingabe abzufangen, informiere dich bitte über "KeyListener" ;) val wird jedesmal inkrementiert, bis es den minWert erreicht hat!

Was möchtest Du wissen?