Array-Problem/Zufallszahlen

Leon_2001

Aktives Mitglied
Hallo zusammen,

ich versuche mich gerade an einem Galgenmännchen Spiel. Erstelle das ganze mit BlueJ, daher Methoden lassen sich durch Mausklicks aufrufen und Rückgabewerte (von den Methoden, die man als User aufruft, werden ausgegeben)...
Leider habe ich da ein Problem vermutlich mit den Arrays, genau kann ich es aber nicht sagen, vermutlich hackt es an mehreren Ecken. Wäre sehr freundlich, wenn jemand über den Code mal drüber schauen kann und mir Ratschläge geben kann :)

Java:
import java.util.ArrayList;
public class Galgenmännchen
{
    public String wörterListe[] ={"Tisch" , "Stuehle" , "Schreibtisch" };
    public String gesuchtesWort[];
    public String verschlüsseltesWort;
    public String ergebnis = "";
    ArrayList<String> benutzteBustaben = new ArrayList<String>();

    public String neuesSpiel() {
        gesuchtesWort = wörterListe[(int)(Math.random()*3)].split("");
        verschlüsseltesWort = "";
        ArrayList<String> benutzteBustaben = new ArrayList<String>();
        return erstelleSpielfeld();
    }

    public String erstelleSpielfeld() {
        for (int i = 0; i < gesuchtesWort.length ; i++) {
            verschlüsseltesWort += "_ ";
        }
        return verschlüsseltesWort;
    }

    public String zeigeSpielfeld() {

        return verschlüsseltesWort ;
    }

    public boolean bustabeÜberprüfen(String bustabe){
        if(benutzteBustaben.contains(bustabe)){
            return true;
        }
        else{
            return false;
        }
    }

    public String zeigeBenutzeBustaben(){

        String bustaben = String.valueOf(benutzteBustaben);
        return bustaben;

    }

    public void bustabeAustauschen(int index){

        verschlüsseltesWort.split(" ")[index] = gesuchtesWort[index];
        verschlüsseltesWort = String.valueOf(verschlüsseltesWort);
    }

    public String rateBustaben(String bustabe){
        if(bustabeÜberprüfen(bustabe)){
            return ungültigerBustabe(bustabe);
        }
        else{
            benutzteBustaben.add(bustabe);
        }
        for (int i = 0; i < gesuchtesWort.length ; i++) {
            if(gesuchtesWort[i] == bustabe){
                bustabeAustauschen(i);
            }
        }
        return zeigeSpielfeld();
    }

    public String ungültigerBustabe(String bustabe) {
        return "bereits benutzt";
    }
}

Probleme:
-Fehler beim Wort erstellen
--> neuesSpiel() resettet nicht alle Werte
---> erstellung verschlüsseltes Wort funktioniert nicht immer (ich glaube bei Schreibtisch geht nicht)
---> bustabeRaten zeigt zumindest schon mal nicht erratene Bustaben an (bei der eingabe "s" passiert nichts, obwohl s in allen drei wörtern enhalten ist)

Vielen Dank!
 

mrBrown

Super-Moderator
Mitarbeiter
--> neuesSpiel() resettet nicht alle Werte
Welche denn nicht?

---> erstellung verschlüsseltes Wort funktioniert nicht immer (ich glaube bei Schreibtisch geht nicht)
Was funktioniert denn nicht?


---> bustabeRaten zeigt zumindest schon mal nicht erratene Bustaben an (bei der eingabe "s" passiert nichts, obwohl s in allen drei wörtern enhalten ist)
Du vergleichst Strings mit ==, dafür musst du stattdessen equals() benutzen ;)


Ich möchte noch eine eigene Idee einbringen ... Macht es nicht Sinn die Methode neuesSpiel() zu einem Konstruktor zu machen?
Prinzipiell schon
 

Leon_2001

Aktives Mitglied
Danke für die schnelle Hilfe!

Zu neuesSpiel():
Ich habe testweise mir mit einer for schleife gescuchtesWort zurückgeben lassen
bei zweimaligen aufrufen der Methode kam dann "StuehleSchreibti... " raus (wird ab irgendeiner Stelle immer abgeschnitten, aber so in der Art

verschlüsseltesWort:

Habe glaube ich das "Problem" erkannt ... es kamen immer 9 Unterstriche bei Schreibtisch und danach 3 anführungszeichen unten. Ich glaube jedoch, dass das Wort einfach zu lang ist und die Anführungszeichen einfach 3 Folgepunkte darstellen oO

damit wäre das zumindest gelöst.

Oh man auf den falschen Vergleich der Strings hätte ich auch kommen können. Ich werde das gleich ändern :)

Hoffe du kannst mir bei Problem 1 noch helfen. Noch eine grundsätzliche Frage. Wenn ich jetzt mehrere solcher Klassen habe und ein System einbauen möchte, dass man virtuelle Punkte fürs spielen bezahlen muss, welche bei einem sieg gewinnen kann usw. wie mache ich das am besten? Soll ich einfach eine Klasse mit den Methoden schreiben und jede Spielklasse davon erben lassen?

Bin zurzeit noch etwas verwirrt von abstrakten Klassen, Interfaces, vererbung usw. weiß zwar wie alles geht (denke ich), aber wann sich was anbietet, habe ich noch nicht ganz raus^^
 

mrBrown

Super-Moderator
Mitarbeiter
Ich habe testweise mir mit einer for schleife gescuchtesWort zurückgeben lassen
bei zweimaligen aufrufen der Methode kam dann "StuehleSchreibti... " raus (wird ab irgendeiner Stelle immer abgeschnitten, aber so in der Art
Das liegt dann an deiner Ausgabe, die Methode ist richtig, das Array wird vollständig überschrieben

Habe glaube ich das "Problem" erkannt ... es kamen immer 9 Unterstriche bei Schreibtisch und danach 3 anführungszeichen unten. Ich glaube jedoch, dass das Wort einfach zu lang ist und die Anführungszeichen einfach 3 Folgepunkte darstellen oO
Womit gibst du das aus? Normalerweise sollte da nichts abgeschnitten werden...


Hoffe du kannst mir bei Problem 1 noch helfen. Noch eine grundsätzliche Frage. Wenn ich jetzt mehrere solcher Klassen habe und ein System einbauen möchte, dass man virtuelle Punkte fürs spielen bezahlen muss, welche bei einem sieg gewinnen kann usw. wie mache ich das am besten? Soll ich einfach eine Klasse mit den Methoden schreiben und jede Spielklasse davon erben lassen?

Bin zurzeit noch etwas verwirrt von abstrakten Klassen, Interfaces, vererbung usw. weiß zwar wie alles geht (denke ich), aber wann sich was anbietet, habe ich noch nicht ganz raus^^
Ja - Vererbung ist eine Möglichkeit dazu.
Schöner ist aber, wenn die Spiel-Objekte von einer anderen Klasse benutzt werden, welche das Geld verwaltet
 

Leon_2001

Aktives Mitglied
BlueJ hat eine Ausgabe für Rückgabewerte mit einem begrenzten Textfeld ... deswegen ist das abgeschnitten:
hab jetzt auch mal dein Rat umgesetzt mit equals, klappt leider nicht, auch wenn es vermutlich nicht nur an dem Liegt.

Code:
public String rateBustaben(String bustabe){
        int zahl = 0;
        if(bustabeÜberprüfen(bustabe)){
            return ungültigerBustabe(bustabe);
        }
        else{
            benutzteBustaben.add(bustabe);
        }
        for (int i = 0; i < gesuchtesWort.length ; i++) {
            zahl++;
            if(gesuchtesWort[i].equals(bustabe)){
                zahl = 1;
                bustabeAustauschen(i);
            }
        }
        return zahl + zeigeSpielfeld();
    }

Ausgabe: "12_ _ _ _ _ _"

stimmt also alles, bis auf die Tatsache, dass das "s" nicht eingetragen wird... stimmt etwas mit der Methode bustabeAustauschen() nicht?
 

mrBrown

Super-Moderator
Mitarbeiter
Ja, die Zeile verschlüsseltesWort.split(" ")[index] = gesuchtesWort[index]; ist ziemlicher Unsinn - Split erstellt ein neues Array, davon änderst du einen Wert, und schmeißt das Array dann weg.

Du solltest an der Stelle besser mit char-Arrays arbeiten ;)
 

Leon_2001

Aktives Mitglied
Java:
import java.util.ArrayList;
public class Galgenmännchen
{
    String wörterListe[] ={"tisch" , "stuehle" , "schreibtisch" };
    char gesuchtesWort[];
    String verschlüsseltesWort;
    ArrayList<String> benutzteBustaben = new ArrayList<String>();
    int fehlschläge = 0;
    boolean berechtigung;

    public Galgenmännchen()  {
        System.out.print('\u000C');
        gesuchtesWort = wörterListe[(int)(Math.random()*3)].toCharArray();
        verschlüsseltesWort = "";
        ArrayList<String> benutzteBustaben = new ArrayList<String>();
        berechtigung = true;
        System.out.println(erstelleSpielfeld());
    }

    private String erstelleSpielfeld() {
        for (int i = 0; i < gesuchtesWort.length ; i++) {
            verschlüsseltesWort += "_ ";
        }
        return verschlüsseltesWort;
    }

    private String zeigeSpielfeld() {
        return verschlüsseltesWort;
    }

    private boolean bustabeÜberprüfen(String bustabe){
        if(benutzteBustaben.contains(bustabe)){
            return true;
        }
        else{
            return false;
        }
    }

    public void zeigeBenutzeBustaben(){
        String bustaben = String.valueOf(benutzteBustaben);
        System.out.println(bustaben);
    }

    private void bustabeAustauschen(int index){
        char array[] = verschlüsseltesWort.toCharArray();
        array[(index * 2)] = gesuchtesWort[index];
        verschlüsseltesWort = String.valueOf(array);
    }

    public void rateBustaben(String bustabe){
        if (berechtigung){
            int count = 0;
            if(bustabeÜberprüfen(bustabe)){
                System.out.println(ungültigerBustabe(bustabe));

            }
            else{
                benutzteBustaben.add(bustabe);
                for (int i = 0; i < gesuchtesWort.length ; i++) {
                    if(bustabe.equals(String.valueOf(gesuchtesWort[i]))){
                        count++;
                        bustabeAustauschen(i);
                    }
                }
                if(count == 0){
                    fehlschläge++;
                    if ( fehlschläge < 10){
                        System.out.println(bustabe + " kommt in dem gesuchten Wort nicht vor :(");
                        System.out.println("Du hast noch " + (10 - fehlschläge) + " Versuche");
                    }
                    else {
                        System.out.println(bustabe + " kommt in dem gesuchten Wort nicht vor :(");
                        System.out.println("Game Over! Du hast keine Versuche mehr, viel Glück beim nächsten mal!");
                        berechtigung = false;
                    }
                }
                else {
                    System.out.println(zeigeSpielfeld());
                    prüfeSieg();
                }
            }
        }
    }

    public void rateWort(String wort){
        if ( berechtigung){
            if( wort.equals(String.valueOf(gesuchtesWort))){
                System.out.println(" Du has das Wort " + wort + " erraten ");
                System.out.println("Herzlichen Glückwunsch du gewinnst 5 coins");
                berechtigung = false;
            }
            else{
                fehlschläge++;
                if ( fehlschläge < 10){
                    System.out.println(wort + " ist nicht das gesuchte Wort :(");
                    System.out.println("Du hast noch " + (10 - fehlschläge) + " Versuche");
                }
                else {
                    System.out.println(wort + " ist nicht das gesuchte Wort :(");
                    System.out.println("Game Over! Du hast keine Versuche mehr, viel Glück beim nächsten mal!");
                    berechtigung = false;
                }
            }
        }
    }

    private void prüfeSieg(){

        if(!verschlüsseltesWort.contains("_")){
            System.out.println("Herzlichen Glückwunsch du gewinnst 5 coins"); 
            berechtigung = false;
        }
    }

    private String ungültigerBustabe(String bustabe) {
        return bustabe + " wurde bereits benutzt";
    }
}


Alles funktioniert :)
Vielen Dank für deine Hilfe!

Ich hoffe ich hab es nicht zu umständlich gemacht:confused:
Tipps, um das Programm zu optimieren(z.B. um den code kürzer zu machen) sind natürlich trotzdem jederzeit willkommen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
A Array problem Java Basics - Anfänger-Themen 16
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
B Array Problem Java Basics - Anfänger-Themen 3
F Problem mit der Aufgabe(Array) Java Basics - Anfänger-Themen 21
H boolean Array Problem Java Basics - Anfänger-Themen 7
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
G Problem mit Array Java Basics - Anfänger-Themen 2
K Problem mit Methode(Array,Boolean,ForSchleife) Java Basics - Anfänger-Themen 6
C Problem mit Arrays im Array Java Basics - Anfänger-Themen 11
A Problem mit Array Ausgabe Java Basics - Anfänger-Themen 7
L 2 dimensionales Array, Problem der Ausgabe Java Basics - Anfänger-Themen 4
E Array Problem Java Basics - Anfänger-Themen 1
L Problem mit Array Programm Java Basics - Anfänger-Themen 2
M Array problem Java Basics - Anfänger-Themen 9
M If und Array-Problem Java Basics - Anfänger-Themen 6
P OOP Array-Problem Java Basics - Anfänger-Themen 5
S Problem mit Array.Length Java Basics - Anfänger-Themen 2
R Array Problem Java Basics - Anfänger-Themen 17
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
P Array queue problem Java Basics - Anfänger-Themen 1
E Array zu Liste - kleines Problem Java Basics - Anfänger-Themen 6
F Problem mit Array Java Basics - Anfänger-Themen 8
N OOP Problem mit Array Java Basics - Anfänger-Themen 17
M Problem mit 2D Array Java Basics - Anfänger-Themen 3
M Problem mit Array und replace Java Basics - Anfänger-Themen 3
D Array Problem Java Basics - Anfänger-Themen 4
F Array Problem !? Java Basics - Anfänger-Themen 6
M Erste Schritte Array Problem Java Basics - Anfänger-Themen 8
F Problem mit Array, Java Basics - Anfänger-Themen 4
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2
B Problem mit Array Java Basics - Anfänger-Themen 5
J Array Problem Java Basics - Anfänger-Themen 2
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
D Klassen Problem mit Eigener Array-Klasse Java Basics - Anfänger-Themen 10
N Array problem bei einem magischen Quadrats Java Basics - Anfänger-Themen 3
P Klassen Klassen mit Array Problem Java Basics - Anfänger-Themen 4
T Problem mit Array Konvertierung Java Basics - Anfänger-Themen 13
T ArrayIndexOutOfBoundsException - Problem mit Array-Größe Java Basics - Anfänger-Themen 4
L Array Problem NullPointerException Java Basics - Anfänger-Themen 3
K Problem: Array String to Integer Java Basics - Anfänger-Themen 2
M Char-Array Problem Java Basics - Anfänger-Themen 6
D Problem mit TextFeld Array Java Basics - Anfänger-Themen 18
A Array Zugriff- Problem Java Basics - Anfänger-Themen 5
V 2D - Objekt Array Problem Java Basics - Anfänger-Themen 3
K Java Array Problem Java Basics - Anfänger-Themen 3
L Problem mit Array Java Basics - Anfänger-Themen 3
K kleines Array-Problem Java Basics - Anfänger-Themen 6
X Array out of bounds problem Java Basics - Anfänger-Themen 7
M Array Problem Java Basics - Anfänger-Themen 2
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
E Array Problem... Java Basics - Anfänger-Themen 14
P array problem Java Basics - Anfänger-Themen 9
P Codeschnipsel Verständnis Problem (Array) Java Basics - Anfänger-Themen 6
F Array Problem bei ByteburgTarif Java Basics - Anfänger-Themen 2
P Problem mit Laden und Ausgeben eines array-Objekts Java Basics - Anfänger-Themen 4
A Problem mit einem Array aus JButtons Java Basics - Anfänger-Themen 4
D Array multiplikations Problem Java Basics - Anfänger-Themen 26
D Array Problem Java Basics - Anfänger-Themen 5
B Mehrdimensionale Array Problem Java Basics - Anfänger-Themen 12
T Array-Vector Problem Java Basics - Anfänger-Themen 18
T Blutiger Anfänger mit Array Problem Java Basics - Anfänger-Themen 8
T problem mit array Java Basics - Anfänger-Themen 9
S String split array.length Problem Java Basics - Anfänger-Themen 3
B Problem mit Object Array Java Basics - Anfänger-Themen 8
W Problem mit BubbleSort und Array Java Basics - Anfänger-Themen 10
G Problem mit der Rückgabe von einem Array Java Basics - Anfänger-Themen 3
G Array-Problem Java Basics - Anfänger-Themen 3
M sinus berechnen array problem Java Basics - Anfänger-Themen 2
C array problem Java Basics - Anfänger-Themen 7
G Array ,Matrix Problem Java Basics - Anfänger-Themen 20
Antoras Problem mit Array Java Basics - Anfänger-Themen 5
K Problem mit 2 Dimensionalen Array Java Basics - Anfänger-Themen 4
D Array reverse Problem, da Referenz nicht auf tmpArray zeigt Java Basics - Anfänger-Themen 4
G Kleines Problem mit Array Java Basics - Anfänger-Themen 14
0 Array problem Java Basics - Anfänger-Themen 4
S Problem mit Array-Erstellung Java Basics - Anfänger-Themen 5
A array problem Java Basics - Anfänger-Themen 4
G array Problem Java Basics - Anfänger-Themen 9
H Problem mit array Java Basics - Anfänger-Themen 5
zilti Array-Problem Java Basics - Anfänger-Themen 6
J Array - Vertauschen Problem mit char/int Java Basics - Anfänger-Themen 6
M Problem mit Array in Methodenkopf Java Basics - Anfänger-Themen 2
K problem beim schreiben in ein int-array Java Basics - Anfänger-Themen 9
S JTable Problem mit einzufügendem Array Java Basics - Anfänger-Themen 6
D Problem mit Array brauche schnell Hilfe Java Basics - Anfänger-Themen 11
R Problem mit AbstractTableModel oder Array! Java Basics - Anfänger-Themen 5
G Problem mit Array bei einem 4-Gewinnt Spiel Java Basics - Anfänger-Themen 2
K problem mit resultset und 2d-array Java Basics - Anfänger-Themen 3
G Problem mit array Java Basics - Anfänger-Themen 2
P Array-Problem Java Basics - Anfänger-Themen 4
L Array Problem Java Basics - Anfänger-Themen 9
B Array Manipulation Problem Java Basics - Anfänger-Themen 11
B Array Problem (out of Bounds Exception) Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben