Kann man Array erstellen ohne vorher die Größe zu wissen?
Ich musste ein paar Umwege gehen, um das Array zu erstellen das ich wollte, wie sie auf diesem Bild sehen können. Wie hätte ich hierbei Schritte sparen können?
Erklärung zum Bild
z.B.: int[] intervall = {3, 8}; zahlenIntervall macht aus "intervall[]" ein richtiges intervall von 3 bis 8 in int. Dann werden nur die knuddeligen (Bedeutung davon irrelevant) in ein neues Intervall platziert, um diesen dann in das ursprüngliche Intervall "intervall[]" zu platzieren. Jedoch brauchte ich dann nochmals ein weiteres Array, damit "intervall[]" nicht in den letzten Positionen eine 0 (bzw. leere eingabe) besitzt.
2 Stimmen
2 Antworten
Die Größe eines Arrays muss stets beim Anlegen dessen bekannt sein. So kannst du die Größe später nur noch verändern, indem du ein neues Array (mit korrekter Größe) anlegst und die Werte vom alten Array in das neue Array hineinkopierst.
Anfängern rate ich in diesem Fall eher dazu, dies mit einer Schleife selbst zu lösen, denn es ist eine gute Fingerübung. Verkürzen lässt sich der Prozess allerdings mit copyOf.
Beispiel:
int[] numbers = new int[] { 1, 2, 3, 4, 5, 0, 0 };
int[] selection = Array.copyOf(numbers, 5);
Ansonsten wäre die entgegengesetzte Option, erst die richtige Länge zu berechnen. Normalerweise ist das aber ein zu aufwendiges Verfahren.
Wenn du dynamische Objekte zum Speichern mehrerer Werte haben möchtest, solltest du bspw. Listen verwenden. Dabei solltest du allerdings beachten, dass deine Elemente dann als komplexe Typen abgespeichert werden müssen (z.B. als Object oder in den dazugehörigen Wrapper-Typen deiner Primitive: Integer, Boolean, Character, etc.).
Die Liste lässt sich dennoch später einfach mit der Stream API zu einem Array primitiven Typs umwandeln.
Beispiel:
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
int[] numbersAsArray = numbers.stream().mapToInt(i -> i).toArray();
Nimm vorher List<Integer>, füge Daten hinzu und mache nachher mit der Klasse Arrays daraus ein Integer[].