PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : einfache Arrayausgabe funktioniert nicht



thobit
09-08-2006, 01:21
Moin
Ich bin hier am Verzweifeln. Ich will einfach den Inhalt eines Arrays ausgeben.

public class TestFeld
{
public static void main (String[] args)
{
int[] testArray;
testArray = new int[10];
for (int i = 0; i < testArray.length; i++)
{
testArray[i] = ++i;
}
for (int i = 0; i < testArray.length; i++)
{
System.out.println("Anfang");
System.out.println(testArray[i]);
System.out.println("Ende");
}
}
}


Compiliere ich jetzt mit
"javac Testfeld.java"
werden nur die ungeraden Zahlen ausgegeben. Die eigentlich geraden Zahlen sind gleich 0 gesetzt worden, aber ich kann beim besten Willen nicht erkennen warum.
Eigentlich wollte ich ein wenig mit Arrays experimentieren, da ich gerade erst mit JAVA anfange, scheitere aber offenbar bereits jetzt.

EDIT

Hat sich erledigt. Man sollte auch da gucken, wo der Array beschrieben wird und nicht nur wo er ausgegeben wird.

mwanaheri
09-08-2006, 08:28
Das liegt hier wohl daran, dass du in der ersten Schleife beim Befüllen des Arrays i noch einmal erhöhst. Dadurch wird nur jeder zweite Eintrag des Arrays gesetzt. Die anderen erhalten den Standardwert eines int, nämlich 0.

NB: int ist _kein_ Objekt. Wenn du also eine int-Variable erzeugst und sie nicht initialisierst, hat die Variable den Wert 0. Anders sähe das aus, wenn du einen Array vom Typ Integer wählen würdest. Dann wäre der Wert einer nicht initialisierten Variable null.

bischi
09-08-2006, 17:14
NB: int ist _kein_ Objekt. Wenn du also eine int-Variable erzeugst und sie nicht initialisierst, hat die Variable den Wert 0.

Also bei mir kommt bei folgendem Code



int i;
System.out.println(i);


ein



variable i might not have been initialized
System.out.println(i);
^
1 error


... MfG Bischi

mwanaheri
09-08-2006, 21:19
Yep, das kommt da und ist eine Warnung. Wenn du thobits code durchlaufen lässt, wirst du feststellen, dass bei jedem 2. Mal eine 0 ausgegeben wird. Hier merkt er nicht, dass evtl nicht-initialisierte Werte vorliegen.

RedCloud
11-08-2006, 07:32
Yep, das kommt da und ist eine Warnung. Wenn du thobits code durchlaufen lässt, wirst du feststellen, dass bei jedem 2. Mal eine 0 ausgegeben wird. Hier merkt er nicht, dass evtl nicht-initialisierte Werte vorliegen.

ist doch logisch, er erzeugt ja auch ein Objekt mit new und da sind die Werte initialisiert.

rc

mwanaheri
11-08-2006, 08:25
Nun, initialisiert wird das Array. Der Unterschied zwischen einem int[]-Array und einem Integer[]-Array besteht darin, dass bei einem int[]-Array in seinem Fall bei jedem zweiten Array-Element 0 ausgegeben wird, bei einem Integer[]-Array hingegen würde null ausgegeben.


public class TestFeld
{
public static void main (String[] args)
{
Integer[] testArray;
testArray = new Integer[10];
for (int i = 0; i < testArray.length; i++)
{
testArray[i] = ++i;
}
for (int i = 0; i < testArray.length; i++)
{
System.out.println("Position " + i + " = " + testArray[i]);
}
}
}

Resultat:

Position 0 = 1
Position 1 = null
Position 2 = 3
Position 3 = null
Position 4 = 5
Position 5 = null
Position 6 = 7
Position 7 = null
Position 8 = 9
Position 9 = null


Ob diese Integer-Variablen initialisiert sind? Jedenfalls fehlt ihnen offenbar eine Wertzuweisung. Und genau darauf reagieren ints anders. Das ist nebenbei auch der Grund, warum ich bei Datenbankarbeiten lieber Integer als int nehme.

RedCloud
11-08-2006, 10:13
Nun, initialisiert wird das Array. Der Unterschied zwischen einem int[]-Array und einem Integer[]-Array besteht darin, dass bei einem int[]-Array in seinem Fall bei jedem zweiten Array-Element 0 ausgegeben wird, bei einem Integer[]-Array hingegen würde null ausgegeben.

Dein Feld wird mit new auch nicht initiliasisiert. Meine Ausgabe:

Position 0 = 1
Position 1 = 0
Position 2 = 3
Position 3 = 0
Position 4 = 5
Position 5 = 0
Position 6 = 7
Position 7 = 0
Position 8 = 9
Position 9 = 0

javac 1.5.0_06

rc

mwanaheri
11-08-2006, 10:41
Die Ausgabe, die du da hast, kriege ich nur bei
int[] testArray = new int[10].
Die Ausgabe, die ich angegeben hatte, beruht auf
Integer[] testArray = new Integer[10].

Und auf genau den Unterschied wollte ich ja hinaus. Auch wenn's dem OP nicht mehr hilft ;-)

Auch java 1.5

RedCloud
11-08-2006, 10:58
Die Ausgabe, die du da hast, kriege ich nur bei
int[] testArray = new int[10].
Die Ausgabe, die ich angegeben hatte, beruht auf
Integer[] testArray = new Integer[10].

Und auf genau den Unterschied wollte ich ja hinaus. Auch wenn's dem OP nicht mehr hilft ;-)

Auch java 1.5

umh, lesen müsste man können ... alles klar

rc