Java Arrays richtig vergleichen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du machst ein paar Dinge unnötig kompliziert.

  1. die ganzen "Integer.toString()"-Aufrufe kannst du auch einfach durch den jeweiligen String ersetzen. (Also statt Integer.toString(12) kannst du einfach "12" schreiben)
  2. Es macht keinen Sinn, die Zahlen als Strings zu speichern. Du kannst sie auch einfach gleich als int speichern.
  3. Anstatt jeweils 6 Zeilen zu schreiben, in denen du je eine Zahl in das jeweilige Array setzt, kannst du die Zahlen auch einfach auflisten. (z.B. int[] lottoZahlen = {12,14,7,18,5,49};)
  4. Wenn du Listen statt Arrays benutzt, kannst du mit der retainAll-Methode einfach prüfen, welche Zahlen in beiden Listen vorkommen und musst keine (wie in deinem Fall) fehleranfälligen Schleifen benutzen.
  5. Statt dem switch würde ich einfach ein String-Array benutzen, wo je nach Anzahl der übereinstimmenden Zahlen ein Element ausgegeben wird.
public static void main(String[] args) {
	List<Integer> lottoZahlen = new LinkedList<>(Arrays.asList(12,14,7,18,5,49));
	List<Integer> spielerZahlen = new LinkedList<>(Arrays.asList(12,7,5,18,13,49));
	
	spielerZahlen.retainAll(lottoZahlen);	// In spielerZahlen nur die Zahlen lassen, 
						// die auch in lottoZahlen enthalten sind
	
	String[] ergebnis = {
			"Leider Niete... Es wurde keine richtige Zahl getippt",
			"1er:   Es wurde eine richtige Zahl getippt. Leider kein Gewinn.",
			"2er:   Es wurden zwei richtige Zahlen getippt. Leider kein Gewinn.",
			"$$$    Glückwunsch, drei Richtige (Gewinnklasse 8), etwa 10€",
			"$$$$   Glückwunsch, vier Richtige (Gewinnklasse 6), etwa 40€",
			"$$$$$  Glückwunsch, fünf Richtige (Gewinnklasse 4), etwa 3000€",
			"$$$$$$ Glückwunsch, sechs Richtige (Gewinnklasse 2), etwa 500.000€"
	};
	
	System.out.println("Übereinstimmende Zahlen: " + spielerZahlen);
	System.out.println(ergebnis[spielerZahlen.size()]);
}

Außerdem musst du bedenken, dass die Lottozahlen in der Regel sortiert angegeben werden (beim Lottoschein kann man auch gar keine Reihenfolge für seine Zahlen angeben) und dass es noch eine Superzahl gibt. Du hast also die Hälfte der Gewinnklassen außen vor gelassen.

  1. du inkrementierst in beiden i am Ende des Durchlaufs
  2. wir sind in Java, nicht bei c. Du darfst Variablen direkt Werten zuweisen. z.B. dein "int gewinn; gewinn = 0;" solltest du als "int gewinn = 0;" schreiben
  3. warum deklarierst du die Arrays als String-Arrays und nicht für Integer?
  4. du kannst die ganze Array-Erstellung auch jeweils als Einzeiler schreiben und die Werte direkt zuweisen:
int[] array = {5, 2, 6, 3, 1, 4};
for (int i : array) {
  System.out.print(i);
}
// Ausgabe ist 526314
Woher ich das weiß:Hobby – Leidenschaftlicher Gamer. Steam-Nutzer seit 2011.
RakonDark  03.09.2020, 20:11

deine antwort in punkt 2 ist falsch

4. Deklaration von Variablen

Man darf Variablen gleichen Typs in einer Zeile deklarieren; die Leerzeichen sind nur zur besseren Lesbarkeit eingefügt, sie dürfen da stehen, müssen aber nicht:

int x, y, z;  // Deklaration von 3 Variablen des Typs int

Man kann Variablen während der Deklaration gleich einen Wert zuweisen:

int x = 0, y, z = 123;  // Deklaration von 3 Variablen des Typs int; x und z wurde gleich ein Wert zugewiesen

https://www.peacesoftware.de/ckurs3.html

0
xxxcyberxxx  03.09.2020, 20:14
@RakonDark

Mh, kann mich daran erinnern, dass es bei den früheren C-Standards (die Sprache hat sich natürlich auch entwickelt) zwingend getrennt sein musste.

Wenn ich mich recht erinnere, kam die Möglichkeit zur gleichzeitigen Deklaration und Initialisierung mit C99.

Dennoch ist die Antwort deshalb nicht Falsch und er darf und sollte es durchaus gleichzeitig machen. Aus den Oracle Java Code Conventions:

"Try to initialize local variables where they’re declared. The only reason not to initialize avariable where it’s declared is if the initial value depends on some computation occurring first."

0

In deiner inneren for-Schleife inkrementierst du wieder i, statt ao

(und benutzt i zum Vergleich)

for (int ao = 0; ao < 6; ao++)

sollte es sein. und dann schaust nochmal, wie es dann aussieht

Woher ich das weiß:Studium / Ausbildung
GurkenCombo 
Fragesteller
 03.09.2020, 20:04

Jop. Hat geklappt. Danke dir! Bin grad bssl unkonzentriert.

0