Kleine Straße bei Kniffel erstellen, wie?
Hallo,
ich habe folgende Argumente:
1 1 1 2 3
2 3 4 5 6
Nun muss ich die kleine Straße bei Kniffel mit Java Programmieren. Bei den ersten Argumenten soll eine 0 entstehen und bei den zweiten Argumenten eine 30. Ich habe folgendes:
private static int smallStraight(int [] dice) {
for(int i = 0; i < dice.length +1; i++) {
for(int j = 1; j < dice.length + 1; j++) {
for (int k = 2; k < dice.length + 1 ; k++) {
for( int l = 3; l < dice.length + 1; l++) {
if (street(4) == true) {
return 30;
}
else {
return 0;
}
}
}
}
}
}
Aber es kommt immer ein Error. Kann mir jemand helfen?
1 Antwort
Bei den ersten Argumenten soll eine 0 entstehen und bei den zweiten Argumenten eine 30.
Das ist falsch. "2 3 4 5 6" ist eine große Straße und bringt 40 Punkte. Hier sollte also keine 30 entstehen. Sondern lieber eine 0, da es sich bei einer großen Straße ja nicht um eine kleine Straße handelt, oder 40, falls der Algorithmus gleich beide Straßen-Typen erkennen soll.
Kleine Straße heißt, dass vier aufeinanderfolgende Zahlen vorkommen müssen. Also entweder 1,2,3,4 oder 2,3,4,5 oder 3,4,5,6. Nicht mehr, nicht weniger.
Man zählt also nun einfach, wieviele aufeinanderfolgende Zahlen es gibt, und wenn das 4 sind, dann hat man eine kleine Straße. Das geht wie folgt, wenn die Zahlen bereits sortiert sind:
public static int straights(int[] dice) {
int consecutiveNumbers = 1;
int last = dice[0];
for(int i = 1; i < 5; i++) {
if (dice[i] == last+1) consecutiveNumbers++;
else if (dice[i] != last) consecutiveNumbers = 1;
last = dice[i];
}
if (consecutiveNumbers == 4) return 30;
else if (consecutiveNumbers == 5) return 40;
else return 0;
}