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.
Damit das funktioniert, müsstest du sowas schreiben:
Code:
public class Urpo{
private int[] array;
public Urpo(){
array = new int[ 123 ];
}
public int[] getArray(){
return array;
}
}
Code:
public class Main{
public void doSomething(){
Urpo urpo = new Urpo();
int[] array = urpo.getArray();
...
}
}
Das Problem: das ist nicht besonders schön. Da soll irgendeine Methode was an dem Array herumbasteln, ohne dass Urpo kontrollieren kann, was mit seinen Werte passiert (viel Spass bei der Fehlersuche... und "objektorientiert" ist das auch nicht sonderlich).
Deshalb würd ich das Array nur in Urpo bearbeiten, oder Urpo so umschreiben, dass Main keinen direkten Zugriff auf das Array hat:
Code:
public class Urpo{
private int[] array;
public Urpo(){
array = new int[ 123 ];
}
public int length(){
return array.length;
}
public void set( int value, int index ){
if( value < 0 )
throw new IllegalArgumentException( "Momentchen mal, hier sind nur positive Werte erlaubt" );
array[index] = value;
}
public int get( int index ){
return array[ index ];
}
}
Nach längerer Diskussion und viel Hilfe bin ich zu dem folgenden Ergebnis gekommen:
Hintergrund:
Faulpelze schreiben gern wieder verwendbaren Code. So muß ich in meinem (Spiel)projekt für mehrere Anwendungen die gleichen Daten von einem externen Datenträger einlesen und möchte das nur einmal schreiben. Die Syntax dazu war für mich als Java Anfänger problematisch. Da ich glaube, dass auch andere das gleiche Problem haben, hier ein Beispiel, welches das Ganze aufbröselt.
Main gibt es in diesem Beispiel nur deshalb, um das Ganze standalone testen zu können.
Code:
public class Erzeugarray
{
//***********************************************************
public Erzeugarray[] makeobj () // der Name des Rückgabewertes
{ // muß gleich dem Klassennamen sein
Erzeugarray[] erzeugarray;
erzeugarray = new Erzeugarray[2];
return erzeugarray; // !!!! ohne []
}
//***********************************************************
public static void main(String[] args)
{
Erzeugarray e = new Erzeugarray();
Erzeugarray [] earray; //Deklaration des Arrays
earray = e.makeobj();
for (int i = 0; i < earray.length ; i++)
{ System.out.println(earray[i]); }
}
}
In diesem Beispiel ist das Array noch nicht sinnvoll gefüllt. Der Code wird deshalb um
2 Konstruktoren und Code für das Füllen des Arrays erweitert.
Die System.out Anweisung wurde ebenfalls angepasst.
Code:
public class Erzeugarray
{
//***********************************************************
public Erzeugarray() { } //leerer Konstruktor
public String field1, field2;
public Erzeugarray(String field1, String field2) // overloaded Konstruktor
{ this.field1 = field1;
this.field2 = field2; }
public Erzeugarray[] makeobj () // der Name des Rückgabewertes
{ // muß gleich dem Klassennamen sein
Erzeugarray[] erzeugarray;
erzeugarray = new Erzeugarray[2];
erzeugarray[0] = new Erzeugarray("Feld11","Feld12");
erzeugarray[1] = new Erzeugarray("Feld21","Feld22");
return erzeugarray; // !!!! ohne []
}
//***********************************************************
public static void main(String[] args)
{
Erzeugarray e = new Erzeugarray();
Erzeugarray [] earray; // Deklaration des Arrays
earray = e.makeobj();
for (int i = 0; i < earray.length ; i++)
{ System.out.println(earray[i].field1); }
}
}
Das Ganze ist von den Namen her verwirrend. Um das schöner hinzukriegen,
kann eine eigene Klasse für das Array benutzt werden:
Code:
public class Data
{
public String field1, field2;
public Data (String field1,String field2) // Konstruktor
{
this.field1 = field1;
this.field2 = field2;
}
}
Das obige Programm sieht dann so aus:
Code:
public class Erzeugarray
{
//***********************************************************
public Data[] makeobj () // der Name des Rückgabewertes
{ Data[] data; // muß gleich dem Klassennamen sein
data = new Data[2];
data[0] = new Data("Feld11","Feld12");
data[1] = new Data("Feld12","Feld22");
return data; // !!!! ohne []
}
//***********************************************************
public static void main(String[] args)
{
Erzeugarray e = new Erzeugarray();
Data [] data; // Deklaration des Arrays
data = e.makeobj();
for (int i = 0; i < data.length ; i++)
{ System.out.println(data[i].field1); }
}
}
An anderer Stelle kann das dann so genutzt werden:
Code:
public class Nutzearray
{
public static void main(String[] args)
{
Erzeugarray e = new Erzeugarray();
Data [] data; // Deklaration des Arrays
data = e.makeobj();
for (int i = 0; i < data.length ; i++)
{ System.out.println(data[i].field1); }
}
}
Edit by Beni: du musst nicht jede Zeile einzeln in Codetags setzen, das funktioniert nicht so!
Nach längerer Diskussion und viel Hilfe bin ich zu der folgenden Lösung gekommen:
Hintergrund
Faulpelze schreiben gern wieder verwendbaren Code. So muß ich in meinem (Spiel)projekt für mehrere Anwendungen die gleichen Daten von einem externen Datenträger einlesen und möchte das nur einmal schreiben. Die Syntax dazu war für mich als Java Anfänger problematisch. Da ich glaube, dass auch andere das gleiche Problem haben, hier ein Beispiel, welches das Ganze aufbröselt.
Main gibt es in diesem Beispiel nur deshalb, um das Ganze standalone testen zu können.
Code:
public class Erzeugarray
{
//***********************************************************
public Erzeugarray[] makeobj () // der Name des Rückgabewertes
{ // muß gleich dem Klassennamen sein
Erzeugarray[] erzeugarray;
erzeugarray = new Erzeugarray[2];
return erzeugarray; // !!!! ohne []
}
//***********************************************************
public static void main(String[] args)
{
Erzeugarray e = new Erzeugarray();
Erzeugarray [] earray; //Deklaration des Arrays
earray = e.makeobj();
for (int i = 0; i < earray.length ; i++)
{ System.out.println(earray[i]); }
}
}
In diesem Beispiel ist das Array noch nicht sinnvoll gefüllt. Der Code wird deshalb um
2 Konstruktoren und Code für das Füllen des Arrays erweitert.
Die System.out Anweisung wurde ebenfalls angepasst.
Code:
public class Erzeugarray
{
//***********************************************************
public Erzeugarray() { } //leerer Konstruktor
public String field1, field2;
public Erzeugarray(String field1, String field2) // overloaded Konstruktor
{ this.field1 = field1;
this.field2 = field2; }
public Erzeugarray[] makeobj () // der Name des Rückgabewertes
{ // muß gleich dem Klassennamen sein
Erzeugarray[] erzeugarray;
erzeugarray = new Erzeugarray[2];
erzeugarray[0] = new Erzeugarray("Feld11","Feld12");
erzeugarray[1] = new Erzeugarray("Feld21","Feld22");
return erzeugarray; // !!!! ohne []
}
//***********************************************************
public static void main(String[] args)
{
Erzeugarray e = new Erzeugarray();
Erzeugarray [] earray; // Deklaration des Arrays
earray = e.makeobj();
for (int i = 0; i < earray.length ; i++)
{ System.out.println(earray[i].field1); }
}
}
Das Ganze ist natürlich von den Namen her verwirrend. Um das schöner hinzukriegen,
kann eine eigene Klasse für das Array benutzt werden:
Code:
public class Data
{
public String field1, field2;
public Data (String field1,String field2) // Konstruktor
{
this.field1 = field1;
this.field2 = field2;
}
}
Das obige Programm sieht dann so aus:
Code:
public class Erzeugarray
{
//***********************************************************
public Data[] makeobj () // der Name des Rückgabewertes
{ Data[] data; // muß gleich dem Klassennamen sein
data = new Data[2];
data[0] = new Data("Feld11","Feld12");
data[1] = new Data("Feld12","Feld22");
return data; // !!!! ohne []
}
//***********************************************************
public static void main(String[] args)
{
Erzeugarray e = new Erzeugarray();
Data [] data; // Deklaration des Arrays
data = e.makeobj();
for (int i = 0; i < data.length ; i++)
{ System.out.println(data[i].field1); }
}
}
An anderer Stelle kann das dann so genutzt werden:
Code:
public class Nutzearray
{
public static void main(String[] args)
{
Erzeugarray e = new Erzeugarray();
Data [] data; // Deklaration des Arrays
data = e.makeobj();
for (int i = 0; i < data.length ; i++)
{ System.out.println(data[i].field1); }
}
}