Kniffel: kleine Straße

TheRaffi

Neues Mitglied
[CODE lang="java" title="kleine Straße"]public static boolean checkSmallStreet(int diceList[]) {

ArrayList<Integer> unsortedDiceList = arrayToArrayList(diceList);

ArrayList<Integer> sortedDiceList = sortArrayList(unsortedDiceList);

System.out.println(sortedDiceList);

int countDoubleIndex = 0;
int countRow = 0;

for (int i = 0; i < sortedDiceList.size() - 1; i++) {

if(countRow == 4) {
break;
}

if (doubleIndex(i, sortedDiceList)) {
countDoubleIndex++;

if (countDoubleIndex == 2) {
return false;
}

if (i == 3) {

if (countRow == 3 && sortedDiceList.get(i) - sortedDiceList.get(i - 1) == 1) {
return true;
} else {
return false;
}

} else {
i++;
}
}

if (sortedDiceList.get(i + 1) - sortedDiceList.get(i) != 1) {
return false;
} else {
countRow++;
}

}

return true;
}

private static boolean doubleIndex(int indexArray, ArrayList<Integer> list) {

if (list.get(indexArray) == list.get(indexArray + 1)) {

return true;

} else {

return false;

}
}[/CODE]

Hallo, ich programmiere gerade ein Kniffel-Spiel und habe nach langem Versuchen nun eine Lösung gefunden, um zu checken, ob die Würfelfolge bei einer Anzahl von fünf Würfeln einer kleinen Straße entspricht. Jetzt frage ich mich, ob jemand vielleicht eine einfachere Lösung hat oder ob man mein Code noch verbessern kann. Das schwierige für mich war die ArrayList so zu überprüfen, sodass bei der bereits sortierten ArrayList ein doppelter Index, z.B. [2, 3, 4, 4, 5] beachtet wird.

Die Methode, um eine große Straße zu checken habe ich schon programmiert und die oben stehende Methode "checkSmallStreet" wird erst aufgerufen, sobald die die Methode für die große Straße false zurück gibt bzw. für die anderen Optionen wie Kniffel und Full House.

Vielen Dank schonmal im Vorraus :D
 

httpdigest

Top Contributor
Java:
private static boolean checkContiguous(int[] nums, int minLen) {
  return java.util.Arrays.stream(nums).sorted().collect(() -> new Object() {
    int last, len;
    void collect(int i) {
      len = i == last ? len : i == last + 1 ? len + 1 : 1;
      last = i;
    }
  }, (t, i) -> t.collect(i), (t1, t2) -> {}).len >= minLen;
}
public static boolean checkSmallStreet(int[] dice) {
  return checkContiguous(dice, 4);
}
 

httpdigest

Top Contributor
Ja, das war absichtlich eine Antwort auf die gestellte Frage/Aussage: "Jetzt frage ich mich, ob jemand vielleicht eine einfachere Lösung hat".
 

httpdigest

Top Contributor
Letztlich ist der Typ "Frage stellen" dieses Threads hier aber auch einfach falsch hier, weil keine konkrete Frage mit einer definitiven Antwort gestellt wurde. Es wurde ja nur gesagt: "ich habe hier mal was gebaut und möchte diskutieren, was eine (aus meiner oder eurer Sicht) einfachere Lösung wäre, bzw. wie ihr meine Lösung (aus eurer Sicht) vereinfachen/verbessern würdet".
Hier gibt es einfach keine auf reinen Fakten basierende und verifizierbar richtige oder falsche Lösung/Antwort.
Oder mit anderen Worten: Auf Stackoverflow wäre das eine "off-topic" Frage, weil sie Antworten nach Meinungen provoziert und nicht nach Fakten.
Somit wird sehr wahrscheinlich auch keine Antwort vom TE als "richtig" geflagged werden oder irgendeine sonstige Antwort upgevotet werden. Nur leider kann man eben Fragen nicht downvoten.
 

TheRaffi

Neues Mitglied
Letztlich ist der Typ "Frage stellen" dieses Threads hier aber auch einfach falsch hier, weil keine konkrete Frage mit einer definitiven Antwort gestellt wurde. Es wurde ja nur gesagt: "ich habe hier mal was gebaut und möchte diskutieren, was eine (aus meiner oder eurer Sicht) einfachere Lösung wäre, bzw. wie ihr meine Lösung (aus eurer Sicht) vereinfachen/verbessern würdet".
Hier gibt es einfach keine auf reinen Fakten basierende und verifizierbar richtige oder falsche Lösung/Antwort.
Oder mit anderen Worten: Auf Stackoverflow wäre das eine "off-topic" Frage, weil sie Antworten nach Meinungen provoziert und nicht nach Fakten.
Somit wird sehr wahrscheinlich auch keine Antwort vom TE als "richtig" geflagged werden oder irgendeine sonstige Antwort upgevotet werden. Nur leider kann man eben Fragen nicht downvoten.
Stimmt, ich hätte diesen Thread als "Diskussion" hier reinstellen sollen, da es, wie du bereits gesagt hast, keine konkrete, richtige Antwort gibt.
 

Wurstkopp

Bekanntes Mitglied
Hier als Anregung noch eine einfache Old-School Variante bisher ohne NULL oder Empty Checks:

EDIT: Kleine Schönheitsanpassungen.

Java:
import java.util.Arrays;

public class Kniffel {
    public static void main(String[] args) {
        int[] dices = { 5, 1, 4, 3, 6 };
        System.out.println(checkStreet(dices, 4));
    }

    public static boolean checkStreet(int[] dice, int checkLen) {
        Arrays.sort(dice);

        int streak = 1;
        int lastNum = dice[0];
        for (int i = 1; i < dice.length; i++) {
            int currentNum = dice[i];
            if (currentNum == lastNum + 1) {
                if (++streak >= checkLen) {
                    return true;                 
                }
            } else if (currentNum != lastNum) {
                streak = 1;
            }

            lastNum = currentNum;
        }
     
        return false;
    }
}

EDIT: Zu beachten wäre hier, dass ohne ArrayCopy hier das original Array sortiert wird. Müsste man halt kopieren, wenn das ein Problem ist.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N kleine Kommazahlen erscheinen plötzlich Allgemeine Java-Themen 19
I GUI für kleine Pop-Ups unter Windows Allgemeine Java-Themen 1
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
Soloeco Kleine Optimierungsfrage Allgemeine Java-Themen 6
RalleYTN Classpath Nur ne kleine Frage zur MANIFEST.MF Allgemeine Java-Themen 4
vandread Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint? Allgemeine Java-Themen 6
Y Kleine Frage zu String.split Allgemeine Java-Themen 3
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
D Kleine Frage zum öffnen eines Fensters Allgemeine Java-Themen 10
A Drucken auf kleine Formate Allgemeine Java-Themen 2
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
musiKk Best Practice für kleine Variationen in gegebenen Modellklassen Allgemeine Java-Themen 11
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
L Kleine Rekursion Allgemeine Java-Themen 12
B Kleine Frage zu Modellierung (Videothek) Allgemeine Java-Themen 2
J Eine kleine Aufnahme mit Java Allgemeine Java-Themen 3
J Kleine Hilfe zum Framework Click Allgemeine Java-Themen 2
Lulumann6 kleine frage zu KeyEvents Allgemeine Java-Themen 10
G Kleine Frage zu Vectoren Allgemeine Java-Themen 2
D kleine SQL-Hilfe benötigt: not a single-group group function Allgemeine Java-Themen 4
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
M Schnell kleine Hilfe gesucht! Allgemeine Java-Themen 3
T kleine mp3 Lib Allgemeine Java-Themen 17
K Mit Java kleine Freeware Programme erstellen. Geht das? Allgemeine Java-Themen 16
L kleine frage zum rechner Allgemeine Java-Themen 7
V kleine Threadfrage Allgemeine Java-Themen 10
T Kleine Verständnisfrage zu Stringbuffer Allgemeine Java-Themen 2
K Kleine Exception Frage ! Allgemeine Java-Themen 3
B Wie heißt dieser kleine Typ links oben? Also dieses JavaVieh Allgemeine Java-Themen 5
J Java Straße und Hausnummer Allgemeine Java-Themen 11
T Datenstruktur für Straße ! Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben