Brauche Hilfe bei Java

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Servus,

wir müssen für die Uni in Eclipse programmieren, da ich keine Ahnung davon habe und es auch nur gezwungenermaßen machen muss brauch ich eure Hilfe.

Wäre echt mega, falls sich da jmd auskennt und mir helfen könnte wäre mega, da ich auf das bestehen des Kurses angewiesen bin.

Anbei die Aufgabenstellung und jetzt der Versuch: (der Daumen ist ("y"), ohne "

Java:
import java.util.Scanner;


public class Macao3 {

    public static void main(String[] args) {

        final int numberOfPlayers;

        int wurf;


        String y = "y";

        String eingabe;


//        int p = 0;

//        int l = 0;

//        int m = 0;


        Scanner sc = new Scanner(System.in);

        System.out.println("Bitte Spielerzahl eingeben");


        numberOfPlayers = sc.nextInt();


        for (int i = 1; i < numberOfPlayers + 1; i++) {

            int summe = 0;


            System.out.println("NEXT TURN:  Spieler: " + i);

            wurf = (int) (Math.random() * 6 + 1);

            System.out.print("Würfelwurf: " + wurf + " ");

            summe = summe + wurf;

            System.out.println("Summe: " + summe);

            System.out.println("Nochmal würfel?");

            eingabe = sc.next();


            while (eingabe.equals(y)) {

                System.out.println("NEXT TURN:  Spieler: " + i);

                wurf = (int) (Math.random() * 6 + 1);

                System.out.print("Würfelwurf: " + wurf + " ");

                summe = summe + wurf;

                System.out.println("Summe: " + summe);


                if (summe > 9) {

                    System.out.println("Verloren!");

                    break;

                }

                System.out.println("Nochmal würfel?");

                eingabe = sc.next();

                continue;

            }

            System.out.println("Finale Summe: " + summe);

        }

        sc.close();

    }


}
 

Anhänge

  • 04. Kontrollstrukturen.pdf
    64,7 KB · Aufrufe: 6
Zuletzt bearbeitet von einem Moderator:

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
hast du eine alternative lösung?

weil es geht alles soweit nur nicht punkt, das er am ende eben sagt welcher spieler gewonnen hat
 

Wandstraße

Stammgast I
Mai 12, 2019
242
147
Bis wann braucht du es denn? Ich weiß es jetzt aufs schnelle nicht. Aber ich würde mich halt Schritt für Schritt vorarbeiten, bis es nichtmehr geht und dann schauen, was daran falsch sein kann.
 

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Eig bis Freitag Nacht
Also des Problem ist, wo ich nichtmehr weiter ist ist, das ich die Summe jeden Spielers ja in eine variable speichern muss um sie am Ende wieder vergleichen zu können, welche nun größer ist bzw welche als erstes da war und ich muss ja für jeden Spieler eine eigene Variable anlegen aber da weiß ich nicht wie man des automatisieren kann, das es eben für beliebig viele Spieler funktioniert also z.b.

Spieler 1 hat als Endergebnis eine 9
Spieler 2 hat als Endergebnis eine 13
Spieler 3 hat als Endergebnis eine 9

Dann muss ich am Ende ja vergleichen wer die größte Zahl hat, die unter oder gleich 9 ist also Spieler 1 und 3 und dann noch Mal kucken wer die als erstes gewürfelt hat also Spieler 1 und des bekomm ich net hin
 

TheSupercomputer

Administrator
Mitarbeiter
Nov 3, 2018
12.591
10.258
Ein Grund wieso ich Java so hasse, es verleitet zu schrecklichen Code.
Aber das mal bei Seite.

Du dein Code ist leider nicht ganz so einfach zu lesen, wenn ich es jedoch richtig sehe weist du im letzten Teil nur einer deiner Variablen einen Wert zu.

Die Fragen die ich mir stelle, sind es immer drei Spieler oder verändert sich die Zahl?
Bei zweiterem, wieso wird dann nicht auf Arrays gesetzt, die die Aufgabe deutlich vereinfachen würden.
 
  • Gefällt mir!
Reactions: zmax1

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Ich kann es leider nicht wirklich, deswegen ist der Code wahrscheinlich so hässlich :D

Der letzte Teil mit den // ist ja raus kommentiert, das war einfach nur ein Versuch aber der funktioniert nicht wirklich, werde ihn Mal raus löschen

Ähm sind leider nicht immer 3 Spieler, so wie ich die Aufgabe versteh soll das theoretisch für eine beliebige Anzahl an Spielern funktionieren

Arrays sind ansich nicht verboten, allerdings habe davon nicht wirklich eine Ahnung, falls du Lust und Zeit hast kannst du aber Mal was schreiben und dann schau ich mir das Mal an
 

TheSupercomputer

Administrator
Mitarbeiter
Nov 3, 2018
12.591
10.258
Da ich meist mit C++ Programmiere kommt hier jetzt C++ typischer Code, dieser sollte jedoch auch in Java Problemlos funktionieren, abgesehen von den Kommentaren die hier entsprechend durch Funktionen ersetzt werden müssen und ggf. andere Array Initialisierung, die sich aber leicht ergooglen lassen sollte.


C++:
// Deine ganzen Imports

String eingabe = "";
unsigned int numberOfPlayers, wurf = 0;

// Hier eingabe der Spielerzahl
int points[numberOfPlayers];

for (int i = 0; i < numberOfPlayers; i++) // Spart wenn es ernst wird Rechenzeit und Speicherplatz, da Arrays bei 0 beginnen
{
    // Ausgabe und Wurf Spieler entsprechend immer +1 rechnen.
    points[i] += wurf;
   
    // Ausagbe der Summe über points[i]
    if(points[i] > 9)
        break;
    // Ausgabe und Abfrage ob erneut gefürfelt werden soll
}
bool winner[numberOfPlayers] = {true}; // hier muss ggf. nach der Javaspezifischen Lösung gesucht werden
// Nachfolgend eine zwar unschöne aber funktionierende Lösung alle Gewinner heraus zu finden
unsigned int maxPoints, maxPosition = 0;
for(int i = 0; i < numberOfPlayers; i++)
{
    if(points[i] > 9)
        winner[i] = false;
    else if(points[i] < maxPoints)
        winner[i] = false;
    else if(points[i] > maxPoints)
    {
        maxPoints = points[i];
        i = 0;
    }
}

for(int i = 0; i < numberOfPlayers; i++)
{
    if(winner[i])
    {
        // Ausgabe i+1 hat gewonnen.
    }
}

Der Code ist ohne Gewähr, da aus dem Kopf geschrieben und nicht getestet, sollte jedoch lauffähig sein und funktionieren.
Entsprechende Anpassungen die unternommen werden müssen sind in den Kommentaren erklärt, hoffe das dir dies weiterhelfen kann.
 

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Mega geil, danke schonmal werde es morgen ausprobieren und schauen wie ich es zum laufen bekomm aber erstmal fettes Dankeschön für eure Mühen
 
  • Gefällt mir!
Reactions: Wandstraße

TheSupercomputer

Administrator
Mitarbeiter
Nov 3, 2018
12.591
10.258
Da ist mir doch gerade noch ein Fehler aufgefallen, dass Array points muss natürlich auch mit 0 initialisiert werden.
 

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
oh man, das haut iwie hinten und vorne net hin in java

gibt es eine möglichkeit in java zeile für zeile starten zu lassen, wie in VBA mit F8?
 

TheSupercomputer

Administrator
Mitarbeiter
Nov 3, 2018
12.591
10.258
Eclipse habe ich hassen gelernt, daher kenne ich mich damit nicht aus, jedoch sollte es theoretisch eine solche Möglichkeit geben.
Stichwort Breakpoints
 
  • Gefällt mir!
Reactions: G4m3R_239

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Ich habs jetzt so, manchmal funktioniert es, manchmal nicht, habt ihr da eine idee?


Java:
public class Macao3 {

    public static void main(String[] args) {

        final int numberOfPlayers;

        int wurf;


        String y = "y";

        String eingabe;


        Scanner sc = new Scanner(System.in);

        System.out.println("Bitte Spielerzahl eingeben");


        numberOfPlayers = sc.nextInt();

        int[] points = new int[numberOfPlayers + 1];

        System.out.println("Pointslänge: " + points.length);


        for (int i = 1; i < numberOfPlayers + 1; i++) {

            int summe = 0;


            System.out.println("NEXT TURN:  Spieler: " + i);

            wurf = (int) (Math.random() * 6 + 1);

            System.out.print("Würfelwurf: " + wurf + " ");

            summe = summe + wurf;

            points = summe;

            System.out.println("Points" + i + ": " + points);


            System.out.println("Summe: " + summe);

            System.out.println("Nochmal würfel?");

            eingabe = sc.next();


            while (eingabe.equals(y)) {

                System.out.println("NEXT TURN:  Spieler: " + i);

                wurf = (int) (Math.random() * 6 + 1);

                System.out.print("Würfelwurf: " + wurf + " ");

                summe = summe + wurf;

                points = summe;

                System.out.println("Points" + i + ": " + points);

                System.out.println("Summe: " + summe);


                if (summe > 9) {

                    System.out.println("Verloren!");

                    break;

                }

                System.out.println("Nochmal würfel?");

                eingabe = sc.next();

                continue;

            }

            System.out.println("Finale Summe: " + summe);



        }

        int o = 1;

        int k = 2;

        while (o < numberOfPlayers && k < numberOfPlayers + 1) {

            if (points[o] < 9 && points[o] > points[k]) {

                k++;

                System.out.println("Spieler" + o + " hat gewonnen mit: " + points[o]);

                o++;

                break;

            }

            k++;

        }


        sc.close();

    }


}
 
Zuletzt bearbeitet von einem Moderator:

TheSupercomputer

Administrator
Mitarbeiter
Nov 3, 2018
12.591
10.258
Du bekommst warscheinlich einen "Segmentation Fault", oder?
Arrays fangen bei 0 an und haben daher bei Größe X ihr letztes Element bei X-1.
Wenn jedoch auf ein Element hinter X-1 zugegriffen wird, gibt es Fehler.
 

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
fehler gibt es nicht direkt, sondern er zeigt den falschen spieler an der gewonnen hat, da passt iwas mit der logik der schleife nicht ganz
 

2Fat2ChaseU

Stammgast II
Nov 3, 2018
287
172
Das lääst sich mit java schon machen, du hast es halt ein wenig umständlich gestaltet. Versuch mal die Strings ein wenig zusammenzufassen in ein Dev. Ich hatte sowas auch schon mal. Wieso gleichst du mit Summe kleiner neun ab? Die minimale Möglichkeit ist doch gar nicht neun? Warum erstellst du nicht einen casual couter für deine Schleife, um die durchläufe der Schleife weiter einzugrenzen und einzeln addressieren zu können? Wenn du möchtest schicke ich dir den fertigen Code, sobald ich zu Hause bin.
 

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Das lääst sich mit java schon machen, du hast es halt ein wenig umständlich gestaltet. Versuch mal die Strings ein wenig zusammenzufassen in ein Dev. Ich hatte sowas auch schon mal. Wieso gleichst du mit Summe kleiner neun ab? Die minimale Möglichkeit ist doch gar nicht neun? Warum erstellst du nicht einen casual couter für deine Schleife, um die durchläufe der Schleife weiter einzugrenzen und einzeln addressieren zu können? Wenn du möchtest schicke ich dir den fertigen Code, sobald ich zu Hause bin.
Ohja des wäre so mega, ich kenn mich null aus und hab iwas zusammen geschrieben mit meinem begrenzten wissen :D