# Pizza



## Windows10 (31. Jan 2016)

Irgendetwas geht bei folgendem Code nicht (Angabe siehe Fotos!!!)!!
Die Arrays werden irgendwie komisch ausgegeben!!
     

```
public class Pizza
{
    static String[]anzahlpizzen=new String[110];
    static double[]preis=new double[110];
    static int[]auswahl=new int [110];
    static int wahl=0;
    static int i=0;
    public static void main()     
    {

        while(true)
        {
            i++;
            menue();
            wahl=In.readInt();
            switch(wahl)
            {
                case 1: preiseinerspeise(); break;
                case 2: break;
            }

            if(wahl==3)
            {
                for(int iu=0;iu<auswahl.length;iu++)
                {
                    Out.println(""+auswahl+" * "+anzahlpizzen+"");
                }
            }
            if(wahl==4)
            {
                double preise=0;
                int gesamt=0;
                for(int zi=0;zi<auswahl.length;zi++)
                {
                    Out.println(""+auswahl+"  "+gesamt+"    "+auswahl+"  "+preis+"="+gesamt+" €");
                }
                Out.print("------------------------------------------------");
                Out.print("                   "+preis+"€");
            }
            if(wahl==5)
            {
                int adolf=88;
                for(int ie=0;ie<adolf;ie++)
                {
                    adolf=0;
                }
                while(true)
                {
                    Out.print("Speisenummer (-1 oder ueber 109 für Ende): ");
                    adolf=In.readInt();
                    if(adolf<=-1||adolf>109)break;
                }
                break;
            }
            if(wahl==6)
            {
                Out.print("Was suchen Sie? : ");
                String part=In.readWord();
                for(int iw=0;iw<preis.length;iw++){
                    Out.println(anzahlpizzen+"-->"+preis);
                }
            }
            if(wahl==7)
            {
                Out.print("Was suchen Sie? : ");
                String part=In.readWord();
                for(String val:anzahlpizzen){
                    Out.println(val);

                }
            }
        }
    }

    public static void menue()
    {
        Out.println("Diese Befehlsliste                 (1)");
        Out.println("Speisekarte anzeigen               (2)");
        Out.println("Bestellung aufnehmen               (3)");
        Out.println("Rechnung drucken                   (4)");
        Out.println("Bestellung drucken                 (5)");
        Out.println("Preis einer Speise                 (6)");
        Out.println("Speise suchen                      (7)");
        Out.println("Exit                              (-1)");
        Out.println("______________________________________");
        Out.print("Eingabe: ");
    }

    public static void preiseinerspeise()
    {
        for(int i=99; i<preis.length;i++)
        {
            Out.println(""+i+":   "+anzahlpizzen+"       ["+preis+"]");
        }
    }

    public static void f()
    {
        for(int iu=0;iu<auswahl.length;iu++)
        {
            Out.println(""+auswahl+" * "+anzahlpizzen+"");
        }
    }
}
```


----------



## kneitzel (31. Jan 2016)

Zu Deinem Code:
- Wieso hast Du erst ein switch statement um dann doch einige Auswahl-Werte per if else abzufragen?
- Wieso nimmst Du keine aussagekräftigen Variablennamen.
- Wieso machst Du so lange Funktionen mit vielen Ebenen? Zusammen mit vorher genanntem Punkt führt das zu unleserlichem Code.
- Teilweise frage ich mich, was Du bei dem Code machst. Auswahl 5 ist so ein punkt. Variable adolf? Und dann setzt Du diese Variable auf 88? Dann eine for Schleife, in der Du adolf auf 0 setzt? 

Zu Deinem Problem:  
Was wird komisch ausgegeben? Der Code der Ausgabe sowie das, was derzeit ausgegeben wird und was du gerne hättest wäre wichtig. Die ganze Aufgabe und den ganzen Code komplett zu bringen ohne Details bringt nichts.


----------



## kneitzel (31. Jan 2016)

Komische Ausgabe ist wohl auf wahl 3 und 6 bezogen. Schau Dir an, was Du denn ausgibst und überleg genau, was Du ausgeben willst. Was sind preis, anzahlpizzen und auswahl? Und was versuchst Du da auszugeben? Und was willst Du wirklich ausgeben? Mal Dir Deine Variablen mit deren Inhalt auf ein Zettel auf und schau dann genau, was Du im Code machen willst!


----------



## Dompteur (31. Jan 2016)

Ich habe mir jetzt nicht die ganze Aufgabenstellung durchgelesen.
Du solltest lernen, bei deinen Beiträgen das Wesentliche auszudrücken.

Aufgefallen ist mir, dass der Code, der dein Array ausgibt, einen Fehler hat.

```
public static void preiseinerspeise()
    {
        for(int i=99; i<preis.length;i++)
        {
            Out.println(""+i+":   "+anzahlpizzen+"       ["+preis+"]");
        }
    }
```

Du gibst immer das ganze Array an, es sollte aber immer nur ein Wert da ausgegeben werden.
Verwende also: 

```
anzahlpizzen[i], preis[i]
```


----------



## Windows10 (31. Jan 2016)

Dompteur hat gesagt.:


> Ich habe mir jetzt nicht die ganze Aufgabenstellung durchgelesen.
> Du solltest lernen, bei deinen Beiträgen das Wesentliche auszudrücken.
> 
> Aufgefallen ist mir, dass der Code, der dein Array ausgibt, einen Fehler hat.
> ...




Konkrete Fragen:

Wie kann man von einer Datei einlesen und mitzählen, wie oft eingelesen wird, bis die Datei zu Ende ist? Es sollte mit 
	
	
	
	





```
while(In.done())
```
 sein!!!! So oft man einlesen musste, ein so großes Array soll dann angelegt werden!!


----------



## Bitfehler (31. Jan 2016)

Wo ist der Zusammenhang zwischen deinem Zitat im letzten Beitrag und deiner Frage?

Ist In.xxx wieder so eine vorgegebene Klasse, die sonst keiner kennt? Wenn ja, solltest du mal gucken, was die Dokumentation zu der Klasse sagt. Ich könnte mir vorstellen, dass du mit In.done() das Einlesen beenden kannst. Fürs eigentlich Lesen wirst du einen anderen Befehl aus dieser In-Klasse brauchen. Vielleicht gibt es da auch eine Klasse, die dir sagt, wie viele Zeilen deine Datei hat. Ansonsten musst du mitzählen, wenn du das wissen willst.


----------



## Tobse (31. Jan 2016)

Wenn man aus einer Datei liest und vorher nicht weiss, wieviel Daten nachher dabei rauskommen, benutzt man eine dynamische Datenstruktur. Siehe z.B. ArrayList.

Noch was allgemeines: Die ganzen Ausrufezeichen machen es nicht gerade angenehm, deinen Text zu lesen. Du brüllst ja auch in echt nicht die ganze Zeit rum !!!!11!!11einself


----------



## AndiE (31. Jan 2016)

Google sagt, es gibt ein Buch, das in Graz geschrieben wurde und "Sprechen Sie Java?" heißt. In diesem Buch sind diese In und Out-Bibliotheken erklärt. Da steht auch drin, dass man mit "open()" den Eingabe Strom von der Tastatur auf die Datei umleitet. Gemäß Aufgabenstellung würde ich tatsächlich die Zeilen zählen, bis ein "eof-End of File" kommt. Dann habe ich die Anzahl, kann danach die Arrays deklarieren und dann die werte noch einmal lesen. Ansonsten würde ich etwas nutzen, was mal als ungarische Notation bezeichnet wurde: GebeEinzelpreis(), SucheWare() usw. Die switch-Anweisung hätte ich auch anders geschrieben. Schreibe einfach : 


```
case  '1': EingabeBestellung();
                break;
case '2':
```

Das macht den Code für meine Begriffe leichter wartbar, weil jede Aufgabe eindeutig einer Funktion zugewiesen ist.


----------



## Jardcore (1. Feb 2016)

Offtopic:


Tobse hat gesagt.:


> Du brüllst ja auch in echt nicht die ganze Zeit rum !!!!11!!11einself


Also die Kinder meiner Nachbarn schon ;(


----------

