2016-04-03 6 views
0

So gibt es eine Klasse Hotel, die 20 Zimmer in Form einer Matrix 4x5 (4 Etagen, 5 Zimmer auf jeder Etage) enthält. Die Klasse Room hat die Eigenschaften:Probleme mit variablem Umfang außerhalb der for-Schleife

floorNumber(int), 
roomNumber(int), 
numberOfBeds(int), 
occupation(boolean) 
etc. 

Für occupation, true bedeutet beschäftigt und falsche Mittel frei.

Eines der Verfahren I im Hotel zu implementieren ist derjenige, der ein Zimmer

reserve(int floorNumber, int roomNumber) 

Diese Methode behält sollten überprüfen, ob Tätigkeit wahr oder falsch ist.
Wenn es wahr ist, dann Reservierung nicht, und wenn es falsch ist, soll ich Beruf auf true gesetzt, mit der Methode

setOccupation(boolean t). 

Auch Methode reserve return boolean (wahr oder falsch), je nachdem, ob Reservierung gelungen oder nicht. In dieser Methode, raten Sie, ist das Problem mit dem Umfang einer Variablen. So gibt es:

public boolean reserve(int floorNumber, int roomNumber){ 
    boolean flag = false; 
    for (int i = 0; i < 5; i++){ 
     if(rooms[floorNumber][i].getRoomNumber() == roomNumber){//every element in matrix rooms has this property: rooms[floorNumber][some_number_from_1_to_5] 
     if (rooms[floorNumber][i].getOccupancy() == false){ 
      rooms[floorNumber][i].setOccupancy(true); 
      flag = true; 
     } 
     else 
      flag = false; 
     } 
    } 
    return flag; 
    } 

Das Problem ist, wenn ich (in erster Linie) Flag auf true gesetzt, Funktion true zurückgibt, und wenn ich Flag auf false gesetzt, Funktion gibt false zurück.
Der Grund, warum ich etwas Wert Flagge in erster Linie zuzuordnen ist, weil Compiler zeigt:

Error: variable flag might not have been initialized 

Also, das Problem ist, dass es scheint, wie Methode nie Code mit for-Schleife ausführt.
Ich weiß, dass in Schleife definierte Variablen außerhalb der Schleife nicht existieren, aber die außerhalb definierten Schleifen sollten ihre Werte in Schleife ändern. Wie in dieser Frage hier: Java - Access variable inside and outside of for-loop

+3

Ihr Code wird nicht kompiliert.'boolean flag false;' ist ungültig. Korrigiere diese Anweisung und kompiliere sie erneut. –

+0

Sorry, ich habe queston bearbeitet, es kompiliert jetzt. Ursprünglich heißt es 'boolean flag = false;' – misty

+0

Warum machst du hier sowieso eine Schleife? Es ist ein 4 x 5-Array. Sie kennen die Stockwerk- und Raumnummer (z. B. 2, 3). Holen Sie sich das Zimmer direkt aus dem Zimmer-Array (z. B. Zimmer Zimmer = Zimmer [2] [3]). – KevinO

Antwort

1

Ich fand, was das Problem war.
Es war tatsächlich Index floorNumber in Matrix rooms[floorNumber][], die von 0 bis 3 geht (es gibt 4 Etagen), natürlich.
Aber im wirklichen Leben, Boden Zahlen gehen von 1, und ich übergebene Argument zu

reserve(int floorNumber,int roomNumber)

ohne dass man bedenkt.
Also, ich habe floorNumber nur um 1 im Körper der Methode dekrementiert, und es funktioniert jetzt.

1

Es gibt eine einfachere Möglichkeit zu erreichen, was Sie tun möchten. Sie benötigen keine boolesche Flagge. Sie können true sofort bei Erfolg zurückgeben oder false zurückgeben, wenn die gesamte Schleife ausgeführt wurde, ohne einen Raum gefunden zu haben.

public boolean reserve(int floorNumber, int roomNumber){ 
    for (int i = 0; i < 5; i++) { 
    //every element in matrix rooms has this property: 
    //rooms[floorNumber][some_number_from_1_to_5] 
    if (rooms[floorNumber][i].getRoomNumber() == roomNumber){ 
     if (rooms[floorNumber][i].getOccupancy() == false){ 
     rooms[floorNumber][i].setOccupancy(true); 
     return true; 
     } 
    } 
    } 
    return false; 
} 

Aber wenn Sie darauf bestehen, auf dem ursprünglichen Ansatz anwenden, der ein Flag verwendet, dann gilt: es zunächst einen Wert von falschen geben (im Fall gelang es keinen Raum). Wenn wir ein nicht besetztes Zimmer (erfolgreich) finden, stellen Sie es auf "wahr" ein. Wenn wir einen belegten Raum finden, nicht den Flaggenwert berühren.

public boolean reserve(int floorNumber, int roomNumber){ 
    boolean flag = false; 
    for (int i = 0; i < 5; i++) { 
    //every element in matrix rooms has this property: 
    //rooms[floorNumber][some_number_from_1_to_5] 
    if (rooms[floorNumber][i].getRoomNumber() == roomNumber){ 
     if (rooms[floorNumber][i].getOccupancy() == false){ 
     rooms[floorNumber][i].setOccupancy(true); 
     flag = true; 
     } // else DO NOTHING 
    } 
    } 
    return flag; 
} 
+0

Wenn ich das tue, sagt Compiler: '1 Fehler gefunden: Fehler: fehlende Return-Anweisung" – misty

+0

@LazyLady: Sorry, ich verpasste eine Ebene der Zahnspange. Jetzt behoben. – Nayuki

+0

Nichts ... Ich denke, ich werde Debugger verwenden ... – misty

Verwandte Themen