Wert an Feld übergeben?

Status
Nicht offen für weitere Antworten.

hemmoleg

Mitglied
Moin!

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?
 
du versuchst ein feld zu füllen das es gar nicht gibt

Code:
public class feldfüllen
{
   public static void main(String[] args)
   {
      int feld[]=new int [7];
      for(int i=0; i<feld.length; i++)
      {
         feld[i]=i;
      }
   }

}

Da nämlich der Index des Arrays bei 0 anfangt, geht er auch nur bis 6, du versuchst aber auf das 8te Feld zuzugreifen
 
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.

grüße
 
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:-)

grüße
 
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
        }
    }
}

grüße
 
jep, genau...

Code:
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
        }
    }
}
 
hemmoleg hat gesagt.:
dankschön jetz funzts!
aber wie lass ich mir dann die element der liste ausgeben?

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.
 
Anonymous hat gesagt.:
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.
 
Andere Frage: Warum kann ich den Rückgabewert von list.get() an eine char-Variable übergeben, denn get() gibt doch ein Object zurück.
versteh den satz irgendwie nicht 🙁

du kannst den Rückgabewert von
Code:
list.get(i)
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

du kannst aber den Rückgabewert dann mit
Code:
charAt( stelle )
durchlaufen oder beispielsweise mit
Code:
list.get(i).charAt(0)
den ersten buchstabe des eintrages holen
 
Code:
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.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben