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