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 bin ein totaler noob was Java betrifft und hab deswegen auch 2 ganz einfach fragen:
Ich hab folgenden code:
Code:
public class feldfüllen
{
public static void main(String[] args)
{
int feld[]=new int [7];
for(int i=0; i<9; i++)
{
feld[i]=i;
}
}
}
Das Problem ist Wenn ich die ganze Sache ausführen kommt folgender Fehler:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
at feldfüllen.main(feldtest.java:8)
Igendwie hab ich so ein Gefühl das mir sagt das da mit der Feldinitialisierung was nich in Ordnung is. Ich sollt wohl auch noch erwähnen das ich als SDK Eclipse 3.2.1 verwende.
Meine zweite frage is: Was bedeutet eigentlich das "final" vor der initialisierung von Variablen?
hi, die exception kommt, da dein array nur 7 elemente hat, du aber auf 9 zugreifst...2 zu viel. final bedeutet, dass die variable einmal einen wert zugewiesen bekomm und dann geht das nicht mehr. schau dir für solcher grundsatzfragen mal das inselbuch an.
es war doch richtig...du hast nur auf elemente geschaut, dies nicht gibt...siehe code vom andern schreiberling...der sollte funzen! ausserdem schreibt man javaklassen stets mit großen Buchstaben vorn....also FeldFuellen. ist kein muss, aber ne empfehlung .
Code:
public class FeldFuellen{
public static void main(String[] args){
int feld[]=new int [7];
for(int i=0; i<feld.length; i++){
feld[i]=i;
}
}
} // --> so ists java getreu:-)
Ach so ein mist, da hätte ich auch selber drauf kommen können.
Also erstma danke, vor allem für die sehr schnellen antworten!
Aber wie kann ich dann ein feld ohne vergegebene länge initialisieren? Oder geht das gar nicht?
hi, ein array ist immer mit vorgegebener länge. wenn das zur laufzeit änderbar sein soll, wäre eine liste.
Code:
List list = new ArrayList();
list.add("hallo");
oder um dein beispiel mal mit ner liste zu machen:
Code:
public class FeldFuellen{
public static void main(String[] args){
List list = new ArrayList();
for(int i=0; i<list.size(); i++){
list.add(i, i); //--> mit java 5 wegen autoboxing
//list.add(i, new Integer(i)) // --> unter java 5, da kein autoboxing
}
}
}
import java.util.*;
public class FeldFuellen{
public static void main(String[] args){
List list = new ArrayList();
for(int i=0; i<list.size(); i++){
list.add(i, i); //--> mit java 5 wegen autoboxing
//list.add(i, new Integer(i)) // --> unter java 5, da kein autoboxing
}
}
}
In einer Schleife. Kannst dir die Größe einer liste holen mit List#size().
Bsp.:
Code:
for (int i = 0; i < list.size(); i++) {
list.get(i);
}
So kannst du auf jedes Element der Liste zugreifen. Musst nur aufpassen, da dir List dann ein Objekt vom Typ Object zurück gibt, dass du ggf. dann casten oder umwandeln musst in den Datentyp, den du brauchst bzw. drin gespeichert hast.
Ab Java 5 kann man sowas dann auch schon beim Anlegen definieren
Code:
List<String> list = new Vector<String>();
Korrigiert mich bitte wenn die Schreibeweise falsch ist, aber ich arbeite hier noch mit 1.4.2 und kann das
daher bei mir nicht auf Richtigkeit prüfen.
ja ok, aber das is doch doof das ich zweimal sagen muss das die Liste vom Typ String sein soll.
Andere Frage: Warum kann ich den Rückgabewert von list.get() an eine char-Variable übergeben, denn get() gibt doch ein Object zurück.
ja ok, aber das is doch doof das ich zweimal sagen muss das die Liste vom Typ String sein soll.
Andere Frage: Warum kann ich den Rückgabewert von list.get() an eine char-Variable übergeben, denn get() gibt doch ein Object zurück.
Das ist nicht doof, sondern das ist so und ist ein "Feature" das sich "Generics" nennt.
Weil ich weiss ja nicht was "doofer" ist, jedes mal:
Code:
String s = list.get(n).toString();
oder einmal beim Erstellen
Code:
List<String> list = new ArrayList<String>();
zu schreiben und danach mit:
Code:
String s = list.get(n);
zugreifen zu können.
Da das ganze ja nicht nur mit Strings geht, sondern auch mit beliebigen anderen Typen (die man evtl. sogar Casten müsste) ist das ganze also nicht doof, sondern eine gute Erweiterung, die einem einiges an Arbeit abnehmen kann.
nicht ohne weiteres an eine char Variable übergeben, wenn du die liste mit <String> zu einer liste aus String Objekten gemacht hast, weil dann der Rückgabewert ein String und kein Char ist
String leererString = "nochNichtLeer";
leererString = ""; // meinst du sowas?
leererString = null; // oder sowas?
String nochEiner = new String(); // oder vielleicht sowas?
Leerer String, Leer-String oder Null-String
Die Anweisungen
String str = "";
oder
String str = new String();
referenzieren in beiden Fällen String-Objekte, die keine Zeichen enthalten. Die zweite Schreibweise erzeugt aber ein neues String-Objekt, während im ersten Fall das String-Literal im Konstantenpool liegt. Ein String ohne Zeichen nennen wir leeren String, Leer-String oder Null-String. Der letzte Begriff ist leider etwas unglücklich und führt oft zur Verwechslung mit Folgendem:
String s = null;
System.out.println( s ); // null
Hier bekommen wir keinen leeren String und bei der Benutzung im Methodenaufruf, etwa bei s.length(), eine NullPointerException.