【问题标题】:Stuck in logic for movie guess game in java (by udacity)陷入Java电影猜谜游戏的逻辑(通过udacity)
【发布时间】:2018-06-20 01:59:18
【问题描述】:

我正在 Java 上制作一个电影猜谜游戏(很像刽子手,但不包含简笔画之类的东西),它逐个字母地接受用户的输入。我被困在我想要输入的字母以替换电影标题中该字母的所有实例的位置。我的代码没有完全工作。 稍后,我将应用阻止用户再次输入相同字母的逻辑。但目前我需要解决这个特定问题。有什么帮助吗?

这是我的游戏类中的游戏进程函数。

public void GameProcess(char[] dashedarray) {
        Scanner input = new Scanner(System.in);
        char guess;
        int i = 0;
        int spaces = 0;
        int correct = 0;
        int wrong = 0;
        boolean run = true;
        while (run) {
            if (dashedarray[i] == ' ') {
                spaces++;
                i++;
                continue;
            } else {
                System.out.println("Enter your guess.");
                guess = input.next().charAt(0);
                for (int j = 0; j < dashedarray.length; j++) {
                    if (dashedarray[j] != ' ') {
                        if (moviename.charAt(i) == guess) {
                            dashedarray[i] = guess;
                            correct++;
                        }
                        else if(moviename.charAt(j) == guess)  {
                            dashedarray[j] = guess;
                            correct++;
                        }
                        }
                        else
                        {
                            wrong++;
                        }
                    }
                i++;
                PrintArray(dashedarray);

                if (correct == (moviename.length() - spaces)) {
                    System.out.println("You have won.");
                    break;
                } else if (wrong == 10) {
                    System.out.println("You have lost.");
                    break;
                }
                System.out.println("The number of wrong guesses is " + wrong + ".");
            }
        } 

【问题讨论】:

  • i 是干什么用的?为什么要检查i 的索引?
  • 逐一检查索引。 j 检查每个字符的 i 循环内从零到数组末尾的索引。
  • moviename 是什么 - 什么不起作用?
  • 将整个块 if (dashedarray[i] == ' ') 移出循环后 while 循环。使用i 删除所有内容,它应该可以工作。
  • 在循环之外不会使用它。

标签: java arrays class object logic


【解决方案1】:

你根本不需要i。 spaces 是统计你的答案有多少个空格,这个不用猜。您应该在循环之外执行此操作。

Scanner input = new Scanner(System.in);
char guess;
int i = 0;
int spaces = 0;
int correct = 0;
int wrong = 0;
boolean run = true;

for (int i = 0; i < dashedarray.length; i++) {
    spaces++;        
}

while (run) {
    System.out.println("Enter your guess.");
    guess = input.next().charAt(0);

    boolean match = false;
    for (int j = 0; j < dashedarray.length; j++) {
        if (dashedarray[j] != ' ') {
            if(moviename.charAt(j) == guess)  {
                dashedarray[j] = guess;
                correct++;
                match = true;
            }
        }
    }

    // It matched nothing, this input is wrong.
    if (!match) {
        wrong++;
    }

    PrintArray(dashedarray);

    if (correct == (moviename.length() - spaces)) {
        System.out.println("You have won.");
        break;
    } else if (wrong == 10) {
        System.out.println("You have lost.");
        break;
    }
    System.out.println("The number of wrong guesses is " + wrong + ".");
}

【讨论】:

  • 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: com.company.Game.GameProcess(Main.java:96) 的 com.company.Main.main(Main.java:18) 的 100 ) 进程以退出代码 1 结束
  • @MohammadOsamaRajput 我们不可能知道第 18 行在哪里。
  • public static void main(String[] args) { Game game = new Game();字符串 s = game.OpenFile(); System.out.println(game.GetRnum()+" "+s); System.out.println("打开大写锁定。");字符 [] 虚线数组 = 新字符 [100]; dashedarray=game.DashedArray(s); game.PrintArray(dashedarray); System.out.println("你可以猜错 10 次。"); game.GameProcess(dashedarray); }
  • 最后一行是第18行。
  • moviename 和 dashedarray 的长度必须相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多