BierSpiel von "Kopf bis Fuss" eigener Code...kleine Problemstellung.

NurTee

Mitglied
Hallo zusammen,

eventuell kennt jemand das BierSpiel aus dem Buch "von Kopf bis Fuß"....

Nun denn, ich habe nicht dem Code im Buch genutzt, sondern wollte direkt selbst denkend da was machen.

Klappt auch soweit gan gut...jedoch stehe ich vor einer kleinen Problemstellung.

Erstmal mein Code zur Übersicht:
Java:
package Übungen;

public class BierLied 
{

	public static void main(String[] args) 
	{
	int bierAnzahl = 99;
	String wort = "Flaschen";
		while ( bierAnzahl > 1)
		
		{
			{
			System.out.println(bierAnzahl+" "+wort+" "+"Bier sind im Kühlschrank..."); 
			System.out.println(bierAnzahl+" "+wort+" "+"Bier !");
			bierAnzahl = bierAnzahl - 1;
			System.out.println("Und wir nehmen eine raus, dann sind es nur noch"+" "+bierAnzahl+"!");
			
			}
			if (bierAnzahl == 1)
			{ wort = "Flasche";
			System.out.println("Und wir nehmen die letzte raus, dann war es die letzte"+" "+wort+"!");
			}
			
		}
		
	}

}

Wenn man den nun compiliert und die Konsolen Ausgabe sich anschaut, endet das alles mit

"Und wir nehmen die letzte raus, dann war es die letzte Flasche!"

Ich möchte hier noch ein "if" einbauen....

so wie:

if (bierAnzahl == 0)
{
System.out.println("Alle, alle...nix mehr da!");
}

Leider klappt das nicht.

Die kleine Übung ist die letzte vor den Arrays in dem Buch und wird nicht näher besprochen, einfach das so hinnehmen und weitermachen will ich nicht, sondern durch aus dieses kleine Problem lösen.

Wer hat rat? Kann mir gut vorstellen das es auch eine "then" Methode gibt...das Buch geht da nicht näher drauf ein.
 
Zuletzt bearbeitet:
Wo genau wolltest du dieses "if" einbauen?
Innerhalb von "if (bierAnzahl == 1)" oder danach? Wenn innerhalb, überlege mal logisch warum es nicht funktioniert 😉
 
@Joose

Nein, nicht innerhalb (find ich irgendwie unlogisch), sondern danach wie hier

Java:
if (bierAnzahl == 1)
    { 
      wort = "Flasche";
      System.out.println("Und wir nehmen die letzte raus, dann war es die letzte"+" "+wort+"!");
    }
if (bierAnazhl == 0)
   {
    System.out.println("Alle, alle...nix mehr da!");
   }


Ich hab nun doch mal nach "if else" gegoogelt und den Code so angepasst

Java:
if (bierAnzahl == 1)
			{ 
				wort = "Flasche";
				System.out.println("Und wir nehmen die letzte raus, dann war es die letzte"+" "+wort+"!");
			}    
				else if (bierAnzahl < 1)
			    {
			    	System.out.println("Alle, alle...nix mehr da!");
			    }

Eclipse gibt keine Fehlermeldung aus, trotzdem aber auch nicht den letzten Satz, der soll ja nur kommen, wenn der Typ "int" den var. Wert 0 bekommt.

Eventuell in der while Schleife ?
 
Deine "while" Schleife läuft nur solange "bierAnzahl > 1".
In der Schleife wird dann "bierAnzahl" reduziert und dann noch geprüft ob "== 1".

"bierAnzahl" kann also nie auf 0 sinken!

EDIT: Bei solchen Konstrukten könnte dir ein Schreibtischtest vielleicht helfen das Ganze besser zu verstehen 🙂
 
Zuletzt bearbeitet:
Das Problem ist, dass Deine ursprüngliche while-Schleife den Fall, dass bis zum Wert 0 heruntergezählt wird, verhindert. Ich habe mal zwei Verbesserungen vorgenommen (siehe Kommentare):

Java:
public class Main 
{
 
    public static void main(String[] args) 
    {
    int bierAnzahl = 99;
    String wort = "Flaschen";
        while ( bierAnzahl >= 1)//Schau hier.
 
        {
            {
            System.out.println(bierAnzahl+" "+wort+" "+"Bier sind im Kühlschrank..."); 
            System.out.println(bierAnzahl+" "+wort+" "+"Bier !");
            //bierAnzahl = bierAnzahl - 1;Siehe folgende Zeile, das ist der Dekrementoperator.
            bierAnzahl--;
            System.out.println("Und wir nehmen eine raus, dann sind es nur noch"+" "+bierAnzahl+"!");
 
            }
            if (bierAnzahl == 1)
            { wort = "Flasche";
            System.out.println("Und wir nehmen die letzte raus, dann war es die letzte"+" "+wort+"!");
            }
            
            if (bierAnzahl == 0)//Hier ist Deine letzte Prüfung. Der Wert ist nun 0, und das nächste Mal geht er nicht mehr in die while rein.
            {
            System.out.println("Alle, alle...nix mehr da!");
            }
 
        }
 
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Das Problem ist, dass Deine ursprüngliche while-Schleife den Fall, dass bis zum Wert 0 heruntergezählt wird, verhindert. Ich habe mal zwei Verbesserungen vorgenommen (siehe Kommentare):

Das Problem bei deinem Code ist die falsche Ausgabe:

........
Und wir nehmen die letzte raus, dann war es die letzte Flasche!");
1 Flasche Bier sind im Kühlschrank...
1 Flasche Bier !
Und wir nehmen eine raus, dann sind es nur noch 0!
Alle, alle...nix mehr da!

Ich glaube nicht das die 3 mittlereren Zeilen erwünscht sind.
 
Wie wäre es denn hiermit?

Java:
        int bottleCount = 20;
        while(bottleCount > 0)
        {
            bottleCount--;
            String result;
            switch(bottleCount)
            {
                case 0: result = "Und wir nehmen eine Flasche raus, nun ist nichts mehr da!";
                case 1: result = "Und wir nehmen eine Flasche raus, nun ist nurnoch eine Flasche vorhanden";
                default: result = String.format("Und wir nehmen eine Flasche raus, nun sind es nurnoch %d Flaschen", bottleCount);
            }
            System.err.println(result);
        }
 
Zuletzt bearbeitet:
Sooo...ich hab es glaub ich raus. Das "else if" hab ich geändert durch nur ein "if" und die while Schleife bekommt mit dem ersten "if" ja eine neue Bedingung...(bierAnzahl==0)

DANN ---> ändere die Deklaration der Zeichenkette (String) namens "wort" von "Flaschen" nach "Flasche" (Singular statt Plural)....sowie gebe aus
Java:
System.out.println("Und wir nehmen die letzte raus, dann war es die letzte"+" "+wort+"!");

Das Problem lag darin, das die Schleife "while" solange aktiv bleibt, bis die Ganzzahl größer 0 erreicht ist.

Also wurde hier:
Java:
while ( bierAnzahl > 0)
		{
			
			System.out.println(bierAnzahl+" "+wort+" "+"Bier sind im Kühlschrank..."); 
			System.out.println(bierAnzahl+" "+wort+" "+"Bier !");
			bierAnzahl = bierAnzahl - 1;
			System.out.println("Und wir nehmen eine raus, dann sind es nur noch"+" "+bierAnzahl+"!");

bei dem erreichten Wert 2, minus 1 gerechnet. Der Wert 1 bleibt bestehen, die "if" Methode wird aktiv...bisher blieb die 1 da bzw. durchlief wieder die "while" Schleife...um das zu stoppen,
hab ich innerhalb der ersten "if" Methode nochmals den int "bierAnazhl" um -1 beeinflusst.
Da es halt "if" ist, wird diese subtraktion erst angewendet, wenn die "if" Methode boolean == 1 ist, also true. Gefolgt von einem weiteren "if" der dann endlich auf int = 0 kommt um die letzte Zeichenkette auszugeben.

Die "while" Schleife kann nicht weiter arbeiten, da hier der Booleansche Wert größer als 0 auf "false" steht.

Ändert man diesen Wert auf >1, fehlen wiederum logische println Ausgaben.

Hier der komplette Code, probiert es aus.

Java:
public class BierLied 
{

	public static void main(String[] args) 
	{
		int bierAnzahl = 99;
		String wort = "Flaschen";
		while ( bierAnzahl > 0)
		{
			
			System.out.println(bierAnzahl+" "+wort+" "+"Bier sind im Kühlschrank..."); 
			System.out.println(bierAnzahl+" "+wort+" "+"Bier !");
			bierAnzahl = bierAnzahl - 1;
			System.out.println("Und wir nehmen eine raus, dann sind es nur noch"+" "+bierAnzahl+"!");
			
			if (bierAnzahl == 1)
			{ 
				wort = "Flasche";
				System.out.println("Und wir nehmen die letzte raus, dann war es die letzte"+" "+wort+"!");
				bierAnzahl = bierAnzahl - 1;
			}   
				if(bierAnzahl == 0)
				{
					System.out.println("Alle, alle...nix mehr da!");
				}	
			
			}
			
	}
		
}


Jung, Junge...so wenig Code, so viel Aufwand...wie läuft das erst bei großen Projekten ab, so Marke Spiel, OS, Kernel, Groß-Anwendung usw. ??? Da läuft man doch gefahr gefeuert zu werden ?!
Oder ist es da normal, das man auch solche Fehler gemeinsam bearbeitet?
 
Ich habe auch noch das Wort ersetzt, und habe es einmal so gelöst:

Java:
public class BierLied 
{
 
	public static void main(String[] args) 
	{
		int bierAnzahl = 99;
		String wort = "Flaschen";
		String copula = "sind";
		while ( bierAnzahl >= 0)
		{
 
			
			
			System.out.println(bierAnzahl+" "+wort+" "+"Bier " + copula + " im Kühlschrank..."); 
			System.out.println(bierAnzahl+" "+wort+" "+"Bier !");
			bierAnzahl--;
		
			
			if (bierAnzahl == 0){
				wort="Flaschen";
				copula = "sind";
			
				//Zwei atypische Strings:
				System.out.println("Und wir nehmen die letzte raus, dann war es die letzte Flasche!");
				System.out.println("Alle, alle...nix mehr da!");
				
			}
			
			
			if (bierAnzahl == 1){
				wort = "Flasche";
				copula = "ist";
				}
			
			if (bierAnzahl > 0){
				
				System.out.println("Und wir nehmen eine raus, dann " + copula + " es nur noch"+" "+bierAnzahl+"!");
		
			 
			} 
				 
 
			}
 
	}
 
}
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben