2017-03-12 21 views
1

Ich mache ein Hotelbuchungssystem, das über die Konsole angezeigt werden soll. Das System sollte dem Benutzer ermöglichen, bis zu 10 Zimmernummern (1-10) auszuwählen und dem Kunden den Namen zu geben, der gebucht wird. Im Folgenden habe ich eine Methode beschrieben, um alle Räume leer zu halten, wenn das Programm ausgeführt wird.Fehler beim Versuch, ein Array in alphabetischer Reihenfolge anzuzeigen

private static void initialise(String hotelRef[]) { 
for (int x = 1; x < 11; x++) { 
    hotelRef[x] = "EMPTY"; 
    } 
} 

Ich kann Zimmer buchen und sehe sie aber, wenn ich versuche, um das Array zu sortieren, in alphabetischer Reihenfolge angezeigt werden, beendet sie das Programm mit einem Fehler. (Nullpointerexzeption im Hauptthread).

 Arrays.sort(hotel);     
      for (int x = 1; x < 11; x++) { 

       System.out.println(Arrays.toString(hotel)); 

      } 

Oben ist was ich derzeit versuche, aber es erreicht nicht die erste Zeile. Irgendeine Idee, wie ich das Array in der Reihenfolge anzeigen kann? Jede Hilfe wird sehr geschätzt.

P.s vergessen zu erwähnen, dass das Array am Anfang der Hauptmethode initialisiert wird. Der obige Code ist in einer anderen Methode. Meine Hauptmethode:

public static void main(String[] args) { 
    String[] hotel = new String[11]; 
    initialise(hotel); 
    Menu(hotel); 
} 
+0

Willkommen beginnen, Paketüberfluss! Bitte nehmen Sie die [Tour] (http://stackoverflow.com/tour), schauen Sie sich um und lesen Sie die [Hilfe] (http://stackoverflow.com/help), insbesondere [Wie frage ich eine gute Frage?] (http://stackoverflow.com/help/how-to-ask) und [Was kann ich hier fragen?] (http://stackoverflow.com/help/on-topic). –

Antwort

0

Erste Ihr Loop-Start von 1 bis 11, so dass immer die erste valus ist null:

[null, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY] 
--^^------------------------------------------------------------------------ 

Zweite, wenn Sie Ihre Array ändern Sie sollten zurückkehren es.

Ihr Programm wie folgt sein sollte:

public static void main(String[] args) { 
    String[] hotel = new String[11]; 
    hotel = initialise(hotel); 
    Menu(hotel); 

} 

private static String[] initialise(String hotelRef[]) { 
    for (int x = 0; x < hotelRef.length; x++) { 
     hotelRef[x] = "EMPTY"; 
    } 
    return hotelRef; 
} 

private static void Menu(String[] hotel) { 
    Arrays.sort(hotel); 
    for (int x = 0; x < hotel.length; x++) { 
     System.out.println(Arrays.toString(hotel)); 
    } 
} 

Hinweis

Wenn Sie die Länge kein Problem machen diese können die Länge wie diese x < 11 verwenden, wenn Sie die Größe ändern, so das alles arrayName.length statt wie hotel.length Gebrauch zu vermeiden

+0

Ich habe das Array am Anfang initialisiert, aber es scheint immer noch nicht zu funktionieren. Ich bin ziemlich verwirrt warum. –

+0

Können Sie Ihre Hauptmethode hinzufügen. –

+0

Ich habe die Hauptmethode hinzugefügt und die 1 zu 0 und 11 zu 10 geändert. Wenn ich versuche, darin zu laufen, ist dies der Fehler: Ausnahme im Thread "Haupt" java.lang.NullPointerException \t bei java.util. ComparableTimSort.countRunAndMakeAscending (ComparableTimSort.java:325) \t bei java.util.ComparableTimSort.sort (ComparableTimSort.java:188) \t bei java.util.Arrays.sort (Arrays.java:1246) \t bei hotelsystem.HotelSystem .Menu (HotelSystem.java:86) \t bei hotelsystem.HotelSystem.main (HotelSystem.java:23) –

1

hier ist Ihr Problem:

for (int x = 1; x < 11; x++) { 

Sie verwenden natürliche Zahlen für die Indizierung innerhalb des Arrays, aber in Java beginnen Indizes mit 0. Daher wird das erste Element in Ihrem Array nicht initialisiert.

Im Gegenzug, wenn Arrays.sort(hotel) versucht, den equals() Methode auf dem Element hotel[0] es wirft eine NullPointerException aufzurufen.

Lösung:

Gewöhnen Sie sich an Null basierte Indexierung.

0

Array-Indizes beginnen bei 0, aber Ihre Schleife beginnt bei Index 1. Also hotel[0] ist null.

0

Nur ein Problem auf der for-Schleife.
Sie haben mit 0 nicht 1 zu starten:

private static void initialise(String hotelRef[]) { 
    for (int x = 0; x < 10; x++) { 
    hotelRef[x] = "EMPTY"; 
    } 
} 

Weil, wenn man das Hotel Array wie folgt instanziiert:

String[] Hotel = new String[10] 

Ihnen 10 Zimmer haben mit 0 bis 9

Verwandte Themen