Würfelanalyse

manuel_scl

Neues Mitglied
Hallo, also ich soll für eine freiwillige Informatikhaus die 10 gewürfelten Zahlen analysieren und jetzt weiß ich nicht wie ich die zahlen aus der Liste mithilfe einer If-else Anweisung überprüfen lassen kann. Mein Problem ist also quasi dass ich nicht weiß wie es formulieren muss, dass z.B. die erste Zahl überprüft wird.
1648667997873.png
 

KonradN

Super-Moderator
Mitarbeiter
Dann erzähl einfach, was Du mit Stift und Papier machen würdest um die Zahlen, die in einem Array sind, zu analysieren.

Das ist immer der gleiche Weg:
1. Beschreibe in Worten, was Du genau wie machst
2. Übersetze das in Code

Und das kannst Du dann auch immer wiederholen. Du kannst also in einer ersten Beschreibung haben:

- mache was komplexes

und dieses "mache was komplexes" beschreibst Du dann erneut. Das wird dann einfach eine weitere Methode.
 

Jw456

Top Contributor
Vielleicht auch mit einer Schleif durch alle Zahlen durchgehen.
Mit einem switch case könnte man die Zahlen Variablen erhöhen.

Das könnte eine Variante in etwas sein.

Zeige doch villeicht das was dir Konrad empfohlen hat und was du bis jetzt davon hast.
 

Jw456

Top Contributor
Eine andere Möglichkeit wäre nicht einzelne Varaiaben zubenutzen. Sondern ein int Array. Da könnte der Index vom Array gleich der Wertigkeit der gewürfelten zahlen sein.
Also ist die Zahl zb 3 wird der Index 3 vom Array um eins erhöht beim durchgehen der gewürfelten Zahlen.

So jetzt hast du zwei Varianten die du selber ausarbeiten kannst.
 

Staarfightaar

Bekanntes Mitglied
Hallo manuel, das was du höchstwahrscheinlich suchst wird auch countingSort genannt...

Mal ein Beispiel:

Java:
    public static IntStream countingSort(int[] zufallszahlen) {
        return IntStream.rangeClosed(1, 6).map(zahl -> (int) Arrays.stream(zufallszahlen).filter(z -> z == zahl).count());
    }

    public static void main(String[] args) {
        int[] zufallszahlen = {3, 3, 3, 4, 1, 1, 2, 2, 2, 2, 6};
        System.out.println(countingSort(zufallszahlen).boxed().collect(Collectors.toList()));

hth :)

Edit: Ich lasse mich aber gerne überraschen wie man es mit Streams besser schreiben könnte ...
zb ohne streams wäre es besser

außerdem
int[] zufallszahlen = {3, 3, 3, 4, 1, 1, 2, 2, 2, 2, 6};
what in da fruit?

EDIT:
das "zufallszahlen array" erinnert mich an das meme
 
Zuletzt bearbeitet:

Staarfightaar

Bekanntes Mitglied
da du würfel brauchst würde ich erstmal mit würfel anfangen... und ein würfel kann würfeln alsoooooo

Java:
public class Wuerfel{
    int size;
    public Wuerfel(int size){
        this.size = size;
    }
    public int wuerfle(){
        return // zufallszahl hier erzeugen;
    }
}
 

mihe7

Top Contributor
Edit: Ich lasse mich aber gerne überraschen wie man es mit Streams besser schreiben könnte ...
Wie #7, nur dass man statt der Schleife einen Stream verwendet:
Java:
int[] numbers = {3, 3, 3, 4, 1, 1, 2, 2, 2, 2, 6};
int[] frequencies = new int[6];
Arrays.stream(numbers).forEach(nr -> frequencies[nr-1]++);
System.out.println(Arrays.toString(frequencies));
Für so etwas würde ich aber keinen Stream bemühen. Bei komplexen Objekten sieht das anders aus, da kann man mit groupingBy arbeiten:
Java:
record Person(String firstName, String lastName) {}
Person[] personen = { new Person("Hans", "Wurst"), new Person("Anna", "Bolika"), new Person("Hans", "Dampf") };
System.out.println(Arrays.stream(personen)
        .map(Person::firstName)
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())));
 

KonradN

Super-Moderator
Mitarbeiter
Im Screenshot sieht man bereits den Code, der das Array mit Zufallszahlen füllt. Daher ist der Part nicht mehr notwendig.

Und auch das CountingSort ist nicht notwendig, denn das enthält ja auch den Part, der das Array wieder aufbaut - liefert also als Ergebnis nicht das, was man will.

Aber unabhängig von der Bewertung der Lösung: dieses Hinklatschen einer Lösung hilft dem TE nicht, sowas in Zukunft selbst zu lösen. Ebenso eine Diskussion um eine Stream Lösung....

Das ihr es könnt ist doch klar.
Selbst das bezweifle ich etwas denn das scheint mehr ein "Ich will komplizierten Code erzeugen, damit ich wie ein Profi wirke" zu sein. In einem Stream wird ein zweiter Stream benutzt - und nun wird im Anschluss noch bestimmt behauptet, dass diese Lösung lesbar wäre.
 

temi

Top Contributor
@manuel_scl du solltest am besten mal das machen, was @KonradN in Beitrag #4 vorschlägt.

Stell dir vor du hast die 10 gewürfelten Zahlen auf einem Zettel vor dir. Was machst du, um das Vorkommen der einzelnen Würfe zu zählen?

In der Art: Ich nehme die erste Zahl, wenn es eine Eins ist dann...

Und noch der obligatorische Hinweis: Bitte Code nicht als Screenshot, sondern innerhalb von Codetags (das Symbol </> ganz links im Editor) direkt im Beitrag posten.
 

Jw456

Top Contributor
Noch einen Tipp zu deinen Zähl Variablen die du zuerst in der Methode erstellst. Die sollten beim Start null sein.

Du willst ja das Array mit den Würfelaugen durchgehen und dann wenn es zb eine 6 ist die Variable „zahl6“ um 1 erhöhen. Eins dazuzählen. Wenn dann schon eine 6 in der Variablen ist wirst du ein falsches Ergebnis haben.

Wenn du das im Kopf machst ist dein "Merker im Kopf"doch auch am Anfang null.

Java:
 public void analysiereZahlen() {
        int zahl1 = 0;
        int zahl2 = 0;
        ...


    }
 

Staarfightaar

Bekanntes Mitglied
Dann musst du vielleicht mal Hinweise liefern, die zweckdienlich und zielführend sind. Einfach nur viele Wörter aneinanderreihen, kann jeder.

Der TE sucht hier nach dem ersten Teil von Countingsort.
Jein

es gibt 2 möglichkeiten
1. er sucht nach counting sort und streams usw
2. er ist erst beim anfang des lernens ( würfel klasse ist ein klassiker für anfänger )

wenn ma so auf die "code qualität" schaut ist es ersichtlich ( zumindest meiner meinung nach ) dass es eher auf punkt 2. zutrifft

es zweifelt ja keiner an dass deine streams falsch sind oder nicht die lösung sind, es geht darum dass man dem TE nicht was an den kopf werfen kann was er schlicht weg noch nicht kann

erstmal muss man eine basis aufbauen, ich hab konrad auch shcon oft an den kopf geworfen dass er sachen raus ballert die "ungeeignet" sind für anfänger


die problem stellung ist ja ansich witzlos das meine ich im sinne von hier punkt 2
1. jemand hat ein annotations problem in einem projekt mit 1000 klassen und 5 servern => da ist das fachliche gedankliche das problem
2. jemand soll mal nen würfel bauen => da ist das prolbem dass man einfach mal mini probleme lösen sollte um coden zu lernen

wenn man jetzt den fertigen code hinballert... gut ok er hat die aufgabe, aber er kann dann ja wieder nicht coden beim nächsten mini problem , code "hinballern" ist eher für die problemstellung 1 geeignet
 

KonradN

Super-Moderator
Mitarbeiter
Dann musst du vielleicht mal Hinweise liefern, die zweckdienlich und zielführend sind. Einfach nur viele Wörter aneinanderreihen, kann jeder.
Tobias (Ich nehme an, dass es wieder ein neuer Account von Dir ist), wenn Du den Thread aufmerksam gelesen hättest, dann hättest Du gesehen, dass ich sehr wohl etwas zweckdienliches und zielführendes beigetragen habe.

Ja, vermutlich in Deinen Augen nicht zielführend, denn Du hast ja auch nach vielen Jahren nicht begriffen, was das eigentliche Ziel hier im Forum ist: Leuten dabei zu helfen, Aufgaben selbst lösen zu können.
Der TE sucht hier nach dem ersten Teil von Countingsort.

Der erste Teil von Countingsort zählt die Anzahl der Elemente. Aber dennoch sucht der TE nicht nach Countingsort, denn es geht dem TE nicht um ein sortieren. Nur weil man für ein Ziel Z auch A erledigen muss, interessiert sich jemand nicht für Z nur weil er sich für A interessiert. Das setzt aber jetzt wieder voraus, dass Du diese aneinander gereihten Wörter und zugleich noch diese einfache Logik verstehst ...

Aber die Diskussion bringt wohl nicht - ein einfaches Report mit "Der kleine Tobias will aus dem Bällespiele-Paradies abgeholt werden!" ist vermutlich am einfachsten.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben