Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich soll eine Methode schreiben mit einem int als Parameter der dann um genau diesen Wert das Array erweitern soll. Nur man kann ja vom einem Array nicht die Länge ändern wenn man die einmal festgelegt hat. Ich kann zwar ein neues erstellen mit den gleichen Werten und das dann um diesen Parameter erweitern nur hab ich dann das Problem dass ich nicht das ursprüngliche Array geändert habe sondern einfach nur ein neues erstellt habe und da die Methode void sein muss kann ich da auch nicht einfach das neu erstellte Array returnen. Klar könnte ich das Problem mit einer ArrayList umgehen dies soll jedoch nicht getan werden.
Was denn für ein Array? Du verweist hier auf ein Array, sagst aber nicht, wo das referenziert wird, bzw. woher die Methode das Array überhaupt kennt. Laut deinen Angaben bekommt die Methode lediglich einen int Parameter. Ist das Array eine Instanzvariable einer Klasse? Dann kannst du das ja auf ein neues Array setzen (wenn es nicht final ist).
Was denn für ein Array? Du verweist hier auf ein Array, sagst aber nicht, wo das referenziert wird, bzw. woher die Methode das Array überhaupt kennt. Laut deinen Angaben bekommt die Methode lediglich einen int Parameter. Ist das Array eine Instanzvariable einer Klasse? Dann kannst du das ja auf ein neues Array setzen (wenn es nicht final ist).
Es handelt sich um ein private char[] arr das erstmal nur deklariert wurde im selben package. Außerdem kann man mithilfe einer anderen Methode ein neues array erstellen:
Java:
package mystring;
public class MyString {
private char[] arr;
public MyString(int length) {
arr = new char[length];
}
public int getLength() {
return arr.length;
}
Ja aber gehen wir mal davon aus ich erstelle ein array mit Hilfe der Methode MyString. Wie genau kann ich jetzt die Methode implementieren die die Länge erweitert.
Ja aber gehen wir mal davon aus ich erstelle ein array mit Hilfe der Methode MyString. Wie genau kann ich jetzt die Methode implementieren die die Länge erweitert.
Nun implementieren Sie die eigentliche Methode, die wir zum Erweitern der Länge unseres Stringsbenutzenwollen.SchreibenSieeineMethodepublic void increaseLength(int n). Diese bekommt die Anzahl an Characters überbergeben, um die die Länge des Strings erweitert werden soll. Hat der String die Länge 40, so soll er nach dem Aufruf von
increaseLength(5), die Länge 45 haben. Er wird also um 5 Characters erweitert.
Das ist die Aufgabe. Aber die wird doch nicht eingehalten, wenn ich das so mache, wie ich beschrieben habe
"Der String" ist ja deine Klasse MyString. Intern werden die einzelnen Zeichen durch ein Chararray verwaltet. Das bleibt alles so wie es vorher schon war. Du benötigst in der Methode ein temporäres Array (das um "n" länger ist als "arr") in welches du die bereits in "arr" enthaltenen Zeichen kopierst. Danach kann "arr" durch das temporäre Array ersetzt werden. Wie das geht, steht weiter oben.
Naja gut aber eine andere Aufgabe ist es z.B eine Methode zu schreiben die dann alle Arrays einzeln ausprintet, was ja an sich kein Problem ist, nur hat man ja das Problem dass man dann nicht weiß ob ich jetzt in der Methode arr[] printen soll oder copyarr[]?!
Naja gut aber eine andere Aufgabe ist es z.B eine Methode zu schreiben die dann alle Arrays einzeln ausprintet, was ja an sich kein Problem ist, nur hat man ja das Problem dass man dann nicht weiß ob ich jetzt in der Methode arr[] printen soll oder copyarr[]?!
Du hast es offensichtlich nicht verstanden. Schade.
In deiner noch nicht implementierten Methode print() stellt sich diese Frage überhaupt nicht, weil es nur ein Array gibt, auf das die Methode Zugriff hat und das ist die Instanzvariable "arr".
Anstatt hier immer neue (scheinbare) Probleme aufzuwerfen: Setz doch die Tipps von oben einfach erst mal um. Falls du dann zu der Methode increaseLength() noch Fragen hast, dann melde dich wieder. Dir kann sicher geholfen werden.
Bereits umgesetzt nur blicke ich da noch nicht ganz durch. Beispiel: Ich erstelle mir ein Array mithilfe der Methode MyString() und weisen dem dann daraufhin Werte zu. Anschließend rufe ich die Methode increaseLength() auf. Dann wird ja ein neues Array erstellt der genau die gleichen Werte hat nur noch weitere Indiziez mit Wert 0. Wenn ich jetzt die Methode print() aufrufe dann weiß diese Methode nicht welchen Array er printen soll. print() hat keinen formalen Parameter und ist public void.
Bereits umgesetzt nur blicke ich da noch nicht ganz durch. Beispiel: Ich erstelle mir ein Array mithilfe der Methode MyString() und weisen dem dann daraufhin Werte zu. Anschließend rufe ich die Methode increaseLength() auf. Dann wird ja ein neues Array erstellt der genau die gleichen Werte hat nur noch weitere Indiziez mit Wert 0. Wenn ich jetzt die Methode print() aufrufe dann weiß diese Methode nicht welchen Array er printen soll. print() hat keinen formalen Parameter und ist public void.
class Foo {
String greet;
public Foo() {
greet = "He du!";
}
public void changeGreet(String greet) {
this.greet = greet;
}
public void print() {
System.out.println(this.greet); // Hier gibt es keine Wahl. Es gibt nur "greet"!
}
}
class Foo {
String greet;
public Foo() {
greet = "He du!";
}
public void changeGreet(String greet) {
this.greet = greet;
}
public void print() {
System.out.println(this.greet); // Hier gibt es keine Wahl. Es gibt nur "greet"!
}
}
JA genau und jetzt nehmen wir mal an du erstellst eine Methode die ein ganz neuen String erstellt. Aus greet wird String greet wird String greetCopy gemacht. Jetzt kann man doch nicht genau diese von dir implementierten Methoden aufrufen und "hoffen" dass es ein Einfluss auf greetCopy hat. Genau das ist ja das was ich meine. Dadurch dass ich eine Methode geschrieben habe, die die Länge des Arrays erweitert musste ich ja ein komplett neues erstellen und jetzt kann ich ja nicht die davor implementierten Methoden aufrufen und beten, dass diese das neu erstellte Array beeinträchtigen.
class Foo {
String greet;
public Foo() {
greet = "He du!";
}
public void changeGreet() {
this.greet = "Willkommen!"; // Hier ganz "neuer" String.
}
public void print() {
System.out.println(this.greet); // Hier gibt es keine Wahl. Es gibt nur "greet"!
}
}
Du erstellst zwar ein neues Array, aber du weist die Referenz auf dieses neue Array der Instanzvariablen "arr" zu. Die Referenz auf das ursprüngliche Array geht dabei verloren (daher vorher kopieren!) und arr "zeigt" jetzt auf das neue Array.
Für alle anderen Methoden, die auf "arr" zugreifen ändert sich nichts. Sie greifen dadurch ebenfalls auf das neue Array zu.
class Foo {
String greet;
public Foo() {
greet = "He du!";
}
public void changeGreet() {
this.greet = "Willkommen!"; // Hier ganz "neuer" String.
}
public void print() {
System.out.println(this.greet); // Hier gibt es keine Wahl. Es gibt nur "greet"!
}
}
Nein eben nicht. Du hast den selben String überschrieben. Es ist kein anderer String. Der String bleibt der gleiche, das was du änderst ist der Inhalt. Ich aber kann das Array nicht ändern weil man die Indizies eines Arrays nicht erweitern kann. Außer man erstellt ein neues Array und fügt dem neuen Array (der dann auch einen neuen Namen haben muss) die selben Werte hinzu und lässt die restlichen Indizies leer.
Du erstellst zwar ein neues Array, aber du weist die Referenz auf dieses neue Array der Instanzvariablen "arr" zu. Die Referenz auf das ursprüngliche Array geht dabei verloren (daher vorher kopieren!) und arr "zeigt" jetzt auf das neue Array.
Für alle anderen Methoden, die auf "arr" zugreifen ändert sich nichts. Sie greifen dadurch ebenfalls auf das neue Array zu.