Java Array String mit Array vergleichen

Banda

Cadet 1st Year
Registriert
Nov. 2011
Beiträge
15
Hallo zusammen,

ich wollte zum üben von Java einfach mal ein Programm schreiben was eine Hotelbuchung macht.
Dazu habe ich 2 Arrays erstellt und wollte jetzt abfragen welche zimmer denn "frei" sind als welche man buchen kann.

folgenden Code habe ich:
Java:
public class Zimmer {
    public static String[][] zimmer;
    public static String[][] kunden;
    
    public static String[][] zimmerArray () {
        
        zimmer = new String [4] [4];
        
        zimmer[0][0]="34";
        zimmer[1][0]="35";
        zimmer[2][0]="36";
        zimmer[3][0]="37";
        
        zimmer[0][1]="Ausblick         ";
        zimmer[1][1]="Meerblick        ";
        zimmer[2][1]="Presidentenzimmer";
        zimmer[3][1]="Lovesuite        ";
        
        zimmer[0][2]="normal   ";
        zimmer[1][2]="normal   ";
        zimmer[2][2]="luxuriös ";
        zimmer[3][2]="gehoben  ";
        
        zimmer[0][3]="frei  ";
        zimmer[1][3]="belegt";
        zimmer[2][3]="belegt";
        zimmer[3][3]="frei  ";
    


            for(int i=0; i < zimmer.length;i++) {
                 System.out.print(zimmer[i][0]);
                 System.out.print("|");
                 System.out.print(zimmer[i][1]);
                 System.out.print(" | ");
                 System.out.print(zimmer[i][2]);
                 System.out.print(" | ");
                 System.out.print(zimmer[i][3]);
                 System.out.println(" | ");
            }
            System.out.println("");
        return zimmer;
    }
    
    public static String[][] kundenDatei () {
        
        kunden = new String [5] [5];
        
        kunden[0][0]="00001";
        kunden[1][0]="00002";
        kunden[2][0]="00003";
        kunden[3][0]="00004";
        kunden[4][0]="00005";
        
        kunden[0][1]="Meier  ";
        kunden[1][1]="Müller ";
        kunden[2][1]="Kämpfer";
        kunden[3][1]="Schäfer";
        kunden[4][1]="Voges  ";
        
        kunden[0][2]="Hans  ";
        kunden[1][2]="Peter ";
        kunden[2][2]="Gerrit";
        kunden[3][2]="Udo   ";
        kunden[4][2]="Arved ";
        
        kunden[0][3]="56";
        kunden[1][3]="34";
        kunden[2][3]="22";
        kunden[3][3]="76";
        kunden[4][3]="25";
        
        kunden[0][4]="3 ";
        kunden[1][4]="2 ";
        kunden[2][4]="1 ";
        kunden[3][4]="7 ";
        kunden[4][4]="16";

            for(int i=0; i < kunden.length;i++) {
                 System.out.print(kunden[i][0]);
                 System.out.printf("|");
                 System.out.print(kunden[i][1]);
                 System.out.print(" | ");
                 System.out.print(kunden[i][2]);
                 System.out.print(" | ");
                 System.out.print(kunden[i][3]);
                 System.out.print(" | ");
                 System.out.print(kunden[i][4]);
                 System.out.println("|");
                
            }
        return kunden;
    }
    
    public static void verfuegbar (String[][] zimmer, String[][] kunden) {
        String s = "belegt";
        for(int i= 0; i<zimmer.length ;i++) {
            if(s.equals(zimmer[i][3])) {
                System.out.println(zimmer[i][0]);
                System.out.println(zimmer[i][1]);
            }
            else
                System.out.println("Alle Zimmer sind belegt");
        }
    }
    
    
    public static void main (String[] args) {
        verfuegbar(zimmer, kunden);
    }
}

folgende Fehlermeldung bekomme ich:


Code:
Exception in thread "main" java.lang.NullPointerException

    at Zimmer.verfuegbar(Zimmer.java:98)

    at Zimmer.main(Zimmer.java:110)

Ich hoffe ihr könnt mir dann helfen.
 
Ja du musst vor
verfuegbar(zimmer, kunden);
noch
kundenDatei() und zimmerArray() aufrufen.

Davon ab würde ich Dir aber empfehlen Zimmer und Kunden als Klassen zu modellieren.
Zimmer mit den Feldern Nummer, Typ, Kategorie, Zustand.
Kunde mit den Feldern Id, Vorname, Nachname usw.
Die Zuordnung zwischen Zimmer und Kunde würde ich separat ablegen.
Ich nehme an Du steigst gerade in die Programmierung ein und wirst Dich noch mit Objektorientierung weiter beschäftigen müssen :-)
 
Erstmal vielen Dank für die sehr schnelle Rückmeldung.
Also ich habe es jetzt so gemacht wie ihr gesagt habt. Jetzt funktioniert das ganze schon mal so, wie ich das wollte :).

Jetzt werde ich mich dann mal an die Klassenmodellierung machen. Vielen Dank für den Tipp!

Viele Grüße
Banda
 
Okay also ich habe da jetzt mal ein bisschen rum probiert das alles mal in verschiedene Klassen aufzuteilen.
Aber klappen tut das ganze nicht....
Vielleicht kann mir ja nochmal jemand helfen.
Hier der Code:
Java:
package klassen;
public class ZimmerArr {
    public int zimmerNr;
    public String zimmerName;
    public String ausstatung;
    public String status;


    public static void zimmerArray() {
        
        ZimmerArr z1 = new ZimmerArr();
        z1.zimmerNr = 34;
        z1.zimmerName= "Ausblick";
        z1.ausstatung="normal";
        z1.status = "frei";
    
        ZimmerArr z2 = new ZimmerArr();
        z2.zimmerNr = 35;
        z2.zimmerName = "Meerblick";
        z2.ausstatung = "normal";
        z2.status ="frei";
    
        ZimmerArr z3 = new ZimmerArr();
        z3.zimmerNr = 16;
        z3.zimmerName = "Kaptänskajute";
        z3.ausstatung = "rustikal";
        z3.status ="belegt";
    
        ZimmerArr z4 = new ZimmerArr();
        z4.zimmerNr = 356;
        z4.zimmerName = "Präsidentenzimmer";
        z4.ausstatung = "luxuriös";
        z4.status ="belegt";
    
    }

}

Java:
package klassen;
public class KundenAtt {
        public int kundenNr;
        public String name;
        public String nachName;
        public int alter;
        public int anzahlBuchung;

    public static void kundenArray () {
        
        KundenAtt k1 = new KundenAtt();
        k1.kundenNr = 001;
        k1.name = "Hans";
        k1.nachName = "Meier";
        k1.alter = 56;
        k1.anzahlBuchung = 3;
        
        KundenAtt k2 = new KundenAtt();
        k2.kundenNr = 002;
        k2.name = "Peter";
        k2.nachName = "Müller";
        k2.alter = 34;
        k2.anzahlBuchung = 2;
        
        KundenAtt k3 = new KundenAtt();
        k3.kundenNr = 003;
        k3.name = "Gerrit";
        k3.nachName = "Kämpfer";
        k3.alter = 22;
        k3.anzahlBuchung = 1;
        
        KundenAtt k4 = new KundenAtt();
        k4.kundenNr = 004;
        k4.name = "Udo";
        k4.nachName = "Schäfer";
        k4.alter = 76;
        k4.anzahlBuchung = 7;
        
        KundenAtt k5 = new KundenAtt();
        k5.kundenNr = 005;
        k5.name = "Arved";
        k5.nachName = "Voges";
        k5.alter = 25;
        k5.anzahlBuchung = 16;
        
        
    }
}

Java:
import klassen.ZimmerArr;
import klassen.KundenAtt;

public class Verwaltung {    

    
    public static void verfuegbar () {
        ZimmerArr.zimmerArray();
        KundenAtt.kundenArray();
        String s1 = "belegt";
        String s2 = ZimmerArr.z1.status;
        if (s1.equals(s2))
            System.out.print("geschafft");
        else
            System.out.print("nicht geschafft");
        
    }
}

Ich weiß auch nicht so wirklich was ich falsch mache.
Hatte das alles vorher als Array initialisiert aber das habe ich wieder reverted weil es mir sinnlos erschien.
Leider macht mir das z1.status Probleme aber ich finde keinen Grund.
 
Du denkst, z1 wäre ein statisches Feld von ZimmerArr. Das suggeriert jedenfalls dein Zugriff in dem Stil
Java:
ZimmerArr.z1.status;
z1 ist jedoch nur eine lokale Variable in der Methode zimmerArray() und wenn du da dran kommen willst, musst diese Methode die Referenz zurückgeben (return). Da du gleich mehrere Referenzen übergeben möchtest, wirst du vermutlich ein Array oder eine Liste dieser Referenzen nach draußen reichen wollen. Daher:
  1. z1 bis z4 in Array/Liste sammeln
  2. diese Sammlung returnen und entsprechend die Signatur der Methode anpassen (nicht mehr void)
  3. gleiches Spiel bei kundenArray()
P.S.: deine Aufrufe
Java:
ZimmerArr.zimmerArray();
KundenAtt.kundenArray();
bewirken effektiv gar nichts, da du nur lokale Objekte instantiierst und sobald die Referenzen aus dem Scope fallen, werden die Objekte vom Garbage Collector abgeräumt.
 

Ähnliche Themen

Zurück
Oben