Java Array Frage

Alobe

Ensign
Registriert
Aug. 2013
Beiträge
129
Hallo,

was ist der Unterschied zwischen diesem Java Code:
Code:
	public Startklasse(){
		anzeige = new anzeigeLinie[6];
	}

und diesem:
Code:
private anzeigeLinie[] anzeige = {new anzeigeLinie(0),new anzeigeLinie(1),new anzeigeLinie(2), new anzeigeLinie(3),new anzeigeLinie(4),new anzeigeLinie(5)};

der erste funktioniert nicht und der zweite tut es aber.

Kann mir jemand den Unterschied zwischen beiden Codes erklären?
 
Da fehlen runde Klammern beim 1. Code
 
Hi,
was heisst tut nicht?

Beim ersten Beispiel erzeugst du ein leeres Array und beim zweiten füllst du es während der Initialisierung. Das ist der Unterschied.

greetz
​hroessler
Ergänzung ()

wahli schrieb:
Da fehlen runde Klammern beim 1. Code
Keine runden Klammern beim Erzeugen eines Arrays ;)

greetz
​hroessler
 
Zuletzt bearbeitet von einem Moderator:
der erste funktioniert nicht und der zweite tut es aber.
Musst du nicht im ersten Codeschnipsel anzeige vorerst deklarieren? Hier wurde ja noch kein Datentyp angegeben. Erst im zweiten Code taucht dann der DatenTyp AnzeigeLinie auf. Oder übersehe ich da was? ^^

Aber sonst wurde ja die Funktionalität bereits erklärt :)
Wenn du jedoch dann aufs Array zugreifen willst kannst du es nur mit den zahlen von 0-5 und nicht 1-6 ;)
Bei anzeigelinie[6] würde er kein Wert gespeichert haben
 
Zuletzt bearbeitet:
So würde es funktionieren:
Code:
	public Startklasse(){
		anzeige = new anzeigeLinie[6];
		for (int i=0; i<6; i++)
			anzeige[i] = new anzeigeLinie(i);
	}
 
Ich würde mich aber an die Standard Java Code-Standard halten und die eigenen Klassen mit einem Großbuchstaben anfangen lassen:

Code:
private AnzeigeLinie[] anzeige;

public Startklasse() {
    this.anzeige = new AnzeigeLinie[6];
    for (int i=0; i<6; i++)
        anzeige[i] = new AnzeigeLinie(i);
}
 
Zuletzt bearbeitet:
Danke für die Antworten.

@hroessler:
also ich erzeuge das Array und befülle es dann mit was? Mit den werten die in den () Klammern stehen?
Aber woher weis das Array wie viele "Schubladen" es hat? Also wie groß es ist? Wenn ich Code 1 weg lasse
 
Da fehlt's wohl gewaltig an den Basics. Wie wär's mit 'nem Buch für Einsteiger?


Code:
  besagt, dass es sich um ein Integer-Array handelt (Deklaration)
    |
    v
Integer[] intArray = new Integer[6];
                             A
                             |
           erstellt ein neues LEERES Integer-Array der Größe 6 (Definition)

Code:
  besagt, dass es sich um ein Integer-Array handelt (Deklaration)
    |
    v
Integer[] intArray = new Integer[] { new Integer(1), new Integer(2), new Integer(3) };
                             A
                             |
  erstellt ein neues Integer-Array der Größe 3 (Definition) und befüllt es mit den 3 Integers in den geschweifen Klammern

Code:
Integer[] intArray = new Integer[6];

intArray.length    // gibt 6 zurück, weil das Array eine Größe von 6 hat.

for(int i=0; i<intArray.length; i++) {
  intArray[i] = new Integer(i);    // setzt neue Integers an den Array-Positionen 0 bis 5
}

intArray[4] = null;    // setzt den 5. Wert im Array auf null

intArray[6] = null;    // gibt eine Exception, weil das Array nur 6 Slots hat, aber hier versucht wird auf Slot 7 zuzugreifen.

Viel mehr kann man mit einem Array auch schon gar nicht anstellen.

Vergrößern / Verkleinern ist nicht direkt möglich, da ein Array aus einem zusammenhängenden fest reservierten Speicherbereich besteht. Für dynamische Größen verwendet man dann z.B. eine ArrayList.
 
Zuletzt bearbeitet:
Wow vielen Dank @benneque.

Das habe ich jetzt soweit gecheckt.
Code:
Integer[] intArray = new Integer[] { new Integer(1), new Integer(2), new Integer(3) };
A
|
erstellt ein neues Integer-Array der Größe 3 (Definition) und befüllt es mit den 3 Integers in den geschweifen Klammern
Aber befüllt er das Array dann mit leeren Integern? Oder mit den Werten 1, 2, 3? Oder spielen die Nummern in den normalen Klammern nach jedem neuen Integer keine Rolle? Das checke ich nicht was dass bedeuten soll.
 
Settel schrieb:
Code:
Integer[] intArray = new Integer[] { new Integer(1), new Integer(2), new Integer(3) };

erstellt ein neues Integer-Array der Größe 3 (Definition) und befüllt es mit den 3 Integers in den geschweifen Klammern
Aber befüllt er das Array dann mit leeren Integern? Oder mit den Werten 1, 2, 3? Oder spielen die Nummern in den normalen Klammern nach jedem neuen Integer keine Rolle? Das checke ich nicht was dass bedeuten soll.

Es werden drei Objekte des Typs Integer mit den jeweiligen (primitiven) Werten erstellt. http://openbook.galileocomputing.de...tml#dodtp7f27e4e3-b862-4acc-8daa-efdbe259745b

Die Klasse Integer bietet übrigens eine Factory-Methode, die man zum Erstellen anstatt des new-Operators nutzen sollte: Integer#valueOf()
 
Ich habe in einer Klasse ein Array erstellt
Code:
private anzeigeLinie[] anzeige = {new anzeigeLinie(0),new anzeigeLinie(0),new anzeigeLinie(0), new anzeigeLinie(0),new anzeigeLinie(0),new anzeigeLinie(0)};

Dan wird dem Array diese Werte zugewiesen.
Code:
    anzeige[0].teil = "1";
		anzeige[1].teil = "2";
		anzeige[2].teil = "3";
		anzeige[3].teil = "4";
		anzeige[4].teil = "5";
		anzeige[5].teil = "6";
Die Anzeige funktioniert nur wenn ich folgende Klasse definiere
Code:
public class anzeigeLinie {
	public String teil;
	public int gesamt;
	
	anzeigeLinie(int x){
		gesamt = x;
	}
}

Kann ich die Klasse auch weg lassen und wenn ja, wie kann man das lösen?
 
Du solltest wirklich dringend die Basics der Basics des Programmierens lernen. Kauf dir ein Buch oder schau Video Einführungen oder was auch immer ...

Code:
private anzeigeLinie[] anzeige = ...

Erstellt ein Array vom Typ "anzeigeLinie".

Woher soll Java wissen, was "anzeigeLinie" ist, wenn du es nirgends definiert hast? Bei String und Integer ist das was anderes, die Typen bringt Java mit. Aber wenn du eigene Typen (= Klassen) benutzen willst, dann musst du in jeder statischen Programmiersprache diese Typen irgendwo aufschreiben und dem Programm bekannt machen.

Man kann das ganze natürlich auch in Java ohne Klassen lösen und z.B. mit einer Map<String, Object> arbeiten. Aber das sollte man als Anfänger tunlichst vermeiden.

Was ist denn dein Problem mit der Klasse? Objekt orientierte Programme bestehen nun mal aus Klassen.

Wenn du dynamisch programmieren willst, greif zu einer dynamischen Programmiersprache: JavaScript, PHP, Ruby, etc.
 
Zurück
Oben