Textmanpulation

SMoeller

Mitglied
Moin,
Ich habe folgendes Problem: Ich muss ohne einen StringBuffer eine Textmaipulation machen und zwar soll der Benutzer ein Wort erraten (wie bei Galgenmännchen). Damit der Benutzer weiß, wie viele Buchstaben das Wort hat, erscheint es erst in Strichen. Wenn der Benutzer einen Buchstaben eingibt, der in dem Wort vorkommt, dann soll der Buchstabe anstatt des Striches erscheinen. Beispiel:
----- (fünf Striche für fünf Buchstaben, das Wort ist "hallo")
Der Benutzer gibt den Buchstaben "a" ein, also erscheint der String -a---
Wenn der Benutzer jetzt ein "l" eingibt, dann soll -all- erscheinen.
Wie geht das ohne StringBuffer?
 
Möglichkeiten gibts viele :)
z.B. könntest du ein char Array nehmen und es in einer Schleife verarbeiten, wenn eine Übereinstimmung gefunden wurde hast du durch den Schleifen index +1 die position und kannst den Buchstaben setzen(in einem anderen char Array oder einem String den du zusammenbaust) Schleife weiterlaufen lassen um zu sehen ob der gleiche Buchsatabe nochmal vorkommt, selbes Spiel wie oben...
 
Hallo SMöller,

schau mal hier.

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Play {

	String[] word = {"K","A","N","I","N","C","H","E","N"};

	String[] find = new String[word.length];
	
	String readin = "";

	public Play() {
		for (int i = 0; i < word.length; i++)
			find[i] = "-";
		
		System.out.println("Find The Word");
		
		while (!Arrays.equals(word,find)) {
			printArray(find);
			System.out.println("Nennen Sie bitte einen Buchstaben:");
			try {
				BufferedReader in = new BufferedReader(new InputStreamReader(
						System.in));
				readin = in.readLine();
			} catch (IOException e) {
			}
			if (readin.length() == 0)
				continue;
			for (int i = 0; i < word.length; i++) {
				if (word[i].equals("" + readin.substring(0,1).toUpperCase()))
					find[i] = readin.substring(0,1).toUpperCase();
			}
		}
		System.out.println("Bravo! Sie haben es geschafft.");
		printArray(find);
	}

	public void printArray(Object[] o) {
		for (int i = 0; i < o.length; i++)
			System.out.print(o[i]);
		System.out.println();
	}

	public static void main(String[] args) {
		Play p = new Play();
	}
}

Vg Erdal
 
Hallo!

Solche Konsolenspielereien kann man sehr einfach über Telnet abwickeln...
Code:
/**
 * 
 */
package de.tutorials;

import java.io.InputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.BitSet;


/**
 * @author Tom
 * 
 */
public class HangMan {

    static char[] chars = "ABCAAABCD".toCharArray();
    static BitSet bitSet = new BitSet(chars.length);
    
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Socket socket = new ServerSocket(8888).accept();
        InputStream in = socket.getInputStream();
        PrintStream out = new PrintStream(socket.getOutputStream());
        
        do
        {
            repaint(out);
            out.print( " Your guess: ");
            char c = (char)in.read();
            for (int i = 0; i < chars.length; i++) {
                if(chars[i] == c){
                    bitSet.set(i);
                }
            }
        }while(bitSet.cardinality() < chars.length);
        repaint(out);
    }

    private static void repaint(PrintStream out) {
        out.print('\r');
        for (int i = 0; i < chars.length; i++) {
            if(bitSet.get(i)){
                out.print(chars[i]);
            }else{
                out.print('-');
            }
        }
    }
}

Starten über:
Code:
ABCAAABCD Your guess: D

Verbindung zu Host verloren.

C:\Dokumente und Einstellungen\Tom>telnet localhost 8888

Gruß Tom
 
Hallo Tom,

ich konnte dein Beispiel weder über die Doskonsole noch in Eclipse richtig starten. Dos findet bei mir den Befehl telnet erst garnicht. Bei Eclipse gebe ich einen Buchstaben ein drückte auf Enter, es passiert aber nichts.


Vg Erdal
 
Hallo!

Die Buchstabeneingabe funktioniert in dieser Spielerrei ja auch nur indirekt über eine Socketverbindung (beispielsweise mit Telnet). Merkwürdig, dass dein Windows kein Telnet kennt... (sollte eigentlich mitinstalliert worden sein und (indirekt) im PATH stehen)

Versuchs mal unter C:\WINDOWS\system32\telnet.exe localhost 8888

Bei mir kommt telnet ein paar mal vor:
Code:
C:\>dir /s telnet.exe
 Datenträger in Laufwerk C: ist DISK0
 Volumeseriennummer: 7CE1-4003

 Verzeichnis von C:\WINDOWS\$NtServicePackUninstall$

29.08.2002  03:43            73.728 telnet.exe
               1 Datei(en)         73.728 Bytes

 Verzeichnis von C:\WINDOWS\ServicePackFiles\i386

04.08.2004  00:58            77.824 telnet.exe
               1 Datei(en)         77.824 Bytes

 Verzeichnis von C:\WINDOWS\system32

04.08.2004  00:58            77.824 telnet.exe
               1 Datei(en)         77.824 Bytes

 Verzeichnis von C:\WINDOWS\system32\dllcache

04.08.2004  00:58            77.824 telnet.exe
               1 Datei(en)         77.824 Bytes

     Anzahl der angezeigten Dateien:
               4 Datei(en)        307.200 Bytes
               0 Verzeichnis(se), 19.894.390.784 Bytes frei

Gruß Tom
 
Hallo Tom,

ja im System32 ist Telnet drin. Soll ich den ins Classpath eingetragen? Und dann wie gewöhnlich aus Eclipse starten?

Vg Erdal
 
Zurück