Duplikate in Array finden...

Bitte aktiviere JavaScript!
Hallo zusammen,
ich sitze hier schon seit Stunden und tüftle daran wie ich dieses Problem lösen könnte, ich komm einfach nicht drauf.

11607
Hier mein bisheriger Code:


Java:
package cleararray1;

import java.util.Arrays;

public class ClearArray1 {

    

    public static void main(String[] args) {

        int[] arr = new int[10];

        for (int i = 0; i <= 9; i++) {

            arr[i] = (int) (Math.random() * 9 + 1);

            System.out.print(arr[i] + "\t");
            
        }
        Arrays.sort(arr);
        //System.out.println(Arrays.toString(arr));
        System.out.print("\n\n");
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] == arr[i - 1]) {
              System.out.print(0 + "\t");
            }
            else {
                
                System.out.print(arr[i] + "\t");
            }
        }

    }

    public static int zufZa(int limit) {
        return (int) (Math.random() * limit);

    }

}
Nachdem die Zahlen sortiert, auf Duplikate geprüft wurden und durch 0 ersetzt wurden bekomme ich trotzdem nicht die richtige Ausgabe.
Bei mir sieht es dann so aus:
11608
Ich glaube ich sitze schon zu lange daran um noch irgendwie den Fehler zu finden.
Bitte um Hilfe
Vielen Dank
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Du könntest z. B. hergehen und Dein Array gedanklich in zwei Teile teilen: der linke Teil ist derjenige, der garantiert keine Duplikate enthält und der rechte Teil ist der Rest.

Am Anfang besteht der linke Teil nur aus dem ersten Element des Arrays. Dieses ist das aktuelle Element (in Deiner Aufgabe wäre das die 3). Dann durchsucht Du den rechten Teil und ersetzt dabei jedes Element, das mit dem aktuellen Element übereinstimmt mit einer 0. Dann kannst Du den linken Teil um ein Element vergrößern. (d .h. das nächste Element wählen).
 
@Maxxie
Letztendlich ganz einfach. Nimm die erste Zahl und prüfe, ob diese im Array noch einmal vorkommt. Dass die Position der ersten Zahl zum Vergleich von der zu vergleichenden Zahl sich um Eins erhöht, liegt an der Hand. Wenn es zutreffen sollte, dann verfahre nach der Methode und entferne alle Duplikate. Fahre solange fort, bis du am Ende des zu prüfenden Arrays angekommen bist.
Java:
private static int[] removeAllDuplicates(int[] array_to_check)
    {
        int[] array = array_to_check;
        int step;
        int arrayLength = 0;
        while (arrayLength < array.length)
        {
            step = array[arrayLength];
            boolean dNumber = check(step, arrayLength, array);
            if (dNumber)
            {
                removeAllDuplicates(step, arrayLength, array);
            }
            arrayLength++;
        }
        return array;
    }

/** Output */
3, 4, 6, 3, 9, 7, 6, 3, 4, 1
3, 4, 6, 0, 9, 7, 0, 0, 0, 1
 
Benutzt mehr Streams :D
Java:
import static java.util.stream.IntStream.*;

private static boolean enthält(int[] ints, int idx) {
  return of(ints).limit(idx).anyMatch(v -> v == ints[idx]);
}
public static int[] ersetzeDuplikateDurch0(int[] ints) {
  return range(0, ints.length)
    .map(i -> enthält(ints, i) ? 0 : ints[i])
    .toArray();
}
 
Alternativ kannst du auch mit einem HashSet experimentieren. Ein Set ist eine Menge, wie wir sie aus der Mathematik kennen. Eine Menge enthält keine Duplikate.
 
Japp. Und Erfahrung mit rein funktionalen Programmiersprachen. Da lernt man das "funktionale Vokabular" wie "filter", "map", "flatMap", "dropWhile", "takeWhile", etc.. Diese "Primitive" findet man in jeder funktionalen Programmiersprache. Bei mir war es Haskell. Leider leider leider gibt es in Java kein zip und keine Tupeldatentypen, was funktionale Programmierung in Java immer noch sehr einschränkt. Hierfür kann ich nur allerwärmstens https://github.com/jOOQ/jOOL empfehlen!
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben