2016-09-29 80 views
0

我似乎有一个问题,我不能修复,当用户输入完整的单词为我的程序时,它显示每次搜索字符,而不是只显示整个单词说他们已经猜对了。我怎样才能让它只显示单词而不显示每次搜索的时候用户输入整个单词的字符?感谢未来的回信HangMan错误输出

package assignment1Q2; 

import java.io.File; 
import java.io.FileNotFoundException; 

import java.util.Scanner; 
public class HangmanClassExample { 

static Scanner keyboard = new Scanner(System.in); 
static int play, size, size2; 
static String word; 
static String[] ARRAY = new String[0]; 


public static void main(String[] args) { 

    setUpGame(); 
} 

public static void setUpGame() { 
    System.err.printf("Welcome to hangman.\n"); 

    try { 

     Scanner scFile = new Scanner(new File("H:\\Varsity work\\Java Programming\\Programs\\HangMan\\src\\hangman\\HangMan.txt")); 
     String line; 
     while (scFile.hasNext()) { 
      line = scFile.nextLine(); 
      Scanner scLine = new Scanner(line); 
      size++; 
     } 
     ARRAY = new String[size]; 
     Scanner scFile1 = new Scanner(new File("H:\\Varsity work\\Java Programming\\Programs\\HangMan\\src\\hangman\\HangMan.txt")); 
     while (scFile1.hasNext()) { 
      String word; 
      line = scFile1.nextLine(); 
      Scanner scLine = new Scanner(line); 
      word = scLine.next(); 
      ARRAY[size2] = word; 
      size2++; 
      calculateGuess(); 
     } 
    } catch (FileNotFoundException e) { 
     System.out.println(e); 
    } 
} 

public static void calculateGuess() { 

    try { 
     do { 

      int random = (int) (Math.random() * ARRAY.length); 
      String randomWord = ARRAY[random]; 
      String word = randomWord; 
      char[] ranWord = randomWord.toCharArray(); 
      char[] dash = word.toCharArray(); 

      int LEFT = 6; 
      for (int i = 0; i < dash.length; i++) { 
       dash[i] = '-'; 
       System.out.print(dash[i]); 
      } 
     for (int A = 1; A <= dash.length;) { 
      System.out.print("\nGuess a Letter:"); 
      String userletters = keyboard.next();; 

      for (int i = 0; i < userletters.length(); i++) { 
       char userLetter = userletters.charAt(i); 
       String T = Character.toString(userLetter); 
       for (int B = 0; B < ranWord.length; B++) { 

        if (userLetter == dash[B]) { 
         System.out.println("this '" + userLetter + "' letter already exist"); 
         B++; 
         if (userLetter == dash[B-1]) { 
          break; 
         } 


        } else if (userLetter == ranWord[B]) { 
         dash[B] = userLetter; 
         A--; 
        } 
       } 
       if (!(new String(ranWord).contains(T))) { 
        LEFT--; 
        System.out.println("You did not guess a correct letter, you have " + LEFT + " OF " 
          + dash.length + " trys left to guess correctly"); 
       } 

       System.out.println(dash); 
      } 
      if ((new String(word)).equals(new String(dash))) { 
       System.out.println("\nYou have guessed the word correctly!"); 
       break; 

      } 

     } 

      System.out.println("Play agian? (y/n)"); 
      String name = keyboard.next(); 

      if (name.equals("y")) { 
       play = 0; 

      } else { 
       play = 1; 
       return; 
      } 
     } while (play == 0); 

    } catch (NullPointerException e) { 

    } 
} 

}

OUTPUT:

Welcome to hangman. 



-------- 

Guess a Letter:c 

c------- 

Guess a Letter:c 

this 'c' letter already exist 

c------- 

Guess a Letter:computer 

this 'c' letter already exist 

c------- 

co------ 

com----- 

comp---- 

compu--- 

comput-- 

compute- 

computer 

You have guessed the word correctly! 

Play agian? (y/n) 

n 
+2

您应该阅读[变量命名约定](http://www.oracle.com/technetwork/java/codeconventions-135099.html) – Blobonat

+1

当您从播放器得到答案时,为什么不直接比较整个单词与给定的一个,如果他们不匹配检查的字母.. – 2016-09-29 13:30:36

+0

@burhancerit我将如何做 –

回答

1

有两个for循环和检查每个字符,而不是,您可以使用startsWith检查字符用户输入。对于例如如果用户输入comp,则可以简单地检查originalString.startsWith(comp) - 如果为true,则只需打印补偿并从originalString中删除前4个字符。

0

你可以采取如果你的循环这样

 if ((new String(word)).equals(new String(dash))) { 
      System.out.println("\nYou have guessed the word correctly!"); 
      // break; not needed anymore as we're out of the loop 

     } 
     else { 
      for (int i = 0; i < userletters.length(); i++) { 
      char userLetter = userletters.charAt(i); 
      String T = Character.toString(userLetter); 
      for (int B = 0; B < ranWord.length; B++) { 

       if (userLetter == dash[B]) { 
        System.out.println("this '" + userLetter + "' letter already exist"); 
        B++; 
        if (userLetter == dash[B-1]) { 
         break; 
        } 


       } else if (userLetter == ranWord[B]) { 
        dash[B] = userLetter; 
        A--; 
       } 
      } 
      if (!(new String(ranWord).contains(T))) { 
       LEFT--; 
       System.out.println("You did not guess a correct letter, you have " + LEFT + " OF " 
         + dash.length + " trys left to guess correctly"); 
      } 

      System.out.println(dash); 
     } 
    } 

}的

但在我看来,在那样的游戏,用户应该只能够输入一个字符而不是整个单词。

+0

使用您的解决方案,它仍然无法工作 –