Java Programm umschreiben, brauche hilfe!?
Ich habe dieses Programm geschrieben:
import java.util.Scanner;
public class Queue {
Scanner in = new Scanner(System.in);
class QueuePart {
private String name;
private QueuePart next;
public QueuePart(String name) {
this.name = name;
next = null;}
public QueuePart getNext() {
return next;}
public void setNext(QueuePart next) {
this.next = next;}
public String getName() {return name;
}
}
private QueuePart first, last;
private int elemente;
public Queue() {
first = null;
last = null;
elemente = 0;}
public void leave() {
if(!this.isEmpty()) {
first = first.getNext();
if(this.isEmpty()) {
first = null;
last = null;}
elemente--;}
}
public void enter() {
System.out.printf("Name: ");
String name = in.next();
if(this.isEmpty()) {
first = new QueuePart(name);
last = first;elemente++;}
else {
last.setNext(new QueuePart(name));
last = last.getNext();
elemente++;}
}
public boolean isEmpty() {
return first == null;
}
public boolean isFull() {
return elemente > 0;
}
public int getElemente() {
return elemente;}
public QueuePart getFirst() {
return first;}
public QueuePart getLast() {
return last;
}
}
Das Programm weiß bisher selbst, wie viele Elemente sich in ihr befinden.
Ich will das Programm jetzt aber umschreiben und will, dass die Schlange Integerzahlen aufnehmen kann.
Ich will die Instanzvariablen private int nextFree; und private int[] arr; mit einbauen.
Kann mir jemand dabei helfen wie genau ich das umbauen muss?
1 Antwort
Sprich, du hast die Aufgabe bekommen, deine Queue in eine ArrayList umzuwandeln. Die innere Klasse fliegt zunächst raus und wird stattdessen gegen das Array ersetzt.
Wofür nextFree stehen soll, ist mir unklar. Der Name ist noch zu uneindeutig. Vielleicht beinhaltet er die Anzahl an noch freien Plätzen, dann könnte man ihn gut für isFull (dann ist der Wert 0) einsetzen und isEmpty (dann ist der Wert genauso groß wie die Arraylänge) einsetzen. Die Anzahl an Elementen entspricht der Differenz aus Arraylänge und Anzahl besetzter Plätze, die beiden Methoden getFirst / getLast sollten klar sein.
Beim Einlesen musst du an sich auch immer nur den ersten freien Index finden, der sich durch die Anzahl besetzter Plätze berechnen lässt (man muss nur aufpassen, dass man nicht aus dem Indexrahmen des Arrays hinausläuft) und da die Zahl einsetzen.
Für den Scanner empfiehlt es sich, nextInt einzusetzen.
Soweit ist die Aufgabe doch recht einfach. Da du schon diese Queue geschrieben hast, wird dir diese Änderung wohl kaum Probleme bereiten.
Nur ein Hinweis noch: Vergib einheitliche und aussagekräftige, eindeutige Bezeichner. Wenn ich getElemente lese, erwarte ich eine Ausgabe aller Elemente und nicht deren Anzahl. Da wäre getNumberOfElements passender.