Elemente in Arrays (java) einfügen?

2 Antworten

Zu deiner Lösung:

Du kopierst deine Werte nicht. Auch sehe ich keinen Sinn darin den Wert des Arrays bei Iterator+1 auf 0 oder 1 zu setzen.

Zudem wird ein ganzer Teil des rueckgabe-Arrays nicht von deinem Algorithmus behandelt (z.B. Index 0 oder der letzte Index).

Außerdem versuchst du von deiner Methode auf "element" zuzugreifen. Auf "element" kannst du nur in deiner Methode und spezifisch NUR in deiner foreach-Schleife zugreifen.

Notation: Du brauchst deine Klasse nicht zu initalisieren, da dur nur statische Methoden verwendest. Das "new Array()" würde somit wegfallen. Zudem würde, zumindest ich, es nicht wie ein bekannten Datentypen nennen. Falls du allerdings wirklich Attribute hast, solltest du die vll. auslagern in eine eigene Klasse auslagern (ich finde main in einer Klasse die instanziiert werden soll n bissl gruselig).

Meine Meinung:

Ich würde kein int-Array zurückgeben, da die 0 nicht ohne weiteres dargestellt werden kann. So wirste mit dem Array nicht "-09" bekommen darstellen können (sofern es gefordert ist).

Implementierung meinerseits:

public static String[] veraendereArray(int[] intArr){
    String[] retArr = new String[intArr.length];

    for(int i=0;i<intArr.length;i++){
        if(intArr[i]<0&&intArr[i]>-10){
            retArr[i]="-0" + (intArr[i]*(-1));
        }
        else if(intArr[i]<-10){
            retArr[i]="-1" + (intArr[i]*(-1));
        }
        else if(intArr[i]<10&&intArr[i]>0){
            retArr[i]="0"+intArr[i];
        }
        else if(intArr[i]>10){
            retArr[i]="1"+intArr[i];
        }
        else{
            retArr[i]="0";
        }
    }
    return retArr;
}

Die Rückgabe für dein Beispiel sollte

{05,120,-09}

sein.


SelliWayne 
Beitragsersteller
 05.03.2018, 02:38

Funktioniert das denn garnicht, dass 0 oder 1 vor dem Wert ausgegeben wird? So ist nämlich die Aufgabenstellung

Etter  05.03.2018, 13:55
@SelliWayne

Naja das geht schon, allerdings kannst du dabei das Array nicht verändern, wenn es sich um int-Werte handelt oder zumindest wüsste ich nicht wie man aus "-9" "-09" (als Integer) machen sollte, da man dazu die 0 in den Eintrag vor der 9 schreiben müsste usw. Zudem hängt es davon ab, ob überhaupt negative Zahlen ebenso verändert ausgegeben werden sollen wie die positiven.

Wenn du eine reine Ausgabe haben willst ohne ein zweites Array zu haben, könntest du auch das Beispiel das ich geschrieben habe umarbeiten und direkt die Ausgabe treffen statt es erst in ein String-Array zu schreiben.

Beispiel:

System.out.println("-0" + (intArr[i]*(-1)));

Zuerst einmal haben sich einige grundlegende Fehler bei dir eingeschlichen.

a) Um eine Methode aufzurufen, ist eine Argumentliste notwendig, ein Indexer ist falsch.

int[] rueckgabe = Array.veraendereArray[liste]; // wrong
int[] rueckgabe = Array.veraendereArray(liste); // right

b) Die Variable element ist in dem Kontext der Methode veraendereArray überhaupt nicht bekannt. Stattdessen müsstest du die Elemente der Liste aufrufen:

if (liste[i] < 10) {

c) Ein Array hat bei n Elementen nur einen Index bis n - 1. Daher führt dies dann zu einer IndexOutOfBoundException:

for (int i = 0; i <= liste.length; i++) {
  if (liste[i] < 10) {

d) Die Methode veraendereArray definiert zwar einen Rückgabetyp, gibt aber nichts via return-Befehl zurück.

e) Kein Fehler, kann aber dennoch raus - die Variable arrayListe. Das Objekt wird überhaupt nicht verwendet.

Nun zur Logik:

Die von dir beschriebenen Anforderungen passen nicht zu dem, was das Programm macht. Wenn etwas vor ein Element gesetzt werden soll, sollte eher -1 gerechnet werden. Außerdem setzt du die alten Elemente nicht wieder ein, sondern erhöhst lediglich das neue Array willkürlich um 4 Elemente. Das ist unflexibel gegenüber verschiedenen Arrays, die du der Methode später einmal übergeben könntest.

Ich würde es daher so abändern:

  1. Array in der Größe verdoppeln
  2. Durch altes Array laufen, aber mit 2 Zählern (einer zählt immer +1 für die alte und einer +2 für die neue Liste)
  3. Aktuelles Element des alten Arrays prüfen und je nachdem 0 / 1 in das Resultat einfügen
  4. Die alte Zahl in das Resultat einfügen

Ergebnis:

public static int [] changeArray(int[] list) {
  int[] result = new int[list.length * 2];

  for (int i = 0, j = 0; i < list.length; ++i, j += 2) {
    if (list[i] < 10) {
      result[j] = 0;
    }
    else {
      result[j] = 1;
    }
                            			
    result[j + 1] = list[i];			
  }

  return result;
}

SelliWayne 
Beitragsersteller
 04.03.2018, 12:39

Danke für die Antwort, echt hilfreich!

Aber wie würde es aussehen, wenn die Ausgabe vor der jeweiligen Zahl stehen soll? Also das ist eine Aufgabe, die so gestellt wurde.

regex9  04.03.2018, 12:49
@SelliWayne

Wie ist das zu verstehen? Sollte das Ergebnis dann so aussehen?

{05, 120, 0-9} // a

Oder so?

{5, 120, -9}