Java array Aufgabe fast richtig es kommt immer hinten eine 0 raus woran liegt das siehe Foto?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mal das erste als Beispiel:

nums.length ist 4

length wird auf 1 gesetzt
und dann erstellst du ein array mit der länge nums.length - length (4 - 1) also 3
Dein neues array hat also ein feld zu viel und da du dieses nicht befüllst (weil du in der zweiten schleife z < array.length - 1 statt z < array.length als bedingung hast) bleibt dieses feld auf 0.
Also musst du einfach die neue array länge um eins verkleinern also
int[] array = new int[nums.length - length - 1];

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler, B. Sc. Informatik
Nichtsnutz12 
Fragesteller
 11.07.2019, 20:45

danke für dienen Vorschlag aber er hat es leider nur verschlimmert.... 😞😞😞 :

https://ibb.co/ZxYBbZN

0
Tyldu  11.07.2019, 21:00
@Nichtsnutz12

erkenne auf dem bild nix musst in der zweiten schleifen noch anpassen, dass er anständig durchs array iteriert. Hab ich vergessen zu erwähnen sorry :D
also statt

z < array.length - 1

z < array.length

dann müsste es eigentlich gehen (:

1

Bei der Befüllung zählst du von 0 bis Arraygröße - 1 (exklusive). Das heißt, bei einem Array [ 2, 3, 4 ] würdest du von Index 0 (2) bis Index 2 (exklusive!) zählen. Es würden nur die Elemente an Index 0 und 1 gesetzt werden. Alle Elemente danach behalten ihren Initialwert.

Nichtsnutz12 
Fragesteller
 11.07.2019, 20:46

ok hab -1 weggemacht bei befallen array aber dann kommt bound of exception

0
regex9  11.07.2019, 21:45
@Nichtsnutz12

Ja, das hängt ganz sicher mit dem Index zusammen, den du für nums bildest.

1

Ich denke die 0 am Ende kommt daher, dass du beim Initialisieren von "array" die Größe falsch setzt. Versuch' da am Ende mal ein -1 nach "- length" zu schreiben.

Würde es persönlich wohl folgendermaßen lösen:

public int[] post4(int[] nums) {
  for (int i = nums.length -1; i >= 0; i--) {
    if (nums[i] == 4) {
      return Arrays.copyOfRange(nums, i + 1, nums.length);
    }
  }
  
  return new int[0];
}

Was deinen Ansatz angeht. Du musst beim Anlegen deines Array eine -1 abziehen. Wenn du z.B. im ersten Test den Index 1 für deine 4 rauskriegst und in length speicherst, dann sagt die Zeile aktuell nums.length - length, macht bei dem Bespiel 4 - 1, also 3 Elemente, du brauchst aber nur 2 Elemente, denn du willst ja nach der 4 anfangen. Muss also heißen:

int[] array = new int[nums.length - length - 1];

Mal davon ab, dass length hier eh ein ungünstiger Variablenname ist und etwas ala indexOfLastFour oder ähnliches passender wäre.

Beim Befüllen hingegen willst du das gesamte Array befüllen, hier muss also im Schleifenkopf das -1 entfernt werden und es müsste heißen:

for (int z = 0; z < array.length - 1; z++) {

Davon ab wie beim letzten mal schon gesagt, mach es den Leuten einfacher. Poste hier den Code und im Zweifel auch einen Link zur Seite, wo du das bearbeitest anstatt Bilder, dafür im Editor oben das Symbol links vom Kreuz, also das zweite von rechts und dort den Code rein kopieren.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012