Kopieren eines Arrays

Status
Nicht offen für weitere Antworten.

sebjensen

Mitglied
Hallo.

Ich habe begonnen einen Stack zu implementieren, denn ich nun auch fertig geschrieben habe. Hier schon mal der Quelltext:

Code:
public class Stack {
	
	public static final int CAPACITY = 1000;
	// Default-Laenge des Arrays
	
	private int capacity;
	// verwendete Laenge des Arrays
	
	private int[] S;
	// Array S um Stack zu implementieren
	
	private int top = -1;
	// Position des obersten Elements im Stack
	
	public Stack () {
		this(CAPACITY);
		}
	
	public Stack (int cap) {
		capacity = cap;
		S = new int [capacity];
		}
	// nur Initialisierung des Stacks
	
	public int size () {
		return (top + 1);
		}
	// gibt Hoehe des Stacks aus
	
	public boolean isEmpty () {
		return (top < 0);
		}
	
	public void push (int element) throws StackException {
		if (size() == capacity)
			throw new StackException("Stack ist voll");
		S[++top] = element;
		}
	
	public int top() throws StackException {
		if (isEmpty())
			throw new StackException("Stack ist leer");
		return S[top];
		}

	public int pop () throws StackException{
		if (isEmpty()) {
			throw new StackException("Stack ist leer");
			}
		int element = S[top--];
		return element;
		}
}



Nun wollte ich den Inhalt des Arrays in ein großeres Array kopieren, falls das Array voll sein sollte.


Code:
public class StackTestDrive {
	
	public static void main(String [] args) throws StackException {
		
		Stack Test = new Stack(5);
		
		Test.push(1);
		Test.push(2);
		Test.push(3);
		Test.push(4);
		Test.push(5);
		System.out.println(Test.size());
		System.out.println(Test.isEmpty());
		Test.push(6);

		}
	}


Dieses Programm bricht mit der Exception "Stack ist voll" ab. Dies soll aber nicht passieren, sondern die einzelnen Elemente sollen nun in ein großeres Array kopiert werden. Mir ist bekannt, dass ich eine Methode arraycopy() gibt, aber ich kann diese nicht einbauen. Kann mir da vielleicht einer helfen?
Wäre echt super. Vielen Dank.
 
B

Beni

Gast
Sowas?
Code:
int[] oldS = ... // dein s
int[] newS = new int[ oldS.length * 2 + 1 ]; // nächster Array mit doppelter Grösse
System.arraycopy( oldS, 0, newS, 0, oldS.length ); // kopieren
oldS = newS; // zuweisen
 

sebjensen

Mitglied
Das sieht prinzipiell schon mal nicht schlecht aus, aber wo in den Code packe ich das hin, und was gehört genau in die Zeile

Code:
int [] oldS =  ...


Der Abschnitt müsste doch eigentlich in die PUSH-Methode, da nur dort dieser Fehler auftreten kann.


Dieser Abschnitt läuft leider nicht:

Code:
int[] newS = new int[ oldS.length * 2 + 1 ];
 

Murray

Top Contributor
sebjensen hat gesagt.:
was gehört genau in die Zeile
Code:
int [] oldS =  ...

Code:
int[] oldS = S;

sebjensen hat gesagt.:
Der Abschnitt müsste doch eigentlich in die PUSH-Methode, da nur dort dieser Fehler auftreten kann.
Richtig, das Vergrößern muss anstelle der Exception passieren.

sebjensen hat gesagt.:
Dieser Abschnitt läuft leider nicht:

Code:
int[] newS = new int[ oldS.length * 2 + 1 ];

Was läuft denn da nicht?
 

sebjensen

Mitglied
Hallo.

Also ich habe jetzt insgesamt diese beiden Klassen, wie folgt programmiert:

Code:
public class Stack {
	
	public static final int CAPACITY = 1000;
	// Default-Laenge des Arrays
	
	private int capacity;
	// verwendete Laenge des Arrays
	
	private int[] S;
	private int[] newS;
	// Array S um Stack zu implementieren
	
	private int top = -1;
	// Position des obersten Elements im Stack
	
	public Stack () {
		this(CAPACITY);
		}
	
	public Stack (int cap) {
		capacity = cap;
		S = new int [capacity];
		}
	// nur Initialisierung des Stacks
	
	public int size () {
		return (top + 1);
		}
	// gibt Hoehe des Stacks aus
	
	public boolean isEmpty () {
		return (top < 0);
		}
	
	public void push (int element) throws StackException {
		if (size() == capacity) {
			int[] oldS = S; 
			newS = new int[oldS.length * 2 + 1 ];
			System.arraycopy(oldS, 0, newS, 0, oldS.length );
			oldS = newS; // zuweisen
		}
		S[++top] = element;
		}
	
	public int top() throws StackException {
		if (isEmpty())
			throw new StackException("Stack ist leer");
		return S[top];
		}

	public int pop () throws StackException{
		if (isEmpty()) {
			throw new StackException("Stack ist leer");
			}
		int element = S[top--];
		return element;
		}
}




public class StackTestDrive {
	
	public static void main(String [] args) throws StackException {
		
		Stack Test = new Stack(5);
		
		Test.push(1);
		Test.push(2);
		Test.push(3);
		Test.push(4);
		Test.push(5);
		System.out.println(Test.size());
		System.out.println(Test.isEmpty());
		Test.push(6);
		System.out.println(Test.size());
		}
	}


Wenn ich nun das Programm starte, dann müssete eigentlich bei dem Test.push(6) das Array vergrößert werden, aber leider erhalte ich die folgende Fehlermeldung!

Code:
5
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at edu.cau.informatikII.vorlesungsprogramme.Stack.push(Stack.java:44)
	at edu.cau.informatikII.vorlesungsprogramme.StackTestDrive.main(StackTestDrive.java:16)
false
 

sebjensen

Mitglied
Also. Das Programm schmeisst keine Fehlermeldung mehr, aber es erzielt nicht das gewünschte Ergebnis:


Code:
package edu.cau.informatikII.vorlesungsprogramme;

public class Stack {
	
	public static final int CAPACITY = 1000;
	// Default-Laenge des Arrays
	
	private int capacity;
	// verwendete Laenge des Arrays
	
	private int[] S;
	private int[] newS;
	// Array S um Stack zu implementieren
	
	private int top = -1;
	// Position des obersten Elements im Stack
	
	public Stack () {
		this(CAPACITY);
		}
	
	public Stack (int cap) {
		capacity = cap;
		S = new int [capacity];
		}
	// nur Initialisierung des Stacks
	
	public int size () {
		return (top + 1);
		}
	// gibt Hoehe des Stacks aus
	
	public boolean isEmpty () {
		return (top < 0);
		}
	
	public void push (int element) throws StackException {
		if (size() == capacity) {
			int[] oldS = S; 
			newS = new int[oldS.length * 2 + 1 ];
			System.arraycopy( oldS, 0, newS, 0, oldS.length ); // kopieren 
			//newS = oldS; // zuweisen
		}
		else {
			S[++top] = element;
			}
		}
	
	public int top() throws StackException {
		if (isEmpty())
			throw new StackException("Stack ist leer");
		return S[top];
		}

	public int pop () throws StackException{
		if (isEmpty()) {
			throw new StackException("Stack ist leer");
			}
		int element = S[top--];
		return element;
		}
}


Mit meinem Beispiel ergibt das:

Code:
public class StackTestDrive {
	
	public static void main(String [] args) throws StackException {
		
		Stack Test = new Stack(5);
		
		Test.push(2);
		Test.push(4);
		Test.push(6);
		Test.push(8);
		Test.push(10);
		System.out.println(Test.size());
		System.out.println(Test.isEmpty());
		System.out.println(Test.top());
		Test.push(12);
		System.out.println(Test.top());
		Test.push(23);
		System.out.println(Test.top());
		}
	
	}

Code:
5
false
10
10
10
 
B

Beni

Gast
Code:
   public void push (int element) throws StackException {
      if (size() == S.length ){
    	  int[] newS = new int[ S.length * 2 + 1 ]; // nächster Array mit doppelter Grösse
    	  System.arraycopy( S, 0, newS, 0, S.length ); // kopieren
    	  S = newS; // zuweisen
      }
      S[++top] = element;
  }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Teil eines Bild kopieren bei verschiedenen Zoomstufen Java Basics - Anfänger-Themen 3
B eigenschaften eines objekt kopieren. how? Java Basics - Anfänger-Themen 8
G variable kopieren bzw. woanders benutzen Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
A BinaryTree komplett kopieren Java Basics - Anfänger-Themen 7
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
J Zweidimensionales array kopieren und in eindimensionales überführen Java Basics - Anfänger-Themen 304
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
S Input/Output Vom Netzwerk kopieren Java Basics - Anfänger-Themen 6
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Objekt (tief)-kopieren Java Basics - Anfänger-Themen 2
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
TomatenBrot447 Wie kann man ein Objekt kopieren? Java Basics - Anfänger-Themen 11
W Datentypen Kopieren von Arrays Java Basics - Anfänger-Themen 4
M Input/Output Datei in Laufzeit-JAR kopieren Java Basics - Anfänger-Themen 6
D Input/Output Ordner aus .Jar in das Verzeichnis der .Jar kopieren Java Basics - Anfänger-Themen 1
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
D 2 D Arrays kopieren Java Basics - Anfänger-Themen 3
S double[x] , double[y] zu Point[] points kopieren? Java Basics - Anfänger-Themen 15
C Array kopieren und nur bestimmte Werte speichern Java Basics - Anfänger-Themen 6
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
C Datei identisch Kopieren Java Basics - Anfänger-Themen 3
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
L Source Code in Editor kopieren Java Basics - Anfänger-Themen 5
S ods-Dateo kopieren Java Basics - Anfänger-Themen 12
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
S Binärbaum kopieren Java Basics - Anfänger-Themen 6
J Klassen Fehler Datei kopieren - was mache ich falsch Java Basics - Anfänger-Themen 19
M Kopieren einer .wav Datei Java Basics - Anfänger-Themen 6
J Dienst zum Text kopieren und Variable hochzählen Java Basics - Anfänger-Themen 7
V Zwei Array in einem kopieren Java Basics - Anfänger-Themen 3
T TreeSet sortiert in ein anderes kopieren Java Basics - Anfänger-Themen 2
B Methode zum kopieren von Arrays Java Basics - Anfänger-Themen 9
C Referenz auf ein Objekt kopieren! Java Basics - Anfänger-Themen 2
J Text kopieren an bestimmter Stelle Java Basics - Anfänger-Themen 8
T ArrayList kopieren Java Basics - Anfänger-Themen 10
M Java-Datei in Ordner Kopieren Java Basics - Anfänger-Themen 12
S Dateien in RAM kopieren und ausführen? Java Basics - Anfänger-Themen 4
B Dateien kopieren, entpacken, XML auslesen! Java Basics - Anfänger-Themen 7
M Array Inhalt kopieren Java Basics - Anfänger-Themen 3
D Mehrere Datein kopieren Java Basics - Anfänger-Themen 10
H Interface JTextPane html formatiert kopieren Java Basics - Anfänger-Themen 2
Dogge Datei kopieren Java Basics - Anfänger-Themen 13
F Kopieren von Ordner sammt inhalt Java Basics - Anfänger-Themen 5
S Dateien mittels Path(s) kopieren und umbenennen. Java Basics - Anfänger-Themen 4
C Erste Schritte Integer Werte in Array kopieren Java Basics - Anfänger-Themen 21
R Datei kopieren: Performance erhöhen Java Basics - Anfänger-Themen 10
B Erste Schritte Dateien ueber Netzwerk kopieren Java Basics - Anfänger-Themen 2
G Nur benötigte Klassen in executable jar kopieren! Java Basics - Anfänger-Themen 6
S File Kopieren Path Pfad Problem Java Basics - Anfänger-Themen 3
T Methoden Array kopieren: Wie geht das? Java Basics - Anfänger-Themen 20
R Kopieren einer Datei Java Basics - Anfänger-Themen 18
G Kopieren von Array-Daten Java Basics - Anfänger-Themen 6
A Datein kopieren: File oder xcopy? Was ist schneller? Java Basics - Anfänger-Themen 10
L Datei kopieren Java Basics - Anfänger-Themen 11
F Text aus Textfeld1 in Textfeld 2 kopieren Java Basics - Anfänger-Themen 5
N IndexOutOfBoundsException: Source does not fit in dest beim Kopieren von ArrayList in Vector Java Basics - Anfänger-Themen 4
eLogic Ordner kopieren/schreiben Java Basics - Anfänger-Themen 2
G Text aus TextArea in Zwischenablage kopieren Java Basics - Anfänger-Themen 6
J Jar kopieren und einfügen Java Basics - Anfänger-Themen 4
X Zeile in Tabelle kopieren und in andere einfügen Java Basics - Anfänger-Themen 6
N Kopieren einer ArrayListe Java Basics - Anfänger-Themen 3
D In Zwischenablage kopieren Java Basics - Anfänger-Themen 8
C Datei kopieren - Erweiterung java.io.File Java Basics - Anfänger-Themen 2
S datein kopieren Java Basics - Anfänger-Themen 5
N Vectorinhalt kopieren Java Basics - Anfänger-Themen 4
K Datentypen Bestimmten Part aus String kopieren mit RegEx Java Basics - Anfänger-Themen 4
B .class datei kopieren und auführen Java Basics - Anfänger-Themen 8
C Bilder von Server zu Server kopieren über Webdav(Sardine) Java Basics - Anfänger-Themen 5
F Object kopieren in GWT Java Basics - Anfänger-Themen 2
D HashMap mit Inhalt kopieren Java Basics - Anfänger-Themen 8
S element in Array kopieren Java Basics - Anfänger-Themen 12
N Mac - Java Code aus dem Forum kopieren Java Basics - Anfänger-Themen 12
S Array im Konstruktor kopieren Java Basics - Anfänger-Themen 8
D Referenztyp kopieren nicht refenenzieren ?! Java Basics - Anfänger-Themen 4
A 2 arrays zu einem Kopieren Java Basics - Anfänger-Themen 2
H Datei kopieren per Eingabe Java Basics - Anfänger-Themen 11
G Array kopieren Java Basics - Anfänger-Themen 4
F Verschachtelte Arrays kopieren und überschreiben Java Basics - Anfänger-Themen 4
S JLabel clonen/kopieren Java Basics - Anfänger-Themen 2
F Verzeichnisse und Dateien kopieren Java Basics - Anfänger-Themen 3
K Spielbrett kopieren Java Basics - Anfänger-Themen 4
H Datei in den Windows-Programmordner kopieren Java Basics - Anfänger-Themen 5
D Objektehierarchie kopieren Java Basics - Anfänger-Themen 3
B Teile einer Image in neue Image kopieren Java Basics - Anfänger-Themen 4
S Grosse Dateien kopieren/Verschieben Java Basics - Anfänger-Themen 14
H Liste kopieren Java Basics - Anfänger-Themen 22
G POI: Zelle aus einer Tabelle kopieren und in einr anderen einfügen Java Basics - Anfänger-Themen 5
S Dateien von einem Ordner in den anderen kopieren Java Basics - Anfänger-Themen 2
S String nach erstem Whitespace kopieren Java Basics - Anfänger-Themen 3
M "spezieller" Zeilenumbruch beim Kopieren Java Basics - Anfänger-Themen 3
J ArrayList<Point> in eine neue ArrayList<Point> kopieren Java Basics - Anfänger-Themen 8
K Klonen und Kopieren von Dateien Java Basics - Anfänger-Themen 6
R DerbyDB nach MS Access kopieren Java Basics - Anfänger-Themen 41

Ähnliche Java Themen

Neue Themen


Oben