# Einfaches int Array gibt über System.out.println merkwürden Wert aus



## SirHell (11. Dez 2009)

Hallo Zusammen, 

ich habe mich gerade erfolgreich hier registriert und habe natürlich direkt mein erstes Problem mit einem Java Array. Mein Testarry soll Zahlen über eine Vorschleife einlesen und diese dann direkt ausgeben. Ich arbeite mit "Eclipse". Dieses gibt beim Code selber kein Problem an, daher bin ich ratlos wieso keine Zahlen ausgegeben werden sondern [D@3e25a5 - ist wahrscheinlich ein leichter Fehler aber ich brauche trotzdem kurz Hilfe. Evtl muss ich ein bestimmtes Package importieren? HIer mein Code:

[Java]
public class Test1 {

        public static void main(String[] args)

         {


		int[] array2 = new int[5];
		for(int i=1; i< 5; i++)
		{
			array2_ = i *3;
			System.out.println("Die Zahlen des Arrays " + array2);
		}



	}
}
[/code]

Ausgabe :

Die Zahlen des Arrays [I@3e25a5
Die Zahlen des Arrays [I@3e25a5
Die Zahlen des Arrays [I@3e25a5
Die Zahlen des Arrays [I@3e25a5_


----------



## X3TitanCore (11. Dez 2009)

Du hast bei der Ausgabe den Index vergessen.

System.out.println("Die Zahlen des Arrays " + array2_);

So wird das Array als Objekt ausgegeben.

Gruß_


----------



## Marco13 (11. Dez 2009)

Das, was da ausgegben wird, ist sozusagen die "Speicheradresse" des Arrays. Um den Array (am besten NACH des Schleife) komplett auzugeben:
System.out.println(Arrays.toString(array));


----------



## SirHell (11. Dez 2009)

Hey Klasse, eigentlich ja ein ganz kleiner Fehler gewesen  - Vielen Dank an euch! Top Antworten und wie schnell ^^ 

Ich habe nun ein wenig weiter mit Array rumprobiert und bin schon recht zufrieden, allerdings gibts nätürlich hier wieder eine Frage - weniger ein Fehler. Brauche da wieder die erfahrenen Hasen :toll:

-Frage1: math.random() bastelt immer Zahlen zwischen 0 und 1 ? Wie kann man das ändern z.B in Ganzzahlen? 

-Frage2: Warum werden bei mir nur  4 Zahlen ausgegeben. Ich dachte 6 müssten das werden. 2 Spalten, 3 Zeilen? 


```
public class Test1 {
	public static void main(String[] args)
	{
	int i;
	int j;	
		
		double[][] array3 = new double[2][3] ;
		
		for(  i = 0 ; i <array3.length;i++)
		{
			for( j = 0 ; j <array3.length;j++)
			{
				array3[i][j] = Math.random();
				System.out.println(array3[i][j]);
			}
					
		}
		
		
	}
	
}
```

Ausgabe:

0.10369966942523112
0.7991885180110601
0.9323734321367315
0.047109139195648075


----------



## Empire Phoenix (12. Dez 2009)

(int)Math.random() würde ganze zahlen raus machen, alternativ math.round oder so.

4 zahlen bekoomste nnur weil du die länge vom array in beide schleifen nimmst, aber in wirklichkeit ist da ein array in einem array gespeichert


----------



## eRaaaa (12. Dez 2009)

Empire Phoenix hat gesagt.:


> (int)Math.random() würde ganze zahlen raus machen



kurze zusatz: du musst zu Math.random noch was dazu multiplizieren oder dergleichen, sonst kommt da natürlich sonst nur 0 raus




> 4 zahlen bekoomste nnur weil du die länge vom array in beide schleifen nimmst, aber in wirklichkeit ist da ein array in einem array gespeichert



jepp, durchlaufe die arrays z.b. so:

```
for (i = 0; i < array3.length; i++) {
	    for (j = 0; j < array3[i].length; j++) {
		array3[i][j] = Math.random();
		System.out.println(array3[i][j]);
	    }

	}
```


----------



## Marco13 (12. Dez 2009)

Statt Math.random() hat sowas wie

private static Random random = new Random();
...
int value = random.nextInt(123);

einige Vorteile: Man kann sich gleich ints der geüwnschten Größe holen (hier 0 bis 122), und man kann, wenn man das Objekt mit
private static Random random = new Random(* 0 *);
erstellt eine repoduzierbare (d.h. zufällige aber bei jedem Programmstart gleiche) Folge von Zahlen erhalten.


----------



## SirHell (12. Dez 2009)

So ich habe nun versucht alle INfos von euch mit aufzunehmen und mir überlegt ein Array zu basteln .

1) 2 Dimensionales Array
2) Array mit Zufallszahlen füllen
3) Das Array ausgeben einmal normal, einmal Spalte, einmal Zeile.

Hier erstmal mein Code und danach die Sachen die ich nicht hinbekomme 


```
import java.util.Random ;

public class Matrix {
public static void main(String[] args)
{
System.out.println("Meine Matrix"+ matrix[i][j]);
}
	
	public int spalte;
	public int zeile;
    public int matrix[][]; 
	int i , j;


public Matrix(int neueZeile, int neueSpalte)


{
	zeile = neueZeile ;
	spalte = neueSpalte;
	matrix = new int[zeile][spalte]; //Wieso hier new?
	fuelle();
}
public int fuelle()
{
Random zufall= new Random(); 
for(i=0 ; i< zeile;i++)
{
	for(j=0;j< spalte;j++)
	{
		matrix[i][j] = zufall.nextInt(80)+23;
	System.out.println(matrix[i][j]);
	}
}

return(matrix[i][j]);
}


public void ausgabeSpalte()
{
	for(i=0 ; i< zeile;i++)
	{
		for(j=0;j< spalte;j++)
		{
			System.out.println("Spalte"+matrix[spalte]);
		}
	}
}
	public void ausgabeZeile()
	{
		for(i=0 ; i< zeile;i++)
		{
			for(j=0;j< spalte;j++)
			{
				System.out.println("Spalte"+matrix[zeile]);
			}
		}
	
	}
	
}
```

->Erstes Problem, ich hab das Ding zuerst ohne main gebaut, das will der Compiler natürlich nicht, wie kann ich das Array ausgeben? In der Main läuft das so auf einen Fehler.

->Zweites Problem: Wann verwende ich void und wann Return? Ich denke bei return rechne ich z.B etwas aus und gebe es dann zurück. Ist das richtig? Da stellt sich dann direkt das Problem wie ich den Rückgabewert ausgebe ^^

Fragen über Fragen aber vielleicht hat ja jemand Lust und Zeit mir zu helfen 

Viele Dank


----------



## X3TitanCore (12. Dez 2009)

Als erstes würde ich mal die ganzen Methoden in eine neue Klasse auslagern und die Main nur als Punkt nutzen um die Anwendung zu initialisieren.

Also z.B. eine StartApp anlegen und dann die anderen Methoden in einer Matrix Klasse auslagern.

Würde dann so aussehen


```
public class StartApp {
	
	public static void main(String[] args)
	{
	
	Matrix meineMatrix = new Matrix(2, 3);
	meineMatrix.fuelle();
	
	}
}
```


```
public class Matrix {

Hier deine Methoden definieren.

}
```

Dann kannst du auf meineMatrix alle public Methoden aufrufen.


zu  matrix = new int[zeile][spalte]; //Wieso hier new?
Weil hier ein neues int Array object erzeugt wird.

Gruß


----------



## Lexi (13. Dez 2009)

Wenn du möchtest dass eine Methode irgendwas an seinen Aufrufer zurückgibt, dann musst du den Typ des Rückgabewertes in deine Methodendeklaration schreiben. Möchtest du einen int Wert zurückgeben, sieht das z.B. so aus :

```
public int mulitply(int a, int b)
```

Damit das komplett funktioniert musst du ebenfalls ein return-Statement einbauen :


```
public int mulitply(int a, int b){
    int result = a*b;
    return result;
}
```

Aufgerufen wird eine solche Methode dann folgendermaßen:


```
int x = multiply(5,6);
```

Eine Methode die in ihrer Deklaration void als Rückgabetyp stehen hat, gibt garnichts zurück. Deshalb enthält sie in der Regel auch kein return-Statement. Sollte sie dort doch eines eingebaut sein, heißt das schlichtweg, dass die Methode danach beendet wird.


----------

