Elemente 2er int[] auf Gleichheit und Position überprüfen

AvAtA

Mitglied
Hi, ich habe folgendes Problem:

in einem int[4] stehen 4 zufällig generierte ziffern zwischen 1 und 5. Nachdem nun über die Tastatur 4 Ziffern eingegeben wurden, werden diese ebenfalls in ein int[4] gespeichert. Nun sollen die übereinstimmungen gezählt werden.
Direkter Treffer heißt dabei, die Ziffer kommt in beiden arrays an gleicher Stelle vor; indirekt heißt, die Ziffer kommt in beiden array an verschiedener Stelle vor.

Sobald aber eine Übereinstimmung gefunden wurde (egal ob direkt oder indirekt) soll die nächste Ziffer auf Übereinstimmung geprüft werden.

Ich habe versucht mit 2 for schleifen beide arrays zu durchlaufen und auf gleichheit zu überprüfen. tritt gleichheit auf bei gleichem index so wird der direktcounter um eins erhöht, sonst der indirekte:

Java:
public static String auswerten(int[]random, int[]eingabe) {
    int direkt=0;    // Zahl der direkten Treffer
    int indirekt=0;  // Zahl der indirekten Treffer
    for (int i = 0; i < 4; i++)
      for (int j = 0; j < 4; j++)
        if (random[i] == eingabe[j]) {
          if (i == j)
            direkt++;
          else
            indirekt++;
        }
    return "direkte Treffer: "+direkt+"\nindirekte Treffer: "+indirekt;
  }

Leider führt das nicht zu gewünschtem Ergebnis, da sobald Ziffern doppelt auftreten, diese mehrfach betrachtet werden. Am besten ich veranschauliche kurz an einem Beispiel was ich meine:

int[] random = {1, 2, 2, 3};
int[] eingabe = {2, 4, 5, 5};

rauskommen soll eigentlich, 1 indirekter Treffer (0 direkte).
obiger code führt aber zu 2 indirekten Treffern, da auch 2x eine übereinstimmung gefunden wird, nämlich für
random[1] = eingabe[0] und random[2] = eingabe[0].
wäre int[] random = {2, 2, 2, 3}; würde gar 1 direkter + 2 indirekte treffer ausgegeben.
gewollt ist aber, dass lediglich ein direkter treffer angezeigt wird.

Ich denke es wäre sinnvoller eingabe[0] auf übereinstimmung zu prüfen, und den index um eins zu erhöhen sobald eine gefunden oder wenn keine gefunden.

Ich habe es mit diversen for/while/if -schleifen probiert, aber nichts gescheites zustande bekommen. Ich hoffe ihr könnt mir weiterhelfen (evtl. durch geschicktes setzen von break/continue-anweisungen), denn ich weiß nicht mehr weiter...
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Mhmm, wenn du einen direkten oder indirekten Treffer gefunden hast, könntest du diese Indizes der beiden Arrays ja auf einen anderen(evtl. ungültigen wie z.B. 7 und 8) Wert setzen. (vllt vorher die Arrays kopieren, damit die "Originalen" unverändert bleiben. Glaube sogar du wirst nicht herum kommen, erst einmal alle direkten Treffer zu ermitteln ?!).
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ja, ich denke auch, dass man erstmal die direkten ermitteln muss - sonst würde bei sowas wie
Code:
random = { 1 2 2 3 }
input  = { 2 2 3 4 }
vermutlich ziemliches Chaos rauskommen. (Man könnte sagen: Jeder direkte Treffer is ja auch ein indirekter)

Vermutlich wird es damit sogar um einiges einfacher: Die direkten Treffer zu finden ist leicht, und die direkten zu finden nicht sooo schwer. Aber beides gleichzeitig wäre eben pfriemelig ;)
 

AvAtA

Mitglied
mir wurde an anderer stelle insofern weitergeholfen, als das folgender code die korrekte anzahl der direkten treffer ermittelt:

Java:
public static String auswerten(int[]random, int[]eingabe) {

int direkteTreffer = 0;
boolean[][] direct = new boolean[4][4];

	    for(int x = 0; x < 4; x++){
	        for(int y = 0; y < 4; y++){
	            if(random[x] == eingabe[x])
	                direct[x][y] = true;
	        }
	    }
	    
	    for(int x = 0; x < direct.length; x++)
	        if(direct[x][x])
	            direkteTreffer++;

return "direkte Treffer: " +direkteTreffer;
}

allerdings weiß ich nicht, ob mir das nun weiterhilft auch die indirekten Treffer zu ermitteln...
 

eRaaaa

Top Contributor
Puuhh..gute Frage :oops:..ich hatte mir irgendwie so etwas überlegt/gedacht:
Java:
    public static String auswerten(int[] random, int[] eingabe) {
	if (random.length != eingabe.length) {
	    throw new IllegalArgumentException(
		    "Die Arrays haben nicht die gleiche Länge!");
	}
	final int HITRANDOM = Integer.MAX_VALUE;
	final int HITINPUT = Integer.MIN_VALUE;
	int direkt = 0; // Zahl der direkten Treffer
	int indirekt = 0; // Zahl der indirekten Treffer
	int[] randomTmp = random.clone();
	int[] eingabeTmp = eingabe.clone();
	// Zuerst schauen ob es direkte Treffer gibt
	for (int i = 0; i < randomTmp.length; i++) {
	    if (randomTmp[i] == eingabeTmp[i]) {
		direkt++;
		randomTmp[i] = HITRANDOM;
		eingabeTmp[i] = HITINPUT;
	    }
	}
	// Indirekte Treffer noch übrig?
	for (int i = 0; i < randomTmp.length; i++) {
	    for (int j = 0; j < eingabeTmp.length; j++) {
		if (randomTmp[i] == eingabeTmp[j]) {
		    indirekt++;
		    randomTmp[i] = HITRANDOM;
		    eingabeTmp[j] = HITINPUT;
		}
	    }
	}
	return "direkte Treffer: " + direkt + "\nindirekte Treffer: "
		+ indirekt;
    }

An der ein oder anderen Stelle optimierungsbedürftig evtl., aber so in der Art ^^
 

AvAtA

Mitglied
erstmal vielen Dank.
eRaaaa's code tut genau das was er soll. allerdings würde ich nun noch gern verstehen: warum!

was genau bewirkt:

randomTmp = HITRANDOM;
eingabeTmp = HITINPUT;

und wieso ist das nötig? ich verstehe auch nicht ganz wie in folgendem teil:

Java:
// Indirekte Treffer noch übrig?
    for (int i = 0; i < randomTmp.length; i++) {
        for (int j = 0; j < eingabeTmp.length; j++) {
        if (randomTmp[i] == eingabeTmp[j]) {
            indirekt++;
            randomTmp[i] = HITRANDOM;
            eingabeTmp[j] = HITINPUT;
        }
        }
    }

gewährleistet ist, dass es tatsächlich indirekte treffer sind. meines erachtens könnte doch in der if-abfrage index i = index j sein, womit wir es wieder mit einem direkten treffer zu tun hätten (offensichtlich passiert das ja nicht, nur warum?)?!
 

eRaaaa

Top Contributor
Mhmm..nehmen wir Marco13`s Beispiel:
Code:
random = { 1 2 2 3 }
input  = { 2 2 3 4 }

Zuerst werden alle direkten Treffer auf >5(Random-Array: Integer.Max) und <1(Eingabe-Array:Integer.Min) gesetzt

direkt: 1 indirekt:0
Code:
random = { 1 [B]>5[/B] 2 3 }
input  = { 2 [B]<1[/B] 3 4 }

Anschließend wird jede random-Zahl nochmal mit jeder input-Zahl verglichen...der erste Treffer ist bei random=2, input=2 wo auch wieder auf die oben definierten Werte gesetzt wird:

direkt: 1 indirekt:1
Code:
random = {  1 >5 [B]>5[/B] 3 }
input  = { [B]<1[/B] <1  3 4 }

naja usw.:

direkt: 1 indirekt:2
Code:
random = {  1 >5 >5 [B]>5[/B] }
input  = { <1 <1 [B]<1[/B]  4 }
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Elemente von Feld und Liste auf Gleichheit überprüfen Java Basics - Anfänger-Themen 13
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
A Elemente in einem Array Java Basics - Anfänger-Themen 5
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
T SCC Elemente Java Basics - Anfänger-Themen 0
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
H Array Elemente Java Basics - Anfänger-Themen 17
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
GAZ String replace() Elemente tauschen Java Basics - Anfänger-Themen 13
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
V Array aus Klasse um vererbte Elemente erweitern Java Basics - Anfänger-Themen 3
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
A Array Elemente extrahieren ! Java Basics - Anfänger-Themen 4
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L String zerlegen & elemente hinzufügen Java Basics - Anfänger-Themen 5
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
S Elemente in Liste einfügen Java Basics - Anfänger-Themen 2
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
M Elemente in einer ArrayList einander zuordnen. Java Basics - Anfänger-Themen 18
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
arjoopy Kapselung Elemente aus Objekt-Array ausgeben Java Basics - Anfänger-Themen 8
U Input/Output Elemente eines Binären Suchbaums ausgeben Java Basics - Anfänger-Themen 10
M ComboBox bestimmte Elemente disablen/ausgrauen Java Basics - Anfänger-Themen 3
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
C Array Elemente Paarweise vertauschen Java Basics - Anfänger-Themen 2
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
W Elemente aus einer anderen GUI steuern! Java Basics - Anfänger-Themen 13
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
R Elemente eine Liste im Ring schliessen Java Basics - Anfänger-Themen 9
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
O Rekursiver Durchlauf verschachtelter Elemente Java Basics - Anfänger-Themen 1
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
1 Wie addiert man die Elemente einer Verketteten Liste? Java Basics - Anfänger-Themen 5
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
A Eindeutige Elemente aus Array extrahieren Java Basics - Anfänger-Themen 9
gamebreiti Gui menu ArrayList Elemente wiedererkennen Java Basics - Anfänger-Themen 3
C Matrixmultiplikation ohne einzelne Elemente aufzurufen Java Basics - Anfänger-Themen 2
V wie kann ich in zweidimensionaller Arraylist auf die einzelnen Elemente zugreifen ? Java Basics - Anfänger-Themen 7
W wie legt man die elemente der liste k Mal fest ? Java Basics - Anfänger-Themen 7
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
C ArrayList - überschreibt Elemente Java Basics - Anfänger-Themen 7
A Mehrere 100.000 Elemente verlgeichen Java Basics - Anfänger-Themen 8
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
L Rückwärtsausgabe der Array-Elemente Java Basics - Anfänger-Themen 5
1 Elemente von 2 Arrays vergleichen Java Basics - Anfänger-Themen 12
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
M aus x Elementen y Elemente auswählen Java Basics - Anfänger-Themen 6
J Eingabe Elemente Aktivieren Java Basics - Anfänger-Themen 2
R Best Practice Elemente aus ArrayList entfernen (performant) Java Basics - Anfänger-Themen 6
G String Elemente auf Zahlen Überprüfen Java Basics - Anfänger-Themen 21
T Elemente im Array umdrehen Java Basics - Anfänger-Themen 9
L Elemente zufällig in ein Array verteilen Java Basics - Anfänger-Themen 12
T Wieviel Array-Elemente Java Basics - Anfänger-Themen 19
M Elemente im DefaultListModel separat auslesen Java Basics - Anfänger-Themen 2
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
P BitSet- Objekt- Anzahl der Elemente bestimmen Java Basics - Anfänger-Themen 2
S JPA / Elemente einer Liste ansprechen Java Basics - Anfänger-Themen 5
B mit einem Iterrator elemente aus einer liste löschen Java Basics - Anfänger-Themen 3
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
M Vector überschreibt Elemente bei add()-Methode Java Basics - Anfänger-Themen 10
H Redundante Elemente aus ArrayList entfernen Java Basics - Anfänger-Themen 3
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
A Elemente aus Liste entfernen Java Basics - Anfänger-Themen 5
A Elemente in HashSet enthalten oder nicht Java Basics - Anfänger-Themen 6
C Elemente im StringBuffer ersetzen Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben