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:
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...
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: