我有一个作业,我一整天都在做,我完成了它,它很有效,但不是我老师想要的方式,我已经绞尽脑汁了几个小时,没有任何运气
这是作业题
写一个程序,输入5个,每个值在10和100之间,当我读到的每个数字,只有当它不是一个重复的已经读过的数字时才显示它,为“最坏的情况”,其中所有五个数字都不一样,使用尽可能小的数组来解决这个问题。在用户输入每个新值后,显示输入的唯一值的完整集合。”
这是我写的代码
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int sid[] = new int[5];
int count = 0;
int x = 0;
int num = 0;
while (x < sid.length)
{
System.out.println("Enter number: ");
num = input.nextInt();
if ((num >= 10) && (num <= 100)) {
boolean digit = false;
x++;
for (int i = 0; i < sid.length; i++)
{ if (sid[i] == num)
digit = true;
}
if (!digit) {
sid[count] = num;
count++;
}
else
System.out.printf("the number was entered before \n");
}
else
System.out.println("number must be between 10 and 100");
for (int i =0; i < x; i++) {
System.out.print(sid[i] +" ");
}
System.out.println();
}
}
}
我的问题是输出是这样的
{
Enter number:
11
11
Enter number:
21
11 21
Enter number:
34
11 21 34
Enter number:
11
the number was entered before
11 21 34 0
Enter number:
44
11 21 34 44 0
}
但是我的老师希望输出也是这样的,没有结尾,也没有将数组sid的值从sid[5]更改为sid[4]
{
Enter number:
11
11
Enter number:
21
11 21
Enter number:
34
11 21 34
Enter number:
11
the number was entered before
11 21 34
Enter number:
44
11 21 34 44
}
我试了好几个小时都没成功。
任何帮助都是赞赏的。
谢谢你。
干杯。
4条答案
按热度按时间oxcyiej71#
您只需在输出循环中添加一个if条件。
okxuctiv2#
当你打印答案时,检查“0”并忽略它们。否则,当你发现当前的数字是重复的时,就减少x。
或
如果不需要使用数组,可以使用
Sets
。那就容易多了。hmmo2u0o3#
将x增量(
x++
)放入if (!digit)
从下面的if语句中删除x增量(
x++
)这样零就被消除了,不管尝试了多少次重复,程序仍然运行。
gcxthw6b4#