2016-04-05 9 views
-2

Also habe ich mich seit einiger Zeit an dieses Problem gehalten und ich kann einfach nicht die Lösung herausfinden. Ich arbeite gerade an einem Projekt, das ein Parkhaus simuliert. Das Parkhaus selbst ist nicht das Problem; es sind die verschiedenen Arten von Kunden, die simuliert werden sollen. Um die Dinge ein wenig einfacher zu machen, werde ich nach der Lösung von einem fragen und damit sollte ich in der Lage sein, die anderen selbst auszuarbeiten. Zunächst ist es erforderlich, für Kunden mit einem Parkausweis eine separate Klasse zu erstellen und diese so zu integrieren, dass ersichtlich ist, welche Autos Inhaber eines Parkausweises sind und welche nicht.Java, Mehrere Klassen und ihre multiplen booleschen Werte

import java.util.Random; 

/* creates a boolean called isPass that is randomly picked to be true or false. */ 
public interface ParkPass { 

    public Random rnd = new Random(); 

    public boolean isPass = rnd.nextBoolean(); 
} 

Dies ist die Klasse, die ich einen Parkausweis zufällig festlegen kann. Da die Simulation über eine andere Klasse erfolgt, kann ich nur die Methode erstellen, mit der Pass auf "True" oder "False" gesetzt wird. Ich kann den Pass selbst nicht in dieser Klasse setzen.

public abstract class Car { 

    private Location location; 
    private int minutesLeft; 
    public boolean isPaying; 
    public boolean isBlue; 


    public void setIsPaying(boolean isPaying) { 
     this.isPaying = isPaying; 
    } 
    // added a method to allow us to set the colour of the car to blue for when they have a parking pass. 
    public void setIsBlue(boolean isBlue) { 
     this.isBlue = isBlue; 
    } 

Dies ist ein kleiner Ausschnitt aus der Car-Klasse, die zeigt, welche booleans zu ihnen gehören und könnten Sie zeigen, in welche Richtung ich mit dieser Simulation zu gehen bin versucht.

Dies ist die Klasse, die aufgerufen wird, wenn ein Auto simuliert wird, das in das Parkhaus hinein und hinaus geht. Hier können Sie sehen, wie ich die ParkPass-Klasse implementiert habe, um die Isblue- und IsPaying-Booleschen Werte in der Car-Klasse zu setzen, damit ich sie im nächsten Code-Teil aufrufen kann Fix.

import javax.swing.*; 
import java.awt.*; 

public class SimulatorView extends JFrame { 
    private CarParkView carParkView; 
    private int numberOfFloors; 
    private int numberOfRows; 
    private int numberOfPlaces; 
    private Car[][][] cars; 

     public void updateView() { 
      /* Create a new car park image if the size has changed. 
       added 2 colours to show the difference between the three different customer types.*/ 
      if (!size.equals(getSize())) { 
       size = getSize(); 
       carParkImage = createImage(size.width, size.height); 
      } 
      Graphics graphics = carParkImage.getGraphics(); 
      for(int floor = 0; floor < getNumberOfFloors(); floor++) { 
       for(int row = 0; row < getNumberOfRows(); row++) { 
        for(int place = 0; place < getNumberOfPlaces(); place++) { 
         Location location = new Location(floor, row, place); 
         Car car = getCarAt(location); 
         Color color = car == null ? Color.white : Car.isBlue ? Color.blue /*: isReservation == true ? Color.green*/ :Color.red ; 
         drawPlace(graphics, location, color); 
        } 
       } 
      } 
      repaint(); 
     } 

Und hier schließlich wir auf das Problem bekomme ich konfrontiert sind. Wenn du es dir jetzt anschaust, wirst du wahrscheinlich einiges falsch finden. Dies liegt daran, dass ich nach 10 Stunden Recherche und ständiger Änderung des Attributs Color irgendwie den Überblick verloren habe, wie genau ich die Booleans implementieren wollte, die zuvor erstellt wurden, um den Unterschied zwischen den beiden Kundentypen aufzuzeigen. Ich bin nicht sehr erfahren in der Programmierung, also gab ich nach einer Weile einfach auf und entschied mich, hier zu fragen.

Jetzt für die Frage, mit all diesen separaten Klassen erstellen ihre eigenen Boolean, wie kann ich sicherstellen, dass wenn ich die Simulation verwenden die Autos mit einem Parking Pass blau sein wird, während die Autos, die normalerweise bezahlen, als rot angezeigt werden ?

+0

'Farbe Farbe = Auto == null? Farbe.weiß: Car.isBlue? Farbe.blau/*: isReservation == wahr? Color.green * /: Color.red; 'dieser Teil scheint zu korrigieren. Sind Sie sicher, dass die DrawPlace-Methode korrekt mit den gegebenen Parametern übereinstimmt? – rdonuk

+0

private void drawPlace (Grafiken, Standort, Farbe) { graphics.setColor (color); graphics.fillRect ( location.getFloor() * 260 + (1 + (int) Math.floor (location.getRow() * 0,5)) * 75 + (location.getRow()% 2) * 20, 60 + location.getPlace() * 10, 20 - 1, 10 - 1); // TODO verwenden dynamische Größe oder Konstanten } Ich bin mir ziemlich sicher, dass hier nichts falsch ist, ich denke, das Problem hat mit der booleschen Einrichtung in den anderen Klassen zu tun. –

Antwort

1
public interface ParkPass { 

    public Random rnd = new Random(); 

    public boolean isPass = rnd.nextBoolean(); 
} 

Problem ist in dem obigen Teil. Sie können keine Instanzvariablen in Schnittstellen definieren. Diese Mitglieder werden standardmäßig static final. Verschieben Sie diese Mitglieder in Car Klasse und es wird funktionieren.