Buchstaben einlesen

Status
Nicht offen für weitere Antworten.

java-anfaenger

Aktives Mitglied
hab folgenden Code:

Code:
import java.io.*;

public class Woerterraten {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws IOException{
		BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
		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);
		  
		  System.out.println("Raten Sie das Wort! Buchstabe: ");
			String buchst = eingabe.readLine();
			char buchstabe = Char.parseChar(buchst);
		  for(int i = 0; i < wort.length(); i++) {
		    if(wort.charAt(i) == buchstabe) {
		      ratewort.setCharAt(i, buchstabe);
		    }
		  }

		}

		System.out.println("Sie haben gewonnen!");

	}

}

FM:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Char cannot be resolved

at Woerterraten.main(Woerterraten.java:23)


Wie mache ich das mit dem einlesen am besten?
 
menschlicher Compiler Forum?
wollen wir mal nicht zuviel verraten:
Char ist keine bekannte Klasse, bitte verwende nur bekannte Klassen,
im Zweifel in der API nachschlagen

Java Platform SE 6
 
Wenn du einen String mit nur einem einzelnen Buchstaben hast kannst du den mit charAt(0) als char zurückgeben lassen. Ich weiß nicht, ob das unbedingt die schönste Lösung ist, aber ich denke sie sollte funktionieren.
 
Wie wär's denn damit?
Java:
import java.io.*;

public class Woerterraten {
	public static void main( String[] args ) throws IOException {
		BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
		String wort = "Lokomotive";
		byte[] ratewort = new byte[wort.length()];
		
		for( int i=0; i < ratewort.length; i++) {
			ratewort[i] = '*';
		}
		while( !equal(wort, ratewort) ) {
			System.out.write( ratewort );
			System.out.println();
			System.out.print("Raten Sie das Wort! Buchstabe: ");
			
			byte buchstabe = (byte) br.readLine().charAt( 0 );
			
			for( int i=0; i < ratewort.length; i++ ) {
				if( wort.charAt(i) == buchstabe ) {
					ratewort[i] = buchstabe;
				}
			}
		}
		
		System.out.write( ratewort );
		System.out.println();
		System.out.println( "Sie haben gewonnen!" );
	}
	
	public static boolean equal( String s1, byte[] s2 ) {
		if ( s1.length() != s2.length )
			return false;
		
		for ( int i=0; i < s2.length; i++ ) {
			if ( s1.charAt(i) != s2[i] ) {
				return false;
			}
		}
		
		return true;
	}
}

Ich kann nicht nachvollziehen warum du hier einen StringBuffer verwendest, wo du doch die exakte Länge des Ratewortes weißt?
 
du kannst nicht nachvollziehen, warum ein Anfänger nicht ein byte[] anstelle eines String/ StringBuilders verwendet
und dann nicht am Ende System.out.write() benutzt? 😉

wie soll man denn darauf kommen, hätte ich persönlich auch nicht gemacht
 
Selbstverständlich 🙂

Wie du vlt. schon weißt, ist ein String intern nichts anderes als ein Array von Zahlen. Jede dieser Zahlen repräsentiert ein eigenes Zeichen. Welche Zahl welches Zeichen repräsentiert kann man in der ASCII-Codetabelle nachlesen.

Meine statische Methode equal() vergleicht zwei Zeichenketten miteinander und gibt true zurück wenn sie inhaltlich ident sind - ansonsten wird false zurückgegeben.

Java:
if ( s1.length() != s2.length )
    return false;
Wenn die Länge der beiden Zeichenketten nicht übereinstimmt können sie unmöglich gleich sein, daher wird in diesem Fall sofort false zurückgegeben.

Java:
for ( int i=0; i < s2.length; i++ ) {
            if ( s1.charAt(i) != s2[i] ) {
                return false;
            }
        }

Die Schleife wird sooft wiederholt bis jedes einzelne Zeichen miteinander verglichen wurde. Die Typen byte und char werden in Java zwar unschieden, sind in Wahrheit aber dasselbe. Ein char (engl. Character: Zeichen) ist nämlich genau ein Byte groß. Deswegen kann der Rückgabewert von charAt() auch problemlos mit der Zahl aus dem byte-Array verglichen werden. Sobald ein Zeichen nicht dem anderen gleicht, wird die Methode mit false beendet. Erst wenn beide Zeichenketten erfolgreich miteinander verglichen wurden wird true zurückgegeben.

Btw.: Du kannst aus einem byte-Array auch einfach einen String machen:
Java:
byte[] bytes = new byte[]{ 'h', 'a', 'l', 'l', 'o' };
String s = new String( bytes );
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben