Wie Programmiere ich eine Arztpraxis Simulation in BlueJ?

4 Antworten

In dem (nicht konventions-gerechtem) UML-Diagramm steht PATIENT[] schlange. (Ebenso wenig werden hier Java-Konventionen eingehalten)

Das PATIENT[] deutet auf ein Array hin, das 30 groß sein soll.

public class Warteschlange
{
   private Patient[] schlange;

   public Warteschlange()
   {
      this.schlange = new Patient[30];
   }
   
   // ...
}

So in etwa könnte es aussehen.
Mit den weiteren geforderten Methoden ist dann die Verwaltung dieser Warteschlange abgeschlossen.

Eine Schleife ist nötig bei der Methode informationAusgeben().
Und ggf. beim Entfernen(), falls gefordert, dass das Array immer um ein "aufrutschen" soll.

Kleine Anmerkung zu deiner Patient-Klasse:
Dein Konstruktor ist etwas merkwürdig von der Funktion her. Vielleicht solltest du dir das nochmal anschauen und überlegen, was daran geändert werden muss, damit das Programm ordnungsgemäß Funktioniert.

Ihr verstoßt ja gegen die Java Conventions ... Klassen schreibt man nicht durchweg groß, nur Konstanten. Hier meine Vorschläge:

// Patient.java

public class Patient {

  private String name;

  public Patient(String name) {
    this.name = name;
  }

  public void informationAusgeben() {
    System.out.println(name);
  }

}



// Warteschlange.java

public class Warteschlage {

  private Patient[] schlange = new Patient[30];
  private int laenge = 0;

  public Warteschlange() {
    // Konstruktor
  }

  public void einfuegen(Patient p) {
    if (schlange.length > laenge) {    
      schlange[laenge] = p;
      laenge++;
    }
  }

  public Patient entfernen() {
    laenge--;
    Patient p = schlange[laenge];
    schlange[laenge] = null;

    // Ist das richtig so?
    // Soll der entfernte Patient zurückgegeben werden?
    return p;
  }

  void InformationAusgeben() {
    // Auch hier unklar. So?
    for (Patient p : schlange) {
      p.informationAusgeben;
    }
  }

}
30

Ihr verstoßt ja gegen die Java Conventions...

Und du verstößt gegen die "Warteschlangen Conventions"... ;)

Warteschlangen arbeiten nach dem Prinzip "FiFo (First in, First out)", aber du hast mit deiner "entfernen()"-Methode nen Stapel draus gemacht, indem du nach "FiLo (First in, Last out)" gearbeitet hast...

Damits ne Warteschlange wird, müsstest du die "entfernen()"-Methode z.B. so aufbauen:

public Patient entfernen(){
if(schlange[0] == null) return null;
Patient p = schlange[0];
for(int i = 0; i < laenge - 1; ++i){
schlange[i] = schlange[i + 1];
}
schlange[--laenge] = null;
return p;
}

Ausserdem hat deine "Warteschlange.InformationAusgeben()" 2 Probleme und einen Konventionsverstoß:

  1. Sollte ein Element der Schlange zufälligerweise den Wert "null" haben, gibts ne "java.lang.NullPointerException"
  2. Bei "p.informationAusgeben;" fehlen die Klammern.
  3. "Warteschlange.InformationAusgeben"... Der Methodenname beginnt mit nem Großbuchstaben... Konventionsverstoß... ;)

So läufts:

public void informationAusgeben(){
for(Patient p : schlange){
if(p!=null) p.informationAusgeben();
}
}
2
34
@Isendrak

Warteschlangen arbeiten nach dem Prinzip "FiFo (First in, First out)", aber du hast mit deiner "entfernen()"-Methode nen Stapel draus gemacht, indem du nach "FiLo (First in, Last out)" gearbeitet hast...

Hast natürlich Recht. Das wäre ja mal eine Warteschlange, in der der letzte als erstes dran ist ... Hab ich gar nicht dran gedacht.

  1. Sollte ein Element der Schlange zufälligerweise den Wert "null" haben, gibts ne "java.lang.NullPointerException"
  2. Bei "p.informationAusgeben;" fehlen die Klammern.

Stimmt, da war ich unachtsam, wozu auch dieser Editor hier nicht unwesentlich beigetragen hat.

Konventionsverstoß... ;)

Da habe ich mich selbst vom Diagramm verleiten lassen.

Naja, bin wohl irgendwie etwas müde heute ...

1

Naja rein logisch gesehen muss die Warteschlange ein Patienten-Array als Attribut haben, in welchen Patienten gepusht und removed werden können.

Steht ja sogar in der Aufgabenstellung. Wo genau hängst du denn?

3

Das Problem ist, dass ich nicht genau weiß was und wie ich die Methoden schreiben muss. Ich schätze mal dass Attribut wäre: PATIENT[30] schlange;  stimmts?

0

Wie sieht die Punktnotation in Java aus oder wie kann ich auf auf andere Klassen zugreifen?

Wie kann ich in der Klasse Telefon die Methoden aus der Klasse Telefonbuch verwenden ? Wenn ich es mit Punktnotation versuche wie z.B.

public void eintrag_hinzufuegen(String name)
{
    Telefonbuch.hinzufuegen(name);
}

, kommt die Fehlermeldung : non static method cannot be referenced from a static context

1)

import java.util.ArrayList;
public class Telefon
{
protected ArrayList <Telefonbuch> telefonbuch;
protected boolean eingeschaltet;
        
        public Telefon()
    {
        // initialise instance variables
        telefonbuch = new ArrayList <Telefonbuch>();
    }
    
    public void anrufen (String name)
    {
    }
    
    public void einschalten()
    {
        eingeschaltet = true;
    }
    
    public void telefonbuch_uebersicht()
    {
        
    }
    
    public void eintrag_hinzufuegen(String name)
    {
    }
    
    public void eintrag_entfernen(String name)
    {
    }
    
    public boolean eintrag_suchen(String name)
    {
    }
}

2)

import java.util.Arrays;

/**
 * Write a description of class Telefonbuch here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Telefonbuch
{
    // instance variables - replace the example below with your own
    private int anzahl_eintrag;
    private int kapazitaet;
    private String[] name_liste;
    protected boolean gefunden;

    /**
     * Constructor for objects of class Telefonbuch
     */
    public Telefonbuch()
    {
        // initialise instance variables
        String [] name_liste = new String[kapazitaet];
        gefunden = false;
    }
    
    public void set_kapazitaet(int x)
    {
        kapazitaet = x;
    }
    
    public void telefonbuch_uebersicht()
    {
        for(int i=0; i < name_liste.length; i++)
        {
        System.out.println(name_liste[i]);
        }
    }
    
    public void hinzufuegen(String name)
    {
        
    }
    
    public void entfernen(String name)
    {
    }
    
    public boolean suchen(String name)
    {
        for(int i=0; i < name_liste.length; i++)
        {
         if(name_liste[i].equals(name))
         {
         gefunden = true;
         }
         else
         {
         //Abbruch
         }
        }
        return gefunden;
    }
}

...zur Frage

Wie gebe ich nach Erzeugung eines Objektes ein "int" Array im BlueJ-Methodenaufruf ein?

Ich sitze vor einem eigentlich so banalem Problem. Ich habe eine Methode geschrieben die durch Benutzereingabe einen String und ein int Array beim Aufruf übernehmen soll. Ich weiß wie ich den String in BlueJ beim Aufruf eingebe. Einfach in die "meinStringEingeben", aber wie mache ich das beim int Array oder überhaupt bei einem Array? Ich habe so einiges versucht. "Gefunden" habe ich nur diese Möglichkeit { irgendEineZahl } ABER wenn ich das mache dann erzeugt er kein int array sondern ein einfaches int, wodurch es selbstverständlich dann zum ArrayIndexOutOfBoundsException Auswurf kommt.

Mein Methodenkopf sollte auch nicht die Quelle des Übels sein

void meineMethode (String string, int[] intArray) deklariert habe.

...zur Frage

Wartenbefehl bei BlueJ

Hallo, ich programmiere seit kurzem mit BlueJ und als ich den Wartenbefehl "Sleep(5)" verwenden wollte kam die Fehlermeldung "cannot find Symbol - method sleep(int)".

Nachdem ich das Problem gegoogelt habe, hatte ich immer noch keine Antowrt. Überall stand, dass ich der "Sleep"-Befehl funktioniert. Ich habe auch schon die neuste BlueJ-Version runtergeladen. Gebracht hat es nichts.

Falls es einen Unterschied macht wie ich den Sleep-Befehl verwendet, hier der Quellcode:

public void AutomatischSchalten(){

    for(int i=0; i<5; i++) { 
    SchaltenWO();
    Sleep(1);
    SchaltenGS();

SchaltenWO() und SchaltenGS() habe ich schon deklariert.

Wieso funktioniert das nicht?

Schon mal danke im Vorraus,

Mit freundlichen Grüßen,

PlaysationFand

...zur Frage

Wie kann ich in BlueJ einen String, den ich beim erstellen des Objektes festgelegt habe wieder ändern?

Habe es schon mit der set-Methode probiert, jedoch weiß ich nicht genau wie ich das machen soll. Fogendes habe ich mir gedacht:

private String x //x ist zuerst ""

public void setX(String neu) { neu = x; }

wenn ich diese methode ausführe ändert sich aber nichts, hat jemand einen rat?

Danke im Voraus, LG

...zur Frage

Was möchtest Du wissen?