我有一项任务,我一整天都在努力,我完成了它,并且它有效,但不是我的老师想要它的方式,我已经绞尽脑汁几个小时没有运气
这是作业问题
“编写一个程序,输入5个,每个程序在10到100之间(包括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
}
但是我的老师希望输出看起来像这样,最后没有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
}
我一直在努力工作几个小时而没有任何运气。
感谢任何帮助。
谢谢。
欢呼声。
答案 0 :(得分:1)
您只需在输出循环中添加if条件。
for (int i =0; i < x; i++) {
if(sid[i]!=0)
System.out.print(sid[i] +" ");
}
答案 1 :(得分:0)
打印答案时检查“0”并忽略它们。或者当你发现当前的数字是重复时减少x。
for (int i = 0; i < sid.length; i++)
{ if (sid[i] == num)
digit = true;
x--;
}
或
for (int i =0; i < x; i++) {
if(sid[i]!=0)
System.out.print(sid[i] +" ");
}
如果没有必要使用数组,您可以使用Sets
。那会更容易。
答案 2 :(得分:0)
将x增量(x++
)放入if (!digit)
if (!digit) {
sid[count] = num;
count++;
x++;
}
从下面的if语句中删除x增量(x++
)
if ((num >= 10) && (num <= 100)) {
boolean digit = false;
x++;
}
这样,消除了零,无论尝试了多少次重复,程序仍然可以运行。