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:

Joose

Top Contributor
Wo genau wolltest du dieses "if" einbauen?
Innerhalb von "if (bierAnzahl == 1)" oder danach? Wenn innerhalb, überlege mal logisch warum es nicht funktioniert ;)
 

NurTee

Mitglied
@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 ?
 

Joose

Top Contributor
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:

Shams

Aktives Mitglied
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:

Joose

Top Contributor
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.
 

Times

Bekanntes Mitglied
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:

NurTee

Mitglied
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?
 

Shams

Aktives Mitglied
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Übungen Java von Kopf bis Fuß Java Basics - Anfänger-Themen 2
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
T Ratespiel-Java von Kopf bis Fuß Java Basics - Anfänger-Themen 15
M JAVA VON KOPF BIS FUß Java Basics - Anfänger-Themen 1
N Von Kopf bis Fuss TestArrays lässt sich nicht lösen Java Basics - Anfänger-Themen 5
Thallius String und \n. Habe wohl gerade Brett vorm Kopf Java Basics - Anfänger-Themen 13
P Compiler-Fehler Java Kopf bis Fuß Phrase0Matic Java Basics - Anfänger-Themen 4
D Literatur: von Kopf bis Fuß Java Basics - Anfänger-Themen 4
G "Java von Kopf bis Fuss" - mit Eclipse? Java Basics - Anfänger-Themen 4
Siciliano Java von Kopf bis Fuss / Kap.2 / Hundbeispiel Java Basics - Anfänger-Themen 4
H Java von Kopf bis Fuß: Brauche Hilfe Java Basics - Anfänger-Themen 6
M Java von kopf bis Fuß noch zeitgemäß ? Java Basics - Anfänger-Themen 18
feardorcha Java von Kopf bis Fuß "Java ist Pass-by-Value" Java Basics - Anfänger-Themen 6
T Problem bei BeatBox aus Java-Von Kopf bis Fuß Java Basics - Anfänger-Themen 3
M Java von Kopf bis Fuß Java Basics - Anfänger-Themen 73
I Java von Kopf bis Fuß: Ratespiel-Problem Java Basics - Anfänger-Themen 20
F Übung: Ratespiel aus dem Buch Java von Kopf bis Fuß Java Basics - Anfänger-Themen 14
F Übung 99 Flaschen Bier aus dem Buch Java von Kopf bis Fuß Java Basics - Anfänger-Themen 10
M Java von Kopf bis Fuß Java Basics - Anfänger-Themen 8
T generisches Brett vorm Kopf: (List<Object>) List<My Java Basics - Anfänger-Themen 7
D JTable -> Kopf fehlt Java Basics - Anfänger-Themen 2
S QuickSort will mir nicht in den Kopf (an einer Stelle) Java Basics - Anfänger-Themen 14
J Brett vorm Kopf - Klasse aufrufen/instanz *?* Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben