Doppelte Werte aus Array entfernen ohne Import - Algorithmus

B

barodscheff

Gast
Hallo Leute,

nachdem mir letztes Mal so gut geholfen wurde, habe ich heute wieder ein Problem bei dem ich nicht so recht weiterkomme.

Ich habe eine Methode die ein int-Array erhält. Dieses Array soll ohne doppelte Werte ausgegeben werden. Die Hürde hierbei ist, dass ich keine importierten Klassen verwenden darf. Ich muss also einen Algorithmus erstellen.

Mein Ansatz sieht wie folgt aus:

Java:
public class Joker {
    
    static int[] copyRemove(int[] a) {
	
	// Hilfs-Array -> unschöne Lösung
	int[] b = new int[a.length];
	
	int counter = 0;	
	boolean gleich = false;
	
	// Zählen der nicht-doppelten Werte
	for (int i = 0; i < a.length; i++) {
	    for (int j = 0; j < b.length; j++) {
		if (a[i] == b[j]) {
		    gleich = true;
		    break;
		} else {
		    gleich = false;
		}
	    }
	    if (gleich = false) {
		b[counter] = a[i];
		counter++;
	    }
	}
	
	// Array in das kopiert wird
	int[] c = new int[counter];
	
	for (int i = 0; i < c.length; i++) {
	    c[i] = b[i];
	}
	
	return c;
    }

    public static void main(String[] args) {
	int[] eingabe = {1, 3, 3, 5, 1, 12, 6, 1};
	int[] ausgabe = copyRemove(eingabe);
	for (int i = 0; i < ausgabe.length; i++) {
	    System.out.print(ausgabe[i] + " ");
	}
    }

}

Leider hat der Code 1. einen Fehler, sodass mir kein Ergebnis angezeigt wird und 2. finde ich meine Lösung über ein Hilfsarray irgendwie zu kompliziert. Ich denke das muss irgendwie einfacher gehen, ich komme aber nicht drauf.

Hat jemand von euch eine Idee wie ich das schöner lösen kann?

LG
 
B

barodscheff

Gast
Ok, ich habe den Fehler gefunden.
Bei der if-Abfrage musste ich == statt = schreiben.

Dennoch ist der Code mMn unnötig lang. Es bleibt also weiter die Frage ob jemand Verbesserungsvorschläge hat. Nochmal: Das Array soll ohne doppelte Werte ausgegeben werden.

Java:
public class Joker {
    
    static int[] copyRemove(int[] a) {
	
	// Hilfs-Array -> unschöne Lösung
	int[] b = new int[a.length];
	
	int counter = 0;	
	boolean gleich = false;
	
	// Zählen der nicht-doppelten Werte
	for (int i = 0; i < a.length; i++) {
	    for (int j = 0; j < b.length; j++) {
		if (a[i] == b[j]) {
		    gleich = true;
		    break;
		} else {
		    gleich = false;
		}
	    }
	    if (gleich == false) {
		b[counter] = a[i];
		counter++;
	    }
	}
	
	// Array in das kopiert wird
	int[] c = new int[counter];
	
	for (int i = 0; i < c.length; i++) {
	    c[i] = b[i];
	}
	
	return c;
    }

    public static void main(String[] args) {
	int[] eingabe = {1, 3, 3, 5, 1, 12, 6, 1};
	int[] ausgabe = copyRemove(eingabe);
	for (int i = 0; i < ausgabe.length; i++) {
	    System.out.print(ausgabe[i] + " ");
	}
    }

}
 

Gucky

Top Contributor
Um das Ganze sauber zu implementieren müsste der Code sogar noch länger werden. ;)

Momentan machst du das mit BruteForce. Das ist zwar einfach aber performancetechnisch eher dürftig. Normalerweise wird zuerst das Array nach Größe sortiert, damit nicht immer jeder Eintrag mit jedem anderen verglichen werden muss, sondern man in linearer Zeit sortieren kann und dann in linearer Zeit die doppelten Einträge suchen kann (sie sind nebeneinander). Gleichzeitig zählst du die Anzahl der nicht doppelten Werte. Anhand dieser Größe erstellst du ein neues Array, in das du deine nicht doppelten Werte kopierst.

Dann kannst du noch das hier:
Java:
if (gleich == false) {
       b[counter] = a[i];
       counter++;
}

mit in das else zuvor tun und dahinter ein
Code:
break;
ist zwar nicht getestet, müsste aber funktionieren.
 
B

barodscheff

Gast
Danke für deine Antwort.

Hm, wenn ich den von dir vorgeschlagenen Teil in das else einfüge, dann vergleicht er doch nur das erste Element von b mit a, oder nicht?

Zum Sortieren hätte ich dann auch noch eine Frage. Der schnellste Sortieralgorithmus läuft doch auch nur in O(n * log(n)). Wenn ich den also durchlaufen lasse und dann noch alle nebeneinander liegenden Elemente vergleiche (es könnten auch mehr als nur 2 gleiche Elemente nebeneinander sein), dann brauche ich doch noch länger als mit meiner spartanischen Lösung oder?!

LG
 

Gucky

Top Contributor
Bei kleinen Arrays ja aber bei großen Arrays nicht mehr. Bei deiner Lösung steigt die Laufzeit exponentiell. Diese O Notation kenne ich nicht aber exponentiell steigende Laufzeit ist nie gut. ;) (womöglich wäre es O(n^n))

Was ich mit der Verschiebung des Codes gemeint habe, weiß ich auch nicht mehr. :D Ich hab das wohl nicht richtig gelesen. :D
 

dcc

Aktives Mitglied
Stell doch einfach die gefunden doppelten Elemente an das Ende/Anfang des Int Arrays und merke dir wie viele es davon gibt. Bei der Ausgabe schneidest das einfach ab.

Das kannst easy mit einer doppelten for schleifen machen. Die äußere iteriert über das Int Array selbst, die innere für jedes Int über die letzten bekannten um zu prüfen ob doppelt. Das müsste mitunter am effizientesten sein, da inplace (im array) alles abläuft.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Variablen Doppelte Werte in Int Array Java Basics - Anfänger-Themen 10
S Array befüllen & auf doppelte werte prüfen Java Basics - Anfänger-Themen 6
P doppelte Werte im Array ausgeben. Java Basics - Anfänger-Themen 4
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
S ArrayList Gruppieren, "Doppelte Werte" Addieren Java Basics - Anfänger-Themen 5
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
G Doppelte (Paar) Werte in einem Vektor finden Java Basics - Anfänger-Themen 6
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
D Doppelte For Schleife / Array Java Basics - Anfänger-Themen 3
C das Doppelte des Wertes in der Console ausgeben Java Basics - Anfänger-Themen 10
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
L Doppelte Schleife Anpassen Java Basics - Anfänger-Themen 5
W Map doppelte Values löschen Java Basics - Anfänger-Themen 3
S CSV auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 8
S Doppelte Liste Einfügen Java Basics - Anfänger-Themen 1
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
K Input/Output Doppelte Ausgabe Java Basics - Anfänger-Themen 5
S Erste Schritte Doppelte Ausführung? Java Basics - Anfänger-Themen 4
E Threads Doppelte Threads beenden Java Basics - Anfänger-Themen 4
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
D Java doppelte Zahl/Zeichen in einem String entfernen Java Basics - Anfänger-Themen 6
O Doppelte For-Scheife Java Basics - Anfänger-Themen 6
E Array doppelte Einträge Java Basics - Anfänger-Themen 2
S Variablen Array in ArrayList auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 4
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
P Doppelte Datensätze aus CSV-Datei löschen Java Basics - Anfänger-Themen 17
P Doppelte Einträge in eine List Java Basics - Anfänger-Themen 5
R Doppelte löschen Java Basics - Anfänger-Themen 6
C Doppelte Einträge aus String [] Array entfernen. Java Basics - Anfänger-Themen 5
K Doppelte namen bei random Java Basics - Anfänger-Themen 3
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
M doppelte Einträge Emailempfänger... Java Basics - Anfänger-Themen 35
G txt-File als DB>doppelte Einträge verhindern/Suche/... Java Basics - Anfänger-Themen 10
DerGroßeNargus Doppelte Liste initialisieren Java Basics - Anfänger-Themen 2
H Datentypen Doppelte Verkette Liste - Verständnissproblem Java Basics - Anfänger-Themen 5
T Doppelte Liste Java Basics - Anfänger-Themen 8
R Schleife Doppelte Daten löschen Java Basics - Anfänger-Themen 3
V Doppelte Zahl suchen Java Basics - Anfänger-Themen 14
L Hilfe, doppelte Zufallszahlen Java Basics - Anfänger-Themen 13
G List suchen und doppelte rausfiltern Java Basics - Anfänger-Themen 3
T Doppelte Anführungszeichen ersetzen?? Java Basics - Anfänger-Themen 4
Luk10 Doppelte for-schleife Java Basics - Anfänger-Themen 7
P Doppelte Einträge in mehreren Textfiles finden und ausgeben Java Basics - Anfänger-Themen 8
T Array: Doppelte Charakteren löschen - Ein Lösungsversuch Java Basics - Anfänger-Themen 37
J doppelte Einträge in einem Array Java Basics - Anfänger-Themen 7
M Aufgabe: Array auf doppelte Zahl prüfen Java Basics - Anfänger-Themen 8
-horn- Doppelte Einträge entfernen, aus Array, List oder sonstwas Java Basics - Anfänger-Themen 9
G _NUR_ doppelte Einträge in einem Array behalten Java Basics - Anfänger-Themen 3
J Doppelte Integer aus einem Array entfernen - seltsames Prob. Java Basics - Anfänger-Themen 5
G doppelte Einträge im String Array löschen Java Basics - Anfänger-Themen 21
C Doppelte Punktnotation Java Basics - Anfänger-Themen 2
0 ArrayList - doppelte Einträge entfernen? Java Basics - Anfänger-Themen 9
S Methode, um doppelte Einträge in Array zu finden Java Basics - Anfänger-Themen 5
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
G Wie doppelte Einträge in ComboBox vermeiden ? Java Basics - Anfänger-Themen 9
M Doppelte Einträge in einer datei löschen(nach timestamp)! Java Basics - Anfänger-Themen 4
D Doppelte Einträge einer Liste löschen Java Basics - Anfänger-Themen 6
B 2 ELists vergleichen und doppelte Einträge löschen Java Basics - Anfänger-Themen 11
S "doppelte" if-Anweisung Java Basics - Anfänger-Themen 10
F Doppelte Datensätze zusammenziehen Java Basics - Anfänger-Themen 2
V Doppelte Zahlen bei Lotto verhindern Java Basics - Anfänger-Themen 11
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
F 2x 16bit Werte zu einem 32bit und dann splitten mit 0xb Java Basics - Anfänger-Themen 1
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum sind Werte in den Feldern ? Java Basics - Anfänger-Themen 2
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
docmas 2DArray Werte werden nur untereinander ausgegeben Java Basics - Anfänger-Themen 1
M Nur int-Werte erlauben Java Basics - Anfänger-Themen 11
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
Igig1 Wie lasse ich dir Werte in einem Array zusammenrücken? Java Basics - Anfänger-Themen 4
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
J Methoden Positive Werte zählen Java Basics - Anfänger-Themen 3
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
H OOP Werte mit Set verändern Java Basics - Anfänger-Themen 6
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
H Welche Werte bei Objekterzeugung eingeben? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben