【问题标题】:Both the if statement and the else if statements runif 语句和 else if 语句都运行
【发布时间】:2024-10-21 01:50:01
【问题描述】:

我是 Java 编程的新手,一直在研究某种刽子手“游戏”。这是我的导师提出的一个练习,在完成基本版本后,我想做一个更高级的练习。到目前为止,我发现代码中的问题是 if 语句和 else if 语句都运行。为了解决这个问题,我添加了一些中断语句。它确实有助于解决一个问题,但两个语句仍然运行。

这是错误的 if else 语句:

                if (guess.equals(letters[i])){
                    wordi[i] = guess.charAt(i);
                    System.out.println("Included");
                    break;
                }
                else if (!guess.equals(letters[i])){
                    wordi[i] = '*';
                    wrong_guess++;
                    num_guess ++;
                    System.out.println("Not included");
                    break;

如果有帮助,这里是完整的代码:

import java.util.Scanner;

public class Test {
    public static Scanner input = new Scanner(System.in);
    @SuppressWarnings({ "unused" })
    public static void main(String[] args) {

        String[] words = new String[10];
        words[0] = "chair";
        words[1] = "apple";
        words[2] = "bear";
        words[3] = "word";
        words[4] = "table";
        words[5] = "cow";
        words[6] = "cabbage";
        words[7] = "food";
        words[8] = "computer";
        words[9] = "mouse";

        int cap_guess = 6;
    int wrong_guess = 0;
    int n = (int)(Math.random()*10);
    String word = words[n];
    String out_word = "";
    int num_guess = 1;
    for(int count = 0; count < word.length(); count ++){
        out_word += "*";
    }
    boolean success = false;
    String guess = "";
    String[] letters = new String[word.length()];
    for (int i = 0; i < letters.length; i++){
        letters[i] = word.substring(i,i+1);
        System.out.println(letters[i]);
    }

    while (num_guess <= cap_guess){
        display(wrong_guess);
        System.out.println(out_word);
        System.out.print("Enter a guess: ");
        guess = input.nextLine();
        guess = guess.trim();
        guess = guess.toLowerCase();
        System.out.println("Guess: " + guess);

        char[] wordi = out_word.toCharArray();
        if (guess.length() == 1){
            for (int i = 0; i < word.length(); i++){
                if (guess.equals(letters[i])){
                    wordi[i] = guess.charAt(i);
                    System.out.println("Included");
                    break;
                }
                else if (!guess.equals(letters[i])){
                    wordi[i] = '*';
                    wrong_guess++;
                    num_guess ++;
                    System.out.println("Not included");
                    break;

                }
            }
            out_word += wordi;

        }
    }

    /*System.out.println(word);
    System.out.println(out_word);*/

}
public static void display (int wrong_guess){
    if (wrong_guess == 0){
        System.out.println("_____________________");
        System.out.println("    *----------,     |");
        System.out.println("    |          |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("______________/-\\____|");
        System.out.println("");
    }
    if (wrong_guess == 1){
        System.out.println("_____________________");
        System.out.println("    *----------,     |");
        System.out.println("    |          |     |");
        System.out.println("   /=\\         |     |");
        System.out.println("  |. .|        |     |");
        System.out.println("   \\-/         |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("______________/-\\____|");
        System.out.println("");
    }
    if (wrong_guess == 2){
        System.out.println("_____________________");
        System.out.println("    *----------,     |");
        System.out.println("    |          |     |");
        System.out.println("   /=\\         |     |");
        System.out.println("  |. .|        |     |");
        System.out.println("   \\-/         |     |");
        System.out.println("    |          |     |");
        System.out.println("    |          |     |");
        System.out.println("    |          |     |");
        System.out.println("    |          |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("______________/-\\____|");
        System.out.println("");
    }
    if (wrong_guess == 3){
        System.out.println("_____________________");
        System.out.println("    *----------,     |");
        System.out.println("    |          |     |");
        System.out.println("   /=\\         |     |");
        System.out.println("  |. .|        |     |");
        System.out.println("   \\-/         |     |");
        System.out.println("    |          |     |");
        System.out.println("    |\\         |     |");
        System.out.println("    | \\        |     |");
        System.out.println("    |          |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("______________/-\\____|");
        System.out.println("");
    }
    if (wrong_guess == 4){
        System.out.println("_____________________");
        System.out.println("    *----------,     |");
        System.out.println("    |          |     |");
        System.out.println("   /=\\         |     |");
        System.out.println("  |. .|        |     |");
        System.out.println("   \\-/         |     |");
        System.out.println("    |          |     |");
        System.out.println("   /|\\         |     |");
        System.out.println("  / | \\        |     |");
        System.out.println("    |          |     |");
        System.out.println("               |     |");
        System.out.println("               |     |");
        System.out.println("______________/-\\____|");
        System.out.println("");
    }
    if (wrong_guess == 5){
        System.out.println("_____________________");
        System.out.println("    *----------,     |");
        System.out.println("    |          |     |");
        System.out.println("   /=\\         |     |");
        System.out.println("  |. .|        |     |");
        System.out.println("   \\-/         |     |");
        System.out.println("    |          |     |");
        System.out.println("   /|\\         |     |");
        System.out.println("  / | \\        |     |");
        System.out.println("    |          |     |");
        System.out.println("   /           |     |");
        System.out.println("  /            |     |");
        System.out.println("______________/-\\____|");
        System.out.println("");
    }
    if (wrong_guess == 6){
        System.out.println("_____________________");
        System.out.println("    *----------,     |");
        System.out.println("    |          |     |");
        System.out.println("   /=\\         |     |");
        System.out.println("  |x x|        |     |");
        System.out.println("   \\-/         |     |");
        System.out.println("    |          |     |");
        System.out.println("   /|\\         |     |");
        System.out.println("  / | \\        |     |");
        System.out.println("    |          |     |");
        System.out.println("   / \\         |     |");
        System.out.println("  /   \\        |     |");
        System.out.println("______________/-\\____|");
        System.out.println("");
    }
}
}

提前感谢您的帮助。

【问题讨论】:

  • 我不相信它们都运行,至少在循环的同一迭代中。根据语言规范,他们根本做不到。
  • 请注意,else if (!guess.equals(letters[i])){ 可以更轻松地写成else {
  • 你为什么要打破?
  • 另外你也不需要在 if {} 块的末尾打断
  • 我和@AndyTurner 一起做这个。它同时运行,但不是在同一循环中运行。

标签: java if-statement


【解决方案1】:

问题是你的break。你不会在 for 循环中迭代,你总是会中断

for (int i = 0; i < word.length(); i++){
    boolean found = false;
    if (guess.equals(letters[i])){
        wordi[i] = guess.charAt(i);
        System.out.println("Included");
        found = true;
    }
    else if (!guess.equals(letters[i])){
        wordi[i] = '*';
    }
}
if (!found)
     wrong_guess++;
num_guess++;

我没有测试,但应该没问题

【讨论】:

    【解决方案2】:

    我稍微清理了你的主要部分,但是我将把一些工作留给你。您可能应该将诸如单词列表初始化之类的内容包装到它自己的方法中。实际上,通常建议将任何可以剥离到自己的方法中的代码块都这样做。我不认为你必须走这个极端,但有人说你永远不应该有一个超过 8 行的方法。有点武断,但关键是诸如while循环内部发生的事情可以放入它自己的方法中。如果您可以将一段代码描述为执行单个任务,则应将其放入自己的方法中。这也将在调试时为您提供帮助,因为所有内容都被模块化为执行特定职责的代码块。很容易判断问题出在哪里,因为当一切都被正确分解后,代码应该只存在于它相关的范围内。以您的单词数组初始化为例,这会占用垂直空间,与获取用户输入、验证用户输入、显示结果等无关。如果您正在调试其中的一些功能,可能会让人感到困惑查看与它无关的代码。

    @SuppressWarnings({ "unused" })
        public static void main(String[] args)
        {
    
            String[] words = new String[10];
            words[0] = "chair";
            words[1] = "apple";
            words[2] = "bear";
            words[3] = "word";
            words[4] = "table";
            words[5] = "cow";
            words[6] = "cabbage";
            words[7] = "food";
            words[8] = "computer";
            words[9] = "mouse";
    
            int cap_guess = 6;
            int wrong_guess = 0;
            int num_guess = 1;
            String word = words[(int)(Math.random()*10)]; // one lined this
            for(Character ch : word.toCharArray()) out_word += '*'; // loop through the char array and fill outword with *
    
            System.out.println("The word is " + word);
            boolean success = false;
    
            String[] letters = new String[word.length()];
            for (int i = 0; i < letters.length; i++)
            {
                letters[i] = word.substring(i,i+1);
                System.out.println(letters[i]);
            }
    
            while (num_guess <= cap_guess && !success)// we want to exit on success as well
            {
                display(wrong_guess);
                System.out.println(out_word);
                System.out.print("Enter a guess: ");
                char guess = input.nextLine().toCharArray()[0]; // one line this, and it isn't used anywhere else so I moved this to the while loop
                System.out.println("Guess: " + guess);
    
                if(word.contains(String.valueOf(guess))) // if the word contains the character
                {
                    System.out.println("Included");
                    String temp = "";
                    for(int i = 0; i < out_word.length(); i++)
                    {
                        temp += (word.charAt(i) == guess) ? guess : out_word.charAt(i); // "unveils" the correct characters
                    }
                    out_word = temp;
                    System.out.println("Outword: " + out_word);
                }
                else // else not else if
                {
                    System.out.println("Not Included");
                    wrong_guess++;
                }
                num_guess++; // don't need to put this in the if and else
                success = word.equals(out_word);
            }
            if(success) System.out.println("You Won!"); // success
            else System.out.println("You Lost!"); // failure
        }
    

    【讨论】:

      最近更新 更多