Brauche Hilfe bei Java

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Ne nicht wirklich leider

Werd bald wieder auf euch zukommen, da tauchen bestimmt bald wieder Probleme auf :D
 

TheSupercomputer

Administrator
Mitarbeiter
Nov 3, 2018
12.644
10.281
Ich habe deinen Code jetzt mal in den vorherigen Beiträgen in einen CODE Block gepackt, beim nächsten mal bitte entsprechenden Quelltext in einen Code block schreiben, hierzu einfach auf die drei Punkte neben dem Smiley klicken und dann "</> Code" auswählen.

Deinen Code habe ich nun als Basis genommen und meinen Algorithmus mit integriert, an sich müsste es so jetzt ohne weiteres laufen.
Eine Garantie kann ich nicht geben, da ich nicht weiß ob die Arrays so richtig angelegt wurden.
Die meisten Anpassungen sind entsprechend kommentiert.

An sich sollte diese Aufgabe aber zu erledigen sein, wenn man die entsprechenden Veranstaltungen an der Uni aufmerksam verfolgt hat.

Java:
public class Macao3 {
    public static void main(String[] args)
    {
        final int numberOfPlayers;
        int wurf;
        // String y = "y"; sollte nicht notwenig sein, siehe Anpassung Zeile 36
        String eingabe;

        Scanner sc = new Scanner(System.in);
        System.out.println("Bitte Spielerzahl eingeben");

        numberOfPlayers = sc.nextInt();

        //int[] points = new int[numberOfPlayers + 1];
        int[] points = new int[numberOfPlayers]; // Spart uns ein Element und damit Speicher
        
        System.out.println("Pointslänge: " + points.length);
        //for (int i = 1; i < numberOfPlayers + 1; i++)
        for(int i = 0; i < numberOfPlayers; i++) // Wir beginnen beim ersten Element, welches auf Position 0 ist
        {
            points[i] = 0; // Wir initialsieren die Punkte des aktuellen Spielers mit 0, denn er hat ja noch keine
            System.out.println("NEXT TURN:  Spieler: " + (i+1); // Der richtige Spielername ist immer i+1
            wurf = (int) (Math.random() * 6 + 1);
            
            System.out.print("Würfelwurf: " + wurf + " ");
            
            points[i] += wurf;

            System.out.println("Points" + (i+1) + ": " + points); // Ich vermute mal hier soll die Spielernummer hin

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

            eingabe = sc.next();


            // while (eingabe.equals(y))
            while (eingabe.equals("y")) // Sollte auch Funktionieren.
            {

                System.out.println("NEXT TURN:  Spieler: " + (i+1); // Spielernummer ist i+1

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

                System.out.print("Würfelwurf: " + wurf + " ");
                points[i] += wurf;

                System.out.println("Summe: " + points[i]);

                if (points[i] > 9)
                {
                    System.out.println("Verloren!");
                    break;
                }

                System.out.println("Nochmal würfel?");
                eingabe = sc.next();
                continue;
            }

            System.out.println("Finale Summe: " + points[i]);
        }

        //int o = 1;
        //int k = 2;
        
        // Anpassung des C++ Codes von mir, Arryinitialisierung wurde von oben übernommen und nicht geprüft
        int maxPoints = 0;
        int maxPosition = 0;
        
        bool[] winner = new bool[numberOfPlayers];
        for(int i = 0; i < numberOfPlayers; i++)
        {
            winner[i] = true;
        }
        
        // Zu erst ist jeder ein Potenzieller gewinner, jeder der nicht gewonnen hat ist nach der Schleife auf "false" gesetzt.
        for(int i = 0; i < numberOfPlayers; i++)
        {
            if(points[i] > 9)
            {
                winner[i] = false;
            }
            else if(ponits[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]) // Wenn False passiert nichts, wenn true wird in die If Anweisung herein gegangen
            {
                System.out.println("Spieler" + (i+1) + " hat gewonnen mit: " + points[i]); // Spielernummer i+1 aber die dazu gehöriigen Punkte sind i
            }   
        sc.close();
    }
}

Sollte es noch Probleme geben, melde dich einfach noch mal, es kann sein, dass irgendwo ein Tippfehler drin ist, der sollte aber mit der Compilerausgabe schnell zu finden und zu beheben sein.
 
  • Gefällt mir!
Reactions: TheHardwareFreak

DerDosenöffner

Stammgast III
Feb 23, 2019
822
750
Gute Programmierer sind gut in Informationsbeschaffung und faul. Was sagt dir das über dich und deinen Dozenten?
Lass mich dir zum Einstieg helfen. Das ist eine beliebte Standardaufgabe, die schon zig mal gelöst wurde. Du müsstest die Lösung nur finden aber wie nur?
 

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Die Sache ist die, wir haben Arrays noch garnicht gemacht
 

TheSupercomputer

Administrator
Mitarbeiter
Nov 3, 2018
12.644
10.281
Ohne Arrays lässt sich diese Aufgabe nicht lösen, zumindest kenne ich keinen Weg wie es sonnst für eine beliebige Spielerzahl umzusetzen sein soll.
Es geht dann höchstens über verschachtelte Rekursionen, doch da hört der Spaß völlig auf.
 

DerDosenöffner

Stammgast III
Feb 23, 2019
822
750
Warum sollte es nicht ohne Arrays gehen?
Doppelpost zusammengeführt:

Ich habe mir gerade mal die Aufgabenstellung durchgelesen und ohne Arrays ist es nicht nur möglich sondern sogar einfacher.
Doppelpost zusammengeführt:

Die Sache ist die, wir haben Arrays noch garnicht gemacht
Tickt die Uhr noch oder hast du bereits eine Lösung hochgeladen?
 
Zuletzt bearbeitet:

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Hab leider schon was hoch geladen

Aber wirklich tausend dank, habt mir tatsächlich geholfen
 

DerDosenöffner

Stammgast III
Feb 23, 2019
822
750
Na dann ist es ja gut. Nur noch mal der Vollständigkeit halber, da lag dein fehler:
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
Du brauchst nicht für jeden Spieler eine eigene Variable. Die Regeln besagen nicht umsonst dass jeder nur einmal zum Zug kommt. So brauchst du nur 2 Variablen, nämlich den derzeit besten Spieler und den dazugehörigen Punktestand. Den Vergleich machst du dann direkt in der Schleife, sobald ein Spieler fertig mit würfeln ist und überschreibst von dort gegebenenfalls die Variablen. So steht zum Schluss ganz von selbst der beste Spieler in den Variablen, die du dann nur noch ausgibst.
 

G4m3R_239

Moderator
Themen-Ersteller
Mitarbeiter
Dez 14, 2018
3.393
2.736
Es ist mal wieder so weit :D

bevor es los geht aber nochmal ausdrücklich, so leid es mir tut ich will des programmieren eig garnet wirklich können, ich studier Wirtschaftsingenieurwesen und da muss man zum glück nie etwas programmieren, ich frag mich auch wozu ich es als pflichtfach dann lernen muss aber gut hilft nix, ich muss es machen

Code:
import java.io.File;
//import gdi.ct.CtImage.*;
import java.util.Scanner;

public class CtViewer {
    public static void main(String[] args) throws java.io.FileNotFoundException {  
       
        int [][][] scan = new int [203][203][138];
            for (int x = 0 ; x < 203 ; x++) {          
                for (int y = 0 ; y < 203 ; y++) {              
                    for (int z = 0 ; z < 138 ; z++) {                  
                        scan [x][y][z] = -1000;  
                                                    }      
                                                }
                                            }
        File CT_Chest = new File ("C:\\GDI\\Hausaufgabe_05\\Homework_5");
        Scanner sc = new Scanner (CT_Chest);  
        String eingabe;
        eingabe = sc.nextLine();
        System.out.println(eingabe);
        sc.close();                          
        }
       
    }

Die sache ist, wir sollen dort ein textdokument einem scanner zuweisen, und dann die sachen in einem aary speicher, das speichern, wird wahrscheinlich wieder mit einer oder mehreren for schleifen gehen allerdings wissen wir nicht wie man dem scanner sagen soll, bitte nimm dieses dokument und lies dort zeile für zeile ein

wenn wir es so starten, sagt er das die quelle den zugriff verweigert

ich danke abermals
 

Anhänge

  • 05. Arrays.pdf
    188,5 KB · Aufrufe: 2
Zuletzt bearbeitet: