如何让break命令返回到我的每个循环

时间:2017-03-19 00:47:53

标签: java

我知道我早些时候问了类似这样的问题(虽然我想出来了)

 *while(!newWord.equalsIgnoreCase(guess))
                            forloop:
                        { while(!newWord.equalsIgnoreCase(guess))


                    for ( String a : spaces.split("\\s"))
                    {

                        count++;

                        int x = Integer.valueOf(a);
                        if (x > guess.length())
                        {
                            System.out.println("Your input is not valid, try again");  
                            break innerloop;
                        }
                        if (Character.toLowerCase(newWord.charAt(x)) == letterInput.charAt(0)) 
                        {
                            //System.out.println("Guess is correct for position " + x);
                            guess = guess.substring(0, x) + letterInput + guess.substring(x + 1, guess.length());
                        }
                        if (Character.toLowerCase(newWord.charAt(x)) != letterInput.charAt(0))
                        {

                            if(count < spaces.split("\\s").length - 1)
                            {
                            break forloop;
                            }
                        }

                            if (count == spaces.split("\\s").length)

                            guesses= guesses - 1;
                            System.out.println("Your letter was not found in spaces you provided");
                            System.out.println("Guesses Remaining: " + guesses);
                            break;
                        }*

但现在我在for循环之后的第三个if语句处的break命令只会让我回到我整个代码开头的循环

*while(!newWord.equalsIgnoreCase(guess))
                    innerloop:
                { while(true)
                    {
                        System.out.println("Please enter the letter you want to guess");
                        String letterInput = keyboard.next();
                        letterInput = Character.toString(letterInput.charAt(0));

                        if(!Character.isLetter(letterInput.charAt(0)))
                        {
                            System.out.println("Your input is not valid, try again");
                            break;
                        }
                        if(letterInput.equalsIgnoreCase("solve"))
                        {
                            System.out.println("Please solve the answer:");
                            String userSolve = keyboard.next();
                            if (!userSolve.equalsIgnoreCase(newWord))
                            {
                                System.out.println("That is not the secret word");
                                guesses = guesses - 1;
                                System.out.println("Guesses remaining: " + guesses);
                            }
                            else
                            {
                                System.out.println("You win!");
                                System.out.println("You have guessed the word! Congratulations");
                                System.out.println("Would you like to play again? Yes(y) or No (n)");
                                response = keyboard.next();
                                if (response.equalsIgnoreCase("n"))
                                {
                                    System.exit(0);
                                }
                                if(response.equalsIgnoreCase("y"))
                                {
                                    continue;
                                }

正如你所看到的,我在循环上放置了标签,我特意想回去。我的休息目前正在回到我的内圈标签但是我希望它能带我回到我的forloop标签。我到底该怎么做?我尝试使用while循环包装for循环,因为这对我上次有用,但它在这里不起作用。这是我的整个代码供参考,我很难道歉,如果它很难读,我只在2个月前开始编码。

package e;

import java.util.Scanner;

public class HangmanBeta{
private static final boolean testingMode = true;
public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    keyboard.useDelimiter("\\n"); 
    while (true) {
        System.out.println("Enter your difficulty: Easy (e), Intermediate (i), or Hard (h)");
        String diff = keyboard.next();
        int amountOfSpaces = 0;
        String response = "";
        String guess = "";
        String newGuess = "";
        String s = "";
        int count = 0;
        String newWord = "loops";//RandomWord.newWord();

        int guesses = 0;
        for (int i = 0; i < newWord.length(); i++) {
            guess = newWord.replaceAll("[^#]", "-");
        }
        if ((diff.equalsIgnoreCase("e")) || (diff.equalsIgnoreCase("i")) || (diff.equalsIgnoreCase("h"))) {
            if (diff.equalsIgnoreCase("e"))
            {
                guesses = 15;
            }
            if(diff.equalsIgnoreCase("i"))
            {
                guesses = 12;
            }
            if(diff.equalsIgnoreCase("h"))
            {
                guesses = 15;
            }
            if (testingMode == true)
            {
                System.out.println("The secret word is:" + " " + newWord);
            }
            System.out.println("The word is:" + " " + guess);

                while(!newWord.equalsIgnoreCase(guess))
                    innerloop:
                { while(true)
                    {
                        System.out.println("Please enter the letter you want to guess");
                        String letterInput = keyboard.next();
                        letterInput = Character.toString(letterInput.charAt(0));

                        if(!Character.isLetter(letterInput.charAt(0)))
                        {
                            System.out.println("Your input is not valid, try again");
                            break;
                        }
                        if(letterInput.equalsIgnoreCase("solve"))
                        {
                            System.out.println("Please solve the answer:");
                            String userSolve = keyboard.next();
                            if (!userSolve.equalsIgnoreCase(newWord))
                            {
                                System.out.println("That is not the secret word");
                                guesses = guesses - 1;
                                System.out.println("Guesses remaining: " + guesses);
                            }
                            else
                            {
                                System.out.println("You win!");
                                System.out.println("You have guessed the word! Congratulations");
                                System.out.println("Would you like to play again? Yes(y) or No (n)");
                                response = keyboard.next();
                                if (response.equalsIgnoreCase("n"))
                                {
                                    System.exit(0);
                                }
                                if(response.equalsIgnoreCase("y"))
                                {
                                    continue;
                                }
                            }
                        }
                        System.out.println("Please enter the spaces you want to check (seperated by spaces)");
                        String spaces = keyboard.next();
                        amountOfSpaces = spaces.length();
                        if (diff.equalsIgnoreCase("e"))
                        {
                            if(amountOfSpaces != 7)
                            {
                                System.out.println("Your input is not valid, try again");
                                break innerloop;
                            }

                        }
                        if (diff.equalsIgnoreCase("i"))
                        {
                            if(amountOfSpaces != 5)
                            {
                                System.out.println("Your input is not valid, try again");   
                                break innerloop;
                            }
                        }

                        if (diff.equalsIgnoreCase("h"))
                        {
                            if(amountOfSpaces != 3)
                            {
                                System.out.println("Your input is not valid, try again");
                                break innerloop;
                            }
                        {

                            while(!newWord.equalsIgnoreCase(guess))
                                forloop:
                            { while(!newWord.equalsIgnoreCase(guess))


                        for ( String a : spaces.split("\\s"))
                        {

                            count++;

                            int x = Integer.valueOf(a);
                            if (x > guess.length())
                            {
                                System.out.println("Your input is not valid, try again");
                                break innerloop;
                            }

                            if (Character.toLowerCase(newWord.charAt(x)) == letterInput.charAt(0)) 
                            {
                                //System.out.println("Guess is correct for position " + x);
                                guess = guess.substring(0, x) + letterInput + guess.substring(x + 1, guess.length());

                            }
                            if (Character.toLowerCase(newWord.charAt(x)) != letterInput.charAt(0))
                            {

                                if(count < spaces.split("\\s").length - 1)
                                {
                                break forloop;
                                }


                                if (count == spaces.split("\\s").length)

                                guesses= guesses - 1;
                                System.out.println("Your letter was not found in spaces you provided");
                                System.out.println("Guesses Remaining: " + guesses);
                                break;
                            }

                            if (guesses == 0)
                            {
                                System.out.println("You have failed to guess the word....:(");
                                System.out.print("Would you like to play again? Yes(y) or No(n)");
                                response = keyboard.next();
                                if (response.equalsIgnoreCase("n"))
                                {
                                    System.exit(0);
                                }
                                if(response.equalsIgnoreCase("y"))
                                {
                                    continue;
                                }
                            } }

                            if (newWord.equalsIgnoreCase(guess))
                            {
                                System.out.println("You win!");
                                System.out.println("You have guessed the word! Congratulations");
                                System.out.println("Would you like to play again? Yes(y) or No (n)");
                                response = keyboard.next();
                                if (response.equalsIgnoreCase("n"))
                                {
                                    System.exit(0);
                                }
                                if (response.equalsIgnoreCase("y"))
                                {
                                    continue;
                                }

                            }
                        }   
                            System.out.println("Your Guess is in the word");
                        }
                        if(guesses == guesses - 1)
                        {
                            System.out.println("Your letter was not found in spaces you provided");
                            System.out.println("Guesses Remaining: " + guesses);
                            break innerloop;

                        //System.out.print(spaces.split("\\s").length);
                        //System.out.println("Your Guess is in the word");
                        //System.out.println();
                        //System.out.println("Updated word " + guess);
                        //System.out.println("Guesses Remaining: " + guesses);
}
                        }
                } 

        }
    }
}

}
}

1 个答案:

答案 0 :(得分:0)

  

...但是现在我在for循环之后的第三个if语句处的break命令只是让我回到了整个代码开头的循环。

实际上,没有。

break 永远不会带你回来。它总是带你前进。在这种情况下,它会带你前进 块后面带有你破坏的标签。例如:

while (....) {
    label: while (...) {
        ...
        if (...) break label;
        ...
    }
    // Breaks to HERE
}

然后你可以回去,因为你去过的环境中有些东西。但它是上下文,而不是break

不幸的是,我无法弄清楚如何将此应用到您的示例中,因为1)您无法解释代码应该执行的操作,2)很难确定哪个版本你指的是,3)代码不可编译,4)可读性问题让我头疼。

因此,除非你能弄清楚如何使你的代码更具可读性,否则这就是我能给你的所有帮助。