Erste Schritte Deklaration und Initialisierung von Arrays

Reggie()

Bekanntes Mitglied
Hi Leute,
ich habe noch Probleme zu verstehen, wann und wo ich Arrays deklariere bzw. initialisiere. Mache ich das bei den Klassenattributen oder im Konstruktor? oder in einer Methode oder in der main?
also erst String[] str; und später str = new String[5]; ? oder kann/soll ich das uU gleich bei den Attributen String[] str = new String[5]; oder gar gleich String[] str= new String{"a","b","c","d","e"); ?
ist String[] str = new String[5]; überhaupt nötig?
 
String[] str= new String{"a","b","c","d","e");
Die Zeile ist fehlerhaft. Der new-Operator darf nicht verwendet werden.
Wie dem auch sei. Wenn du String[] str = {"a","b","c","d","e"}; schreibst, ist von vornherein klar, dass da 5 Elemente sind. Bei Arrays können nachträglich keine Elemente hinzugefügt werden.
 
Zuletzt bearbeitet:
ich habe noch Probleme zu verstehen, wann und wo ich Arrays deklariere bzw. initialisiere.
Das kommt ganz darauf an wo du welches Array brauchst bzw. verwenden willst 😉

Wenn du es in der Klasse in verschiedenen Methoden brauchst dann solltest du es als Attribut deklarieren, wenn du es nur lokal in einer Methode brauchst dann eben nur dort.
Ob du es nun auch direkt bei der Deklarierung auch initialisierst hängt davon ob die Größe dir schon bekannt ist oder diese vielleicht durch einen Parameter festgelegt ist.

Achtung:
Java:
String[] myStringArray = new String[5]; // erzeugt ein Array mit der Länge 5, auf allen Indexe ist noch kein Wert festgelegt
String[] anotherStringArray = { "a", "b", "c", "d"}; // erzeugt ein Array mit der Länge 4, die Indexe wurden auch schon mit Werten belegt

int[] = new int[10]; // erzeugt ein Array mit der Länge 10, alle Indexe haben den Wert 0 da es sich beim Array Typ um einen primitiven Datentyp handelt
 
Ich denke das kann man pauschal nicht sagen, da es von der Situation abhängt.

Ob du Variablen erst im Konstruktor initialisierst oder es direkt nach der Deklaration machst ist mMn. egal solange du zu dem Zeitpunkt schon alles über dein Array weißt (Anzahl der Elemente / Werte). Wenn du am Anfang nur weißt dass du ein int Array bestehend aus 5 Elementen hast dann kannst du es eben erst später mit Werten füllen.

String[] str = new String[5]; kannst du sehr wohl gebrauchen - nämlich immer dann wenn du weißt dass du ein Array mit 5 Elementen brauchst aber die Werte erst nach und nach in das Array eintragen willst. Genau so ist String[] str = { "A", "B", "C" }; nützlich wenn du einem Array default Werte zuweisen möchtest.

Wie du es am Ende machst ist - wie bereits geschrieben - Situationsabhängig und kann man pauschal nicht sagen. Ich bspw. bevorzuge es Variablen immer erst im Konstruktor zu initialisieren. Ich kenne aber auch Leute die es lieber haben das direkt nach der Deklaration zu machen.

Gruß Robert
 
ok. ich fasse zusammen. WENN ich schon Werte zuweisen möchte, dann benötige ich keine gesonderte Deklaration. also ist
String[] str = new String[3]; unnötig, wenn ich String[] str = { "A", "B", "C" }; mache.
vielen Dank 🙂
 
also würde das gehen, eine Deklaration und Initialisierung in einer Methode?
Java:
  public void erstelleSpielkarten() {
    String[] temp = { "7","8","9","10","B","D","K","A" };
    for(int i=0; i<8; i++) {
      ziehstapel.add("Karo",temp[i]);
      ziehstapel.add("Herz",temp[i]);
      ziehstapel.add("Pik",temp[i]);
      ziehstapel.add("Kreuz",temp[i]);
    }
  }
 
geht leider nicht. bin grad in der Arbeit. dies ist reine Theorie (probieren kann ichs erst zuhause, wills aber jetzt schon wissen 🙂
 
Es würde funktionieren, ja.

Ich würde die 8 aber nicht hard-coden sondern direkt über die Länge des Arrays gehen.
for(int i = 0; i < arr.length; i++).
So vermeidest du Fehler falls sich die Anzahl der Elemente im Array mal ändern sollte.

Gruß Robert
 
nächste Frage geht um entfernen von Werten aus dem Array bzw. ArrayList. ich habe gelesen, dass die Liste (indexe) nachrutschen. remove ich index 0 , dann wird index 1 zu 0, index 2 zu 1 usw..
wenn ich also die ersten 5 Werte haben möchte, dann kann ich keine Schleife mit remove(i) machen, sondern müsste 5x remove(0) machen, also 5x den ersten (index 0) Wert? ich hoffe die Frage war verständlich.
 
Erstmal kannst du bei einem Array keine Elemente hinzufügen oder löschen. Das geht nur bei Listen.

Das bei Listen die Elemente nachrutschen wenn du einen Eintrag löschst ist richtig aber ich versteh deine Frage noch nicht ganz. Wenn du auf das 5. Element zugreifen willst kannst du das bei einer Liste mit myList.get(int index);.
Wenn du die ersten 3 Elemente löschen willst dann kannst du das auch über eine Schleife lösen:

Java:
for(int i = 0; i < 4; i++)
    myList.remove(0);

Wenn du wie geschrieben die ersten 5 Werte haben möchtest:
wenn ich also die ersten 5 Werte haben möchte,

Dann kannst du das wie bei einem Array mit einer Schleife machen:
Java:
for(int i = 0; i < 5; i++)
    System.out.println(myList.get(i));

Gruß Robert
 
Java:
for(int i = 0; i < 4; i++)
    myList.remove(0);
Danke Robert, das hat zu 100% meine Frage beantwortet.

Rätsel: was wird ausgegeben? man beachte remove(i)
Java:
List<int> myList = { 0,1,2,3,4,5,6,7,8,9 };
for(int i = 0; i < 4; i++)
    System.out.print(myList.remove(i));

Antwort:




0246
EDIT: ooops, habe grad gelesen, dass man wohl primitive Datentypen wie int nicht in Listen packen kann, ausser man castet sie zum Objekt
 
Zuletzt bearbeitet:
Ich glaube du meinst es so:
Java:
import java.util.ArrayList;
import java.util.List;

public class Hauptprogramm {

    public static void main(String[] args) {
        List<Integer> myList = new ArrayList<Integer>();
        myList.add(0);
        myList.add(1);
        myList.add(2);
        myList.add(3);
        myList.add(4);
        myList.add(5);
        myList.add(6);
        myList.add(7);
        myList.add(8);
        myList.add(9);

       for(int i = 0; i < 4; i++)
           System.out.print(myList.remove(i));

    }

}

Ausgabe ist:
0246

@thecain Er kann es nicht ausprobieren da er auf Arbeit ist.
 
du hast es andersrum gemacht. die Frage war, welche Werte man erhält, wenn man nacheinander index 0, 1, 2 und 3 entfernt. aber sorum gehts auch und du bist zum gleichen Ergebnis gekommen (invertiert) 🙂
und ist es wirklich so mit den primitiven Datentypen? laut der Dok, die ich gelesen habe, würde myList.add(0) zum Fehler führen
 
Anders ist es nicht möglich.
Dein Code
Java:
List<int> myList = { 0,1,2,3,4,5,6,7,8,9 };
funktioniert nicht.

Du könntest auch ein int-Array machen aber dann kannst du nichts removen.
 
Time to get crazy:
Java:
import java.util.ArrayList;
import java.util.List;

public class Hauptprogramm {

    public static void main(String[] args) {
        List<Integer> myList = new ArrayList<Integer>();
        myList.add(0);
        myList.add(1);
        myList.add(2);
        myList.add(3);
        myList.add(4);
        myList.add(5);
        myList.add(6);
        myList.add(7);
        myList.add(8);
        myList.add(9);

       String ergebnis;
       for(int i = 0; i < 4; i++)
         ergebnis += Integer.toString(myList.remove(i));
       System.out.print(ergebnis);
    }
}
geht das? gibt er dann 0246 aus?
 
Du musst es so machen:
Java:
import java.util.ArrayList;
import java.util.List;

public class Hauptprogramm {

	public static void main(String[] args) {
		List<Integer> myList = new ArrayList<Integer>();
		myList.add(0);
		myList.add(1);
		myList.add(2);
		myList.add(3);
		myList.add(4);
		myList.add(5);
		myList.add(6);
		myList.add(7);
		myList.add(8);
		myList.add(9);

		String ergebnis = "";
		for (int i = 0; i < 4; i++)
			ergebnis += Integer.toString(myList.remove(i));
		System.out.print(ergebnis);
	}
}

Die Ausgabe ist:
0246
 

Neue Themen


Zurück
Oben