我的家庭作业有问题,我碰壁了。我是一个相当新的程序员,通过嵌套循环工作使我感到困惑。我的程序正在运行,没有中断;但是,输入重复的数字后,我输入的每个数字都不会添加到列表中。
任务是: “编写一个应用程序,该应用程序输入五个数字,每个数字在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();
}
}
}
答案 0 :(得分:0)
您的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
对象来简化代码。该对象将不接受重复的值,因此您可以继续向其中添加数字,直到“满”为止。
不包含重复元素的集合
文档:https://docs.oracle.com/javase/7/docs/api/java/util/Set.html
此外,您可以考虑使用if(!repeat)
而不是if(repeat==false)
。至少对我来说,结合了这种编码风格和良好的布尔变量名称,使它更易于理解。
答案 1 :(得分:0)
在大多数情况下,嵌套循环的“中断”表示设计缺陷。并非在每种情况下都如此,所以:
a)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
}
}
}
另一种方法是异常-总是表示错误。
您选择什么取决于。
a)通常在解析器中找到
b)非常普遍,如果您提供了一个实际功能(对程序的一部分进行编码就很自然:一旦得到结果,您就返回)
c)在应用程序中很常见,可能包装了特殊的退出方法,该方法可以进行一些额外的清理。
在您的情况下,选择权取决于您,也许您真的想突破时重新考虑(文本听起来不像这样)。
(备注:这是标题为“如何退出嵌套循环并完成程序”的问题的简单而一般的答案)
答案 2 :(得分:-1)