Ich bekomme bei folgendem Code, zB bei insertAt immer einen stackOverflow bei toString. Kann mir bitte jemand helfen?!
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
*
* Beschreibung
*
* @version 1.0 vom 13.01.2021
* @author
*/
public class GUI_DynArray extends JFrame {
// Anfang Attribute
private DynArray MeineDynamischeReihung = new DynArray();
private JButton butIsEmpty = new JButton();
private JLabel lblIsEmpy = new JLabel();
private JTextField txtEingabe = new JTextField();
private JNumberField numIndex = new JNumberField();
private JButton butAppend = new JButton();
private JButton butSetItem = new JButton();
private JButton butInsertAt = new JButton();
private JButton butDelete = new JButton();
private JButton butGetItem = new JButton();
private JButton butGetLength = new JButton();
private JTextArea araAusgabe = new JTextArea("");
private JScrollPane araAusgabeScrollPane = new JScrollPane(araAusgabe);
// Ende Attribute
public GUI_DynArray() {
// Frame-Initialisierung
super();
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 730;
int frameHeight = 715;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setTitle("GUI_DynArray");
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten
butIsEmpty.setBounds(16, 16, 161, 41);
butIsEmpty.setText("isEmpty");
butIsEmpty.setMargin(new Insets(2, 2, 2, 2));
butIsEmpty.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
butIsEmpty_ActionPerformed(evt);
}
});
cp.add(butIsEmpty);
lblIsEmpy.setBounds(192, 16, 97, 41);
lblIsEmpy.setText("");
cp.add(lblIsEmpy);
txtEingabe.setBounds(16, 72, 281, 41);
cp.add(txtEingabe);
numIndex.setBounds(312, 72, 81, 41);
numIndex.setText("");
cp.add(numIndex);
butAppend.setBounds(16, 128, 161, 41);
butAppend.setText("append");
butAppend.setMargin(new Insets(2, 2, 2, 2));
butAppend.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
butAppend_ActionPerformed(evt);
}
});
cp.add(butAppend);
butSetItem.setBounds(16, 184, 161, 41);
butSetItem.setText("setItem");
butSetItem.setMargin(new Insets(2, 2, 2, 2));
butSetItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
butSetItem_ActionPerformed(evt);
}
});
cp.add(butSetItem);
butInsertAt.setBounds(16, 240, 161, 41);
butInsertAt.setText("insertAt");
butInsertAt.setMargin(new Insets(2, 2, 2, 2));
butInsertAt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
butInsertAt_ActionPerformed(evt);
}
});
cp.add(butInsertAt);
butDelete.setBounds(16, 296, 161, 41);
butDelete.setText("delete");
butDelete.setMargin(new Insets(2, 2, 2, 2));
butDelete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
butDelete_ActionPerformed(evt);
}
});
cp.add(butDelete);
butGetItem.setBounds(16, 352, 161, 41);
butGetItem.setText("getItem");
butGetItem.setMargin(new Insets(2, 2, 2, 2));
butGetItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
butGetItem_ActionPerformed(evt);
}
});
cp.add(butGetItem);
butGetLength.setBounds(16, 408, 161, 41);
butGetLength.setText("getLength");
butGetLength.setMargin(new Insets(2, 2, 2, 2));
butGetLength.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
butGetLength_ActionPerformed(evt);
}
});
cp.add(butGetLength);
araAusgabeScrollPane.setBounds(191, 128, 504, 532);
cp.add(araAusgabeScrollPane);
// Ende Komponenten
setVisible(true);
} // end of public GUI_DynArray
// Anfang Methoden
public static void main(String[] args) {
new GUI_DynArray();
} // end of main
public void butIsEmpty_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
lblIsEmpy.setText(""+MeineDynamischeReihung.isEmpty());
} // end of butIsEmpty_ActionPerformed
public void butAppend_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
String temp = txtEingabe.getText();
MeineDynamischeReihung.append(temp);
araAusgabe.setText(MeineDynamischeReihung.toString());
} // end of butAppend_ActionPerformed
public void butSetItem_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
String temp = txtEingabe.getText();
int index = numIndex.getInt();
MeineDynamischeReihung.setItem(index, temp);
araAusgabe.setText(MeineDynamischeReihung.toString());
} // end of butSetItem_ActionPerformed
public void butInsertAt_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
String temp = txtEingabe.getText();
int index = numIndex.getInt();
MeineDynamischeReihung.insertAt(index, temp);
araAusgabe.setText(MeineDynamischeReihung.toString());
} // end of butInsertAt_ActionPerformed
public void butDelete_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
int index = numIndex.getInt();
MeineDynamischeReihung.delete(index);
araAusgabe.setText(MeineDynamischeReihung.toString());
} // end of butDelete_ActionPerformed
public void butGetItem_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
int index = numIndex.getInt();
txtEingabe.setText(MeineDynamischeReihung.getItem(index));
} // end of butGetItem_ActionPerformed
public void butGetLength_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
numIndex.setInt(MeineDynamischeReihung.getLength());
} // end of butGetLength_ActionPerformed
// Ende Methoden
} // end of class GUI_DynArray
class DynArray {
private boolean frei;
private int nr;
private String inhalt;
private DynArray nachfolger;
public DynArray() {
this.frei=true;
this.nr=0;
this.inhalt="";
} // Ende des Konstruktors.
public boolean isEmpty() {
return this.frei;
} // Ende von isEmpty
public String getItem(int index) {
// ist die aktuelle Karte diejenige mit dem gewünschten Index?
if(this.nr == index) {
// wenn ja, prüfe, ob die Karte "belegt" ist.
if(!this.frei) {
// wenn auch das der Fall ist, gib this.inhalt zurück.
return this.inhalt;
} else { // wenn nicht, muss eine Fehlermeldung erzeugt werden.
return "==> Der Index existiert nicht!";
}
} else {
// wenn nicht,
// prüfe, ob es einen Nachfolger gibt.
if(this.nachfolger!=null) {
return this.nachfolger.getItem(index);
// wenn ja, reiche das Problem an ihn weiter.
} else { // wenn nein, muss eine Fehlermeldung erzeugt werden.
return "==> Der Index existiert nicht!";
}
}
} // Ende von getItem
public void append(String s) {
// Ist die aktuelle Karte frei?
if(this.frei) {
// Wenn ja, nimmt sie den Inhalt auf. Fertig.
this.inhalt=s;
this.frei=false;
} else {
// Wenn nein, prüfe, ob es einen Nachfolger gibt.
if(this.nachfolger==null) {
// Nachfolger anlegen
this.nachfolger = new DynArray();
this.nachfolger.nr = this.nr + 1;
}
// Nachfolger mit der Aufgabe betrauen, den Inhalt aufzunehmen.
this.nachfolger.append(s);
}
} // Ende von append
public void insertAt(int n, String s) {
// negative Einfügepositionen werden ignoriert
if(n>=0) {
// ist die aktuelle Karte die gewünschte Position?
if(this.nr == n) {
// ist die Karte frei?
if(this.frei) {
this.frei=false;
this.inhalt=s;
} else {
// Lege eine neue Dynamische Reihung an mit Namen "temp"
DynArray temp = new DynArray();
// Speichere eine Kopie der aktuellen Dynamischen Reihung in temp
temp = this;
// Speichere den neuen Inhalt auf der aktuellen Karte
this.inhalt = s;
// Lege die vorher angefertigte Kopie als Nachfolger fest
this.nachfolger = temp;
// this.nachfolger.neueNummern();
}
} else {
// Gib das Problem an den Nachfolger weiter
if(this.nachfolger==null) {
this.nachfolger = new DynArray();
this.nachfolger.nr = this.nr + 1;
this.nachfolger.append(s);
} else {
this.nachfolger.insertAt(n, s);
}
}
}
} // Ende von insertAt
private void neueNummern() {
this.nr = this.nr + 1;
if(this.nachfolger != null) {
this.nachfolger.neueNummern();
}
} // Ende von neueNummern
public int getLength() {
if(this.frei) {
return 0;
} else {
if(this.nachfolger != null) {
return 1 + this.nachfolger.getLength();
} else {
return 1;
}
}
}
public void setItem(int n, String s) {
if(n>=0) {
if(this.nr == n) {
this.inhalt=s;
this.frei=false;
} else {
if(this.nachfolger != null) {
this.nachfolger.setItem(n, s);
}
}
}
} // Ende von setItem
public void delete(int n) {
if(n>=0) {
if(this.nr == n) {
if(this.nachfolger==null) {
this.frei=true;
} else {
this.frei = this.nachfolger.frei;
this.nr = this.nachfolger.nr;
this.inhalt = this.nachfolger.inhalt;
this.nachfolger = this.nachfolger.nachfolger;
this.neueNummern2();
}
} else {
if(this.nachfolger!=null) {
this.nachfolger.delete(n);
}
}
}
} // Ende von delete
private void neueNummern2() {
this.nr = this.nr - 1;
if(this.nachfolger != null) {
this.neueNummern2();
}
} // Ende von neueNummern2
public String toString() {
if(this.frei) {
return "===";
}
if(this.nachfolger != null) {
return "" + this.nr + ": " + this.inhalt + "\n" + this.nachfolger.toString();
}
return "" + this.nr + ": " + this.inhalt + "\n===";
} // Ende von toString
} // Ende von class DynArray