2

私は自分の割り当てのために絞首刑執行人プログラムを書いています、そして私は小さな問題に遭遇しました。私のプログラムでは、単語を区切るために「|」を使用しています。シンボル。例:これは推測される単語です:

U N I T E D | S T A T E S | O F | A M E R I C A

番号を表示するStringBuffer変数があります。ここにダッシュの

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

次のコードを使用して、区切り文字'|'を挿入しようとしました

if(guessword.indexOf('|') == -1)
    System.out.print(" ");
else
    guessit.setCharAt(guessword.indexOf('|'),'|');

私はそれが間違っていることを知っています、そしてそれはただ1つのセパレーターを挿入します。セパレーターを正しい位置に挿入するのを手伝ってもらえますか?また、System.out.print( "");を削除してみてください。それは不必要にスペースを残すので。休憩を使用できますか。代わりに、上記の例では、次のように表示されます

_ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

私は実際に欲しい

_ _ _ _ _ _ | _ _ _ _ _ _ | _ _ | _ _ _ _ _ _ _

私の主な方法は次のとおりです

public static void main()throws IOException
{
    Hangman obj = new Hangman();
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    PrintWriter p = new PrintWriter(System.out,true);

    p.println("Lets play HANGMAN");
    p.println();
    p.println("Enter your choice according to the following options.\n
               NOTE: Words are related to the topics given below.\n
               1. Sports\n2. Movies\n3. Computer\n4. Food\n5. Countries");
    p.println();
    int choice = Integer.parseInt(br.readLine());
    obj.clearScreen();
    String bothwordandclue[] = new String[2];

    if(choice == 1)
        bothwordandclue = obj.Sports();
    else if(choice == 2)
        bothwordandclue = obj.Movies();
    else if(choice == 3)
        bothwordandclue = obj.Computers();
    else if(choice == 4)
        bothwordandclue = obj.Food();
    else if(choice == 5)
        bothwordandclue = obj.Countries();
    else
        p.println("Wrong choice");

    int counter = 6;
    String guessword = bothwordandclue[0];
    String wordclue = bothwordandclue[1];

    int lengthofword = (int)(Math.round(((double)guessword.length()/2)));
    int checkguess = 0;
    String a;
    StringBuffer guessit = new StringBuffer();

    for (int i = 0;i < lengthofword; i++)
        guessit = guessit.append("_ ");

    guessit.delete((2 * lengthofword)-1,(2 * lengthofword));

    if(guessword.indexOf('|') == -1)
        System.out.print(" ");
    else
        guessit.setCharAt(guessword.indexOf('|'),'|');

    p.println(guessit);
    do
    {
        p.println();
        p.println("Enter your guess letter in capitals");
        String guessletter = br.readLine();
        obj.clearScreen();

        for(int i = 0;i<lengthofword;i++)
        {
            if(guessletter.charAt(0) == guessword.charAt(2*i))
            {
                guessit.setCharAt(2*i,guessletter.charAt(0));
                checkguess=1;
            }                
        }
        if(checkguess == 1)
        {
            p.println("Correct Guess");
            p.println(guessit);
        }
        else
        {
            counter--;
            p.println("Wrong guess. You have " + counter + 
                                    " incorrect guesses left");
            p.println(guessit);
        }
        checkguess = 0;
        a = guessit.toString();
        if(a.equals(guessword))
        {
            p.println("You guessed the word!!!!!");
            counter=0;
        }        
    }while(counter>0);
}
4

3 に答える 3

1

問題は、それぞれ1つのインデックスsetCharAtindexOfのみ適用されることです。そのため、最初の|のみが置き換えられます。guessword複数回繰り返す必要があります。Javaの他の組み込み文字列関数のいくつかを使用するか、単純なforループを使用することができます。

for(int i = 0; i < guessword.length(); i++){
    if(guessword.charAt(i) == '|')
        guessit.setCharAt(i, '|');
}
于 2012-10-24T18:40:42.270 に答える
1

あなたindexOfだけでそれを行うことができます。そのメソッドの別のバージョンを使用する必要があります。これは、検索を開始する場所から位置を取得します。String#indexOf(String str, int fromIndex)ここで必要なことを確認してください。

int index = guessword.indexOf("|");
while(index >= 0) {
   guessIt.setCharAt(index, '|')

   // Start searching for next "|" after this index
   index = guessword.indexOf("|", index+1));  
}
于 2012-10-24T18:46:21.253 に答える
0

String.replaceAllを参照してください

そして、正規表現について知らない場合:

ウィキペディアでの正規表現

正規表現のチートシート

于 2012-10-24T18:40:16.950 に答える