-1

我正在尝试创建一个刽子手,但我遇到了 2 个问题。

1)第一个问题是当用户找到单词时,循环并没有停止。

2)我有一个变量attempts可以知道尝试的次数。即使用户找到了字母,尝试的次数也会减少。

要找到的词是no

这是一个演示:

1) 我输入字母n

You have 5 attempts.
--
Enter your letter : n

2) 我输入字母o

The letter is good. 
You have 4 attempts.
n-
Enter your letter : o

3) 通常循环应该停止。

The letter is good. 
You have 3 attempts.
no
Enter your letter : 

如果您有任何想法,请提前感谢您。

Scanner input = new Scanner(System.in);

char letter = 0; 
String[] words = {/*"yes",*/ "no"}; 
String word_random = words[(int) (Math.random() * words.length)]; 
boolean[] word_found = new boolean[word_random.length()];
int attempts = 5;


while(attempts > 0){
  System.out.println("You have " + attempts + " attempts.");
  for(int i=0; i<word_random.length(); i++) {
    if ( word_found[i] ) {
      System.out.print(word_random.charAt(i));
    }
    else {
      System.out.print('-');
    }
  }

  System.out.println("");
  System.out.print("Enter your letter : ");
  letter = input.next().charAt(0);

  for(int i=0; i<word_random.length();i++){
    if(word_random.charAt(i) == letter){
      System.out.println("The letter is good. ");
      word_found[i] = true;
    } 

  }

attempts--;
   }
  }
}
4

3 回答 3

2

您只是缺少一个检查循环或方法。检查下面的解决方案。

Scanner input = new Scanner(System.in);

char letter = 0; 
String[] words = {/*"yes",*/ "no"}; 
String word_random = words[(int) (Math.random() * words.length)]; 
boolean[] word_found = new boolean[word_random.length()];
int attempts = 5;

while(attempts > 0){
  System.out.println("You have " + attempts + " attempts.");
  for(int i=0; i<word_random.length(); i++) {
    if ( word_found[i] ) {
      System.out.print(word_random.charAt(i));
    }
    else {
      System.out.print('-');
    }
  }

  System.out.println("");
  System.out.print("Enter your letter : ");
  letter = input.next().charAt(0);

  for(int i=0; i<word_random.length();i++){
    if(word_random.charAt(i) == letter){
      System.out.println("The letter is good. ");
      word_found[i] = true;
    } 

  }

  boolean done = true;
  for(boolean b : word_found)
       done = done && b;

   if(done) break;
   else attempts--;

   }
于 2020-01-04T21:15:45.373 回答
0

我会遵循您的解决方案,而不是建议更好的解决方案。广告1.添加检查找到的数组单词是否在您的第一个for循环后仅包含true,如果数组中只有true值,则打印“you won”并将尝试设置为0

广告 2. 将尝试移动到第一个 for 循环的 else 情况,或者在第一个 for 循环的真实情况下添加尝试++

于 2020-01-04T20:41:17.073 回答
0
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    char letter = 0;
    String[] words = { /* "yes", */ "no" };
    String word_random = words[(int) (Math.random() * words.length)];
    boolean[] word_found = new boolean[word_random.length()];
    int attempts = 5;

    while (attempts > 0) {
        System.out.println("You have " + attempts + " attempts.");
        for (int i = 0; i < word_random.length(); i++) {
            if (word_found[i]) {
                System.out.print(word_random.charAt(i));
            } else {
                System.out.print('-');
            }
        }

        System.out.println("");
        System.out.print("Enter your letter : ");
        letter = input.next().charAt(0);

        boolean match = false;
        for (int i = 0; i < word_random.length(); i++) {
            if (word_random.charAt(i) == letter) {
                System.out.println("The letter is good. ");
                word_found[i] = true;
                match = true;
                if (i == word_found.length - 1) {
                    System.out.println("THE END: attempts: " + attempts);
                    return;
                }
            }
        }

        if (!match) {
            attempts--;
        }

    }
    System.out.println("THE END");
}

我建议您像我一样修改代码的最后一部分,它应该可以工作。

于 2020-01-04T20:45:36.203 回答