Frage zum Array

Hbx8x

Aktives Mitglied
Gegeben sei ein array der Form

int [] array={0,1,-2,3,4,-5,6,7,-8};

Wieso ist int n=array.length-1; nicht 7 sondern 8? Und wieso überhaupt 8 und nicht -8?

Also Länge-1 wäre doch 9-1 -> Achte Inhalt und das wäre 7. Hier steht aber es sei 8.
 

Flown

Administrator
Mitarbeiter
Also es sollte auch -8 sein.

Bei Arraypositionen fängt man bei 0 zu zählen an.
Das heißt, wenn das Array die Länge 9 hat, dann ist das letzte Element beim Index 8.
 

Hbx8x

Aktives Mitglied
oh ich glaub ich hab es jetzt wieso es +8 sind. Es wird ja eine Variable n deklariert die initialisiert wird mit
array.length-1 , wobei

array.length=9 (Ich habe einfach die inhalte zusammengezählt). 9-1=8
 
X

Xyz1

Gast
So weit kann ich gar nicht zählen... Die Länge des Array ist 9, das erste Element beginnt bei 0 und das letzte Element bei 8. Der Inhalt der ersten Stelle ist 0 und der der letzten -8.
Kapito?
 

White_Fox

Top Contributor
Daß das erste Element den Index 0 hat liegt in der Funktionsweise von Computern (und historischer Faulheit!) begründet. Das merkst du, wenn du stattdessen mal in C oder gar Assembler programmierst.

Ein Array ist ein zusammenhängender Bereich im Speicher. Das heißt, um eine Position im Array anzugeben sind lediglich zwei Dinge nötig:
  1. Die Stelle, wo das Array anfängt. Dies wird durch eine einfache Speicheradresse angegeben. In C ist das eigentilch ein Pointer, wobei die C-Syntax diesen ein wenig vor dem Programmierer versteckt.
  2. Die Position im Array. Dies ist ein einfacher Offset, der auf die Speicheradresse draufaddiert wird. Die Länge aller Elemente im Array ist bekannt und gleich, und damit ist die genaue Speicheradresse eines Elements einfach berechenbar.
Ein kleines Beispiel: Wir nehmen an daß du ein Array mit fünf Integern hast, und ein Integer benötigt vier Bytes. Das Array wird wie folgt initialisiert:int a = new int[5];

Damit macht der Compiler folgendes: Es muß Speicher vom Betriebssystem beantragt werden, und zwar 5*4 = 20 Byte: fünf Elemente, wobei jedes Element vier Byte groß ist.

In C würde das so ablaufen, daß du dem Betriebssystem sagst, du willst gerne 20 Byte Speicher haben. Dann gibt dir das Betriebssystem einen Pointer, also eine Speicheradresse, an der dein Array anfangen kann.

Wenn du jetzt auf ein Element im Array zugreifst, dann mußt du die Speicheradresse des Elements berechnen. Und diese berechnet sich zu:
Adresse + (n * Elementgröße)

Jetzt überlege mal was du für n einsetzen mußt, damit du das erste Element bekommst. Bedenke, daß dein Speicherbereich bei 'Adresse' bereits anfängt.
Natürlich muß n=0 sein. Dein erstes Element liegt schließlich auf 'Adresse'.

Du mußt, wenn du in C oder Java programmierst, dich aber nicht mit Adressberechnung herumschlagen, das macht der Compiler für dich. Du sagst einfach: int i = a[0];

Edit:
Vergiss in deinem Beispiel bitte, was die Elemente genau enthalten. a.lenght() liefert die Anzahl der Elemente zurück. Du hast 8 Elemente drin, das sagt dir die Arraylänge (=Länge des Speicherbereichs). Das hat absolut nichts damit zu tun, was die Elemente für Werte haben. Probiere das mal aus:
int [] array={-8, 7, 6, -5, 4, 3, -2, 1, 0};
 

L0oNY

Bekanntes Mitglied
Du verwechselst anscheinend int n=array.length-1 mit int n=array[array.length-1]
das erste gibt dir die Länge des Arrays - 1 zurück, das andere das letzte Element
 

Hbx8x

Aktives Mitglied
Hi und vielen dank, das hat mir sehr geholfen. Ich habe jedoch noch eine Frage zu folgendem ArrayProblem.

Wieso wird in dem Codebeispiel eigentlich kein Datentyp der Variable l zugeordnet z.b. int l. Stattdessen wird ohne einem Datentyp

l=a[0].length;

initialisiert;

Und wieso gilt l=3 wenn man den Code ausführt? Ich meine das erste Teilarray, bzw die erste Zeile hat keinen Inhalt, da {};.

Bedeutet das, dass dieses Teilarray übersprungen wird und es auch nicht die Länge 0 hat ? Macht eigentlich schon Sinn, denn die Länge bezieht sich ja auf die Anzahl der Inhalte und wenn kein Inhalt vorhanden ist kann auch nicht die Länge 1 vorhanden sein. Für die Länge 1 müsste mindestens ein Inhalt vorhanden sein und {}; ist kein Inhalt ...
 

Anhänge

  • arrayfrage.png
    arrayfrage.png
    28,2 KB · Aufrufe: 102

White_Fox

Top Contributor
Wieso wird in dem Codebeispiel eigentlich kein Datentyp der Variable l zugeordnet z.b. int l. Stattdessen wird ohne einem Datentyp

l=a[0].length;
Ich müßte das mal ausprobieren, aber eigentlich ist der Datentyp von l bekannt, l muß ein int sein. Es ist aber auf jeden Fall ganz scheußlicher Programmierstil (aber das ist nicht der Sinn der Aufgabe, denke ich).

Edit:
Ich habs grad mal ausprobiert: Der Code kann so nicht geschrieben werden, da meckert die IDE.
 
Zuletzt bearbeitet:

Hbx8x

Aktives Mitglied
Ja, da muss sich wohl ein Fehler eingeschlichen haben. Hab es aber jetzt alles verstanden, also vielen dank!

Ich hänge momentan an folgendem Array-Code im Anhang. Mir liegt zwar die Musterlösung bei mich würde dennoch eure Meinung interessieren. Es geht um das Arrayfeld c[k++]. Wie kann man das genau interpretieren? c wäre ja der ite Inhalt des Arrays aber wenn c[k++] ist dann wüde sich der betrachtete Inhalt um eins verschieben nach jedem Schleifendurchlauf oder?
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    27,6 KB · Aufrufe: 87
Zuletzt bearbeitet:

Hbx8x

Aktives Mitglied
Ich versteh es leider nicht ganz.

int[] array = {0,1,2,3,..,n} ist ein Array mit n+1 Inhalten/Feldern, diese kann man aufrufen mit
array[k] z.b. das dritte Feld array [2]. Möchte man ein allgemeines Array mit einer Kapazitität von g deklarieren gilt

int[] array = new int[g]. Dieses array hat g+1 Inhalte.

Nun steht im oben genannten Code c[k++] und ich sehe hierzu nur bei array[k] eine äquivlenz, deshalb muss c[k++] das Feld/der Inhalt des Feldes bei k++ sein ? Ich habe mir deinen Post noch einmal durchgelesen, aber ich erkenne keine Verbesserung meiner Problemstellung.


Da k=0 gilt zu Beginn der Schleife folgt

k[0],k[1],k[2],..., d.h. man bewegt sich sozusagen innerhalb des Arrays Schritt für Schritt durch bis die Bedingung für die While Schleife nicht mehr gilt.

Lg
 

White_Fox

Top Contributor
Nun steht im oben genannten Code c[k++] und ich sehe hierzu nur bei array[k] eine äquivlenz, deshalb muss c[k++] das Feld/der Inhalt des Feldes bei k++ sein ? Ich habe mir deinen Post noch einmal durchgelesen, aber ich erkenne keine Verbesserung meiner Problemstellung.
Zwischen den [] muß ein ganzzahliger numerischer Ausdruck >= 0 stehen, also 0, 1, 2, ... . Wie dieser Ausdruck aussieht, ist völlig egal. Das kann ein direkter Wert:
Java:
int i[] = new int[23];
eine Variable:
Java:
int n = 42;
int i[] = new int[n];
oder eine Funktion:
Java:
public int getN(){
    return 7;
}
int i[] = new int[getN()];
sein. Völlig egal was, solange am Ende ein Integer zwischen den [] steht. Auch k++ ist am Ende ein Integer.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Frage zum Array Java Basics - Anfänger-Themen 1
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
W Stream Array List - Frage Java Basics - Anfänger-Themen 5
O Ganz einfache Frage - Array Java Basics - Anfänger-Themen 5
H Frage zu Übungsaufgabe, Array Java Basics - Anfänger-Themen 7
O boolean Array Frage! Java Basics - Anfänger-Themen 4
A Frage zu einem Array Java Basics - Anfänger-Themen 14
M Eine Frage zu Array Java Basics - Anfänger-Themen 6
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
M Methoden Array unbedingt klonen? und Point Frage. Java Basics - Anfänger-Themen 4
C Input/Output Anfänger Array-Verständnis Frage Java Basics - Anfänger-Themen 7
S Frage zu Array Java Basics - Anfänger-Themen 7
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
S Frage zu Elterklasse Array Java Basics - Anfänger-Themen 6
P Array Frage Java Basics - Anfänger-Themen 3
S Frage zur Array Ausgabe Java Basics - Anfänger-Themen 3
R Kleine Frage zu Array Java Basics - Anfänger-Themen 2
G array Frage Java Basics - Anfänger-Themen 2
G array frage Java Basics - Anfänger-Themen 11
F Frage zu Array Java Basics - Anfänger-Themen 2
T Frage zu einem kleinen programm mit array's Java Basics - Anfänger-Themen 8
B array frage Java Basics - Anfänger-Themen 10
K Kurze Frage zur Sortierung von Array-Inhalten Java Basics - Anfänger-Themen 5
A Array Verständnis Frage Java Basics - Anfänger-Themen 4
M Frage zu Array Java Basics - Anfänger-Themen 2
C Frage zu: String einlesen -> Array von Chars erhalten Java Basics - Anfänger-Themen 4
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben