Programmierprobleme / Java plz help

LordApophis

Member
Hi,

ich versuche derzeit mich etwas in Programmierung mit Java einzufinden und habe da eini Probleme...kann sien dass dann weitere folgen, ist irgendwie unübersichtlich das ganze...ich werde sie nacheinander stellen wenn das vorige gelöst ist, denke das ist übersichtlicher und nachvollziehbarer:rulez:

Das erste Problem:
Ich habe Arrays so verstanden das man damit Listen (eindimensional), Tabellen (zweidimensional) und ähnliche Strkuturen abbildne kann, ist das soweit richtig?

Weil auf dieser Annhame hab ich oflgenden Code geschrieben der leider nicht läuft:

Code:
public class arraysundschleifen {
    public static void schleife(int[]array)
    {
        for (int c=1;c<=array.length;c++)
        {
            System.out.println("Zahl an der Stelle "+c+": "+array[c]);
        }
    }
    public static void fuellen (int[]array)
    {
        for (int i=1;i<=array.length;i++)
        {
            array[i]=i+1;
        }
    }
    public static void main (String[]args)
    {
        int[] array=new int[10];
        fuellen(array);
        schleife(array);
    }
}
Eigentlich wollte ich eine Ausgabe erzeugen die so aussieht:
Zahl an der Stelle 1: 1
Zahl an der Stelle 2: 2
Zahl an der Stelle 3: 3
Zahl an der Stelle 4: 4
Zahl an der Stelle 5: 5
Zahl an der Stelle 6: 6
Zahl an der Stelle 7: 7
Zahl an der Stelle 8: 8
Zahl an der Stelle 9: 9
Zahl an der Stelle 10: 10

Aber Leider bekomme ich nur einen Fehler 🙁
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at schleifenundarrays.fuellen(fakecode.java:14)
at schleifenundarrays.main(fakecode.java:20)
Hoffe jemand kann mir hierbei (und notfalls bei weiteren Sachen) helfen.
 
Wenn ich das richtig in Erinnerung habe, werden die Array-Indizes in Java auch mit 0 begonnen, gehen also bei einem Array der Länge 10 von 0 bis 9.

ArrayIndexOutOfBounds spricht da auch dafür (der Index liegt mit 10 ja außerhalb des gültigen Bereichs 0-9).

Du müsstest in deinem Code also die Schleifen von 0 bis <Length (oder <= Length-1) laufen lassen.
 
Hmm...nun gut, das mit 0 statt 1 und < statt <= hätt ich auch selber schaffen können...hatte das auch schonma wo gehört...weil bei der ihnteren Zahl hab ichs ja geschafft das zu beherzigen 😀

Kann mir einer technisch und gleichzeitig verständlich erklären warum das so ist?^^


Oh, war ich im falschen Bereich? Garnich gemerkt...danke sir Chief sir :bigok:
 
Zuletzt bearbeitet:
Meine Vermutung wäre, dass das mit der internen Verwaltung der Arrays zusammenhängt.
Java ist ja in vielen Dingen C-ähnlich. Dort werden Arrays als Zeiger auf die erste Speicheradresse angelegt (Die Länge wird in C nicht gespeichert, deswegen kann es da zum Überlauf kommen. Java speichert die Länge auch mit und kann deswegen eine ArrayIndexOutOfBoundsException werfen).

Code:
int[10] array;
ist also eigentlich ein Zeiger auf eine Adresse, z.B. 0xABCD.
Mit array[0] kann man jetzt auf das erste Element zugreifen, dabei wird der Wert in den Klammern zur Startadresse addiert. Intern wird das dann zu *(0xABCD + 0x0000).
array[1] ist dann das zweite Element, das liegt dann in *(0xABCD + 0x0001).

Genau genommen stimmt das jetzt nicht ganz, weil beim Zugriff natürlich auch die Breite jedes einzelnen Elements beachtet werden muss. Bei einem 32bit int sind das 4 Byte, also liegt array[1] eigentlich an *(0xABCD+0x0004). Das erledigt der Compiler aber automatisch, darum muss man sich also meistens nicht selber kümmern.
 
Okay, das verstehe ich swoeti einigermaßen.

Danke schomma.

Ich bastel gerade an zweidimensionalen Arrays herum und melde mich bestimmt bald wenns da Schwierigkeiten gibt 😀
 

Online-Statistiken

Zurzeit aktive Mitglieder
1
Zurzeit aktive Gäste
31
Besucher gesamt
32

Beliebte Forum-Themen

Zurück
Oben Unten