Elemente in Arrays (java) einfügen?

3 Antworten

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;
}
5

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.

0
44
@SelliWayne

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

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

Oder so?

{5, 120, -9}
0

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.

5

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

0
39
@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)));
0

Du solltest schon richtig formatieren:

 - (Computer, Java, Array)
5

Bei mir wurd eigentlich immer automatisch formartiert, danke :D Hat zwar meine Frage nicht beantworte, aber naja

0
44
@SelliWayne

In diesen Fällen hat dann jemand deine Antwort nachträglich editiert.

0

Hallo zusammen! Brauche Hilfe in Java, bei einem Programm über Lottozahlen (Zufallszahlen). Danke im Voraus schon mal! ?

Mein Programm zieht 10-mal 6 Zufallszahlen. Das erste Problem ist, dass die Zahlen doppelt vorkommen können, und es auch tun. Mein zweites Problem ist, dass ich den Auftrag habe, angeben zu können welche Zahl wie oft gezogen wurde. Dies bezieht sich darauf, dass wir eine Statistik erstellen sollen, welche Zahl wie oft vorkommt, wenn man 1000-mal die 10 Zahlen ziehen lässt. Hier nun mein Programm : /** * * Beschreibung * * @version 1.0 vom 21.08.2015 * @author / public class ConLotto { // Anfang Attribute private static int [] ziehung = new int [6]; // Ende Attribute // Anfang Methoden public static void main(String[] args) { for (int i=0;i<10 ;i++ ) { bildeZiehungszahlen(); zeigeZiehungszahlen(); } // end of for } // end of main public static void bildeZiehungszahlen () { for (int i = 0 ; i < 6 ; i++) { ziehung [i] = 1+(int)(49Math.random()); } // end of for } public static void zeigeZiehungszahlen () { System.out.print (" Ziehung ergab:"); for (int i = 0;i<6 ;i++ ) { System.out.print(" " + ziehung [i]) ; } // end of for System.out.println(); } public static void anzahlZiehungszahlen () {

} // Ende Methoden } // end of class ConLotto

Danke im Voraus schon mal!

...zur Frage

Java Primzahlen Programm

Hey Leute, ich habe mal wieder eine Java-Aufgabe, bei welcher ich den Fehler nicht finde. Ich hoffe ihr könnt mir irgendwie weiterhelfen.

public class PrimeNumbers {

static int x = 1000;
private static boolean[] Primes = new boolean[x];

// Hier ist der "statische Konstruktor"
static {
}

private static boolean checkPrime(int number) {

    return false;
}

public static boolean isPrime(int number) {
    int limit=1000;
    int zahl;      
    int zaehler;   
    boolean primzahl; 

    for (zahl = 2; zahl <= limit; zahl++) {
        primzahl = true;

        for (zaehler = 2; zaehler <= zahl/2; zaehler++) {
            if (zahl % zaehler == 0) {
                primzahl = false;
              break;
            }

        }

        if (primzahl) {
            return true;
        }
    }
    return false;
}

Die Primzahlen, welche zu überprüfen sind werden in einer anderen Methode übergeben und abefragt. Ich habe hier das Problem, dass er mir entweder immer true oder immer false returned, egal ob es nun eine Primzahl ist oder nicht. Ich komme einfach nicht weiter, egal wie ich es drehe und wende. Ich hoffe ihr könnt mir weiterhelfen.

Grüße Dubsepp

...zur Frage

Was möchtest Du wissen?