Robin: Wörter Raten

Hey!

Ich hab ein Programm geschrieben das quasi das Galgenmännchen Spiel sein soll, also man gibt einzelne Buchstaben ein, um ein festgelegtes WOrt zu eraten.. So beim compilieren etc is das auch kein problem nur irgednwie werden die iengegeben wörter nicht ganz erkannT???
hier der quelltext:

import util.StdInput;
import java.util.Arrays;
class WRaten
{
  public static void main (String[] args)
  {
    String wort="Lokomotive";
    int laenge=wort.length();
    char[] rbuchstabe = new char[laenge];
    String ratewort="";
    for (int i=1;i<laenge;i++)
    {
      rbuchstabe[i]='*';
      ratewort=ratewort+rbuchstabe[i];
    }
    do
    {
      System.out.println(ratewort);
      char buchstabe=StdInput.readChar("Raten Sie das Wort! Buchstabe: ");
      for (int i=0;i<=laenge-1;i++)
      {
          if(buchstabe==wort.charAt(i))
          {
           rbuchstabe[i]=wort.charAt(i);
          }
        }
    }
    while (wort!=ratewort);
    System.out.println("Herzlichen Glückwunsch! Sie haben gewonnen!");
  }
}

Vielen Dank schonmal!!

  1. Hallo Robin,

    do
        {
          System.out.println(ratewort);
          char buchstabe=StdInput.readChar("Raten Sie das Wort! Buchstabe: ");
          for (int i=0;i<=laenge-1;i++)
          {
              if(buchstabe==wort.charAt(i))
              {
               rbuchstabe[i]=wort.charAt(i);
              }
            }
        }
        while (wort!=ratewort);

    Auf den ersten blick, hat das Programm zwei Fehler:
    Du verwendest ratewort in der Abbruchbedingung, aber Du änderst diesen String nie.

    Du vergleichst Strings mit !=. Damit vergleichst Du aber nicht, ob die Strings den gleichen Wert haben, sondern, ob es sich um die gleichen Objekte haben.
    Es gilt nämlich a = new String(); b = a ==> a == b und a = new String, b = new String() ==> a.equals(b) aber nicht a = new String(); b = new String() ==> a == b

    Du solltest für das ratewort einen editierbaren String, d.h. StringBuffer nehmen und diesen String direkt ändern. StringBuffer verfügt auch über eine "Zeichen ersetzen" Methode, die Du verwendden kannst.
    Vergleichen musst Du dann mit ratewort.toString().equals(wort)

    Grüße

    Daniel

    1. Vielen Dank dafür auf jeden Fall!!!! Leider kenn ich mich nicht wirklich mit STringBuffern aus, ich habs mal so versucht aber naja.. war nix :o)

      v a das "ratewort insert(int i, wort.charAt(i));"

      Wäre toll wenn mir das jemand erklären könnte???

      import util.StdInput;
      import java.util.Arrays;
      import java.lang.*;
      class WRaten
      {
        public static void main (String[] args) throws IOException
        {
          String wort="Lokomotive";
          int laenge=wort.length();
          char[] rbuchstabe = new char[laenge];
          StringBuffer ratewort = new StringBuffer(laenge);
          for (int i=1;i<laenge;i++)
          {
            rbuchstabe[i]='*';
            ratewort=ratewort+rbuchstabe[i];
          }
          do
          {
            System.out.println(ratewort);
            char buchstabe=StdInput.readChar("Raten Sie das Wort! Buchstabe: ");
            for (int i=0;i<=laenge-1;i++)
            {
                if(buchstabe==wort.charAt(i))
                {
                 ratewort insert(int i, wort.charAt(i));
                }
              }
          }
          while (ratewort.toString().equals(wort));
          System.out.println("Herzlichen Glückwunsch! Sie haben gewonnen!");
        }
      }

      1. Hallo Robin,

        do
            {
              System.out.println(ratewort);
              char buchstabe=StdInput.readChar("Raten Sie das Wort! Buchstabe: ");
              for (int i=0;i<=laenge-1;i++)
              {
                  if(buchstabe==wort.charAt(i))
                  {
                   ratewort.insert(int i, wort.charAt(i));
                  }
                }
            }
            while (ratewort.toString().equals(wort));

        ratewort füllst Du ja am Anfang mit *
        Daher solltest Du Zeichen ersetzen, nicht einfügen.
        Außerdem willst Du die while-Schleife ja abbrechen, wenn die Strings gleich sind, weshalb Du den Vergleich ja negieren musst.
        Außerdem ist mir nicht ganz klar was Du mit dem Array rbuchstabe willst.

        So habe ich mir das in etwas gedacht:

        String wort="Lokomotive";
        StringBuffer ratewort = new StringBuffer();

        for(int i = 0; i < wort.length(); i++) {
          ratewort.append('*');
        }

        while(!ratewort.toString().equals(wort)) {

        System.out.println(ratewort);
          char buchstabe=StdInput.readChar("Raten Sie das Wort! Buchstabe: ");

        for(int i = 0; i < wort.length(); i++) {
            if(wort.charAt(i) == buchstabe) {
              ratewort.setCharAt(i, buchstabe);
            }
          }

        }

        System.out.println("Herzlichen Glückwunsch! Sie haben gewonnen!");

        Grüße

        Daniel

        1. Klasse!! Vielen Dank auch!