Java 如何退出嵌套循环并完成程序

Java 如何退出嵌套循环并完成程序,java,arrays,Java,Arrays,我的家庭作业有问题,我遇到了麻烦。我是一个相当新的程序员,处理嵌套循环让我感到困惑。我的程序运行时没有中断;但是,在我输入一个重复的数字之后,我输入的每个数字都不会添加到列表中 任务是: 编写一个输入五个数字的应用程序,每个数字都在10到100之间,包括10和100。读取每个数字时,仅当它不是已读取数字的副本时才显示。规定“最坏情况”,即所有五个数字都不同。使用尽可能小的数组来解决此问题。显示用户输入每个新值后输入的完整唯一值集 import java.util.Scanner; public

我的家庭作业有问题,我遇到了麻烦。我是一个相当新的程序员,处理嵌套循环让我感到困惑。我的程序运行时没有中断;但是,在我输入一个重复的数字之后,我输入的每个数字都不会添加到列表中

任务是: 编写一个输入五个数字的应用程序,每个数字都在10到100之间,包括10和100。读取每个数字时,仅当它不是已读取数字的副本时才显示。规定“最坏情况”,即所有五个数字都不同。使用尽可能小的数组来解决此问题。显示用户输入每个新值后输入的完整唯一值集

import java.util.Scanner;

public class Assignment1 
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int[] array = new int[5];
        int i = 0;
        int input = 0;
        boolean repeat = false;
        int placeHolder = 0;

        while(i < array.length) //While the number of inputs is less than the array length (5) Ask the user to input a number
        {
            System.out.printf("%s%d%s", "Please enter number", (i+1), ": ");
            input = scan.nextInt();

            if((input >= 10) && (input <= 100)) //Determine if the user input is in the range of 10-100
            {
                i++;
                for(int x = 0; x < array.length; x++) //Determine if the user input is a repeat
                {
                    if(input == array[x])
                    {
                        repeat = true;
                        System.out.println(input + " has already been entered.");
                    }
                }
                if(repeat == false) //If the user input isn't a duplicate - add it to the array
                    {
                        array[placeHolder] = input;
                        placeHolder++;
                    }
            }
            else
            {
                System.out.println("Invalid number! Please input a number between 10 and 100 (Inclusive)");
            }

            for(int y = 0; y < i; y++)
            {
                if(array[y] != 0)
                {
                    System.out.print(array[y] + " ");
                }
            }
            System.out.println();
        }

    }
}

这是因为在你插入第一个重复的数字repeat satys true之后,再加上这一段代码,你的repeat变量永远不会重置回false,从而导致循环永远不会退出

若要修复,您可以在循环的每个迭代开始时重置它:

if((input >= 10) && (input <= 100)) {
    repeat = false;  // <--- added here
    i++;
    for(int x = 0; x < array.length; x++) {           
        if(input == array[x]){
            repeat = true;
            System.out.println(input + " has already been entered.");
        }
    }
    if(repeat == false) {
        array[placeHolder] = input;
        placeHolder++;
    }
}
这就是说,它可能不在本学校作业的范围内,但将来您可以使用Set对象使代码更短。此对象将不接受重复的值,因此您可以继续向其中添加数字,直到“满”

不包含重复元素的集合

文件:


另外,你可以看看使用if!如果repeat==false,则改为重复。至少对我来说,通过这种编码风格+一个好的布尔变量名的组合,这在某种程度上使它更容易理解。

在绝大多数情况下,嵌套循环的中断表明存在设计缺陷。并非在所有情况下,因此:

Java有一个break命令,它只执行以下操作:中断循环/块:

public static void main(String[] args){
    for(;;){
        while(){
           break finished;
        }
        if(somecondition){
            break finished;
        }
    }
    finished:
       // here we end up whenever we break out.
}
b简单的返回即可完成此任务:

public static void main(String[] args){
    for(;;){
        while(){
           return;
        }
        // ...
        if(somecondition){
           return;
        }
    }
}
可能采用另一种方法:

boolean worker(){
    for(;;){
        while(){
           return true;
        }
        // ...
        if(somecondition){
           return false;
        }
    }
}

public static void main(String[] args){
    boolean result = worker();
    //do some finalizing or evaluate the result.
}
c.退出该计划:

public static void main(String[] args){
    for(;;){
        while(){
           System.extit(0); //success
        }
        // ...
        if(somecondition){
           System.extit(1); //some error
        }
    }
}
另一种方法是例外——它总是表示错误

你选择什么取决于你自己

语法分析器中经常出现的语法错误

如果你提供了一个实际的函数,b是很常见的。如果你对程序的一部分进行编码,b是很自然的:一旦你得到了结果,你就会返回

c在应用程序中很常见,可能是一种特殊的退出方法,它可以进行一些额外的清理

在你的情况下,选择取决于你,也许你会重新考虑,如果你真的想打破文本听起来不象它

备注:这是对标题中问题的一个直接而一般的回答:如何退出嵌套循环并完成程序

一旦repeat设置为true,它将永远不会被设置为false,因为在代码中的任何地方都没有这样做的语句。-要修复,请移动boolean repeat=false;在if语句中,靠近i++;。