我有这个程序接受用户输入并显示每个整数输入的次数。我几乎已经拍了下来,但是需要另一个循环来省略显示的0的出现。换句话说,任何带有0的数字都无法读取,也出于某些原因我在程序中从同一个数字得到两个输出。例如,如果我输入3,3
,我将获得3 occurs 1 time
和3 occurs 2 times
作为输出。 2次正确,第1次不正确。
public class Six_Three {
public static void main(String[] args) {
Scanner input = new Scanner (System.in);
System.out.print("enter integers between 1 and 100: ");
int[] num = new int[100];
int data = input.nextInt();
while ((data = input.nextInt()) != 0) {
num[data]++;
}
for (int i = 1; i < 100; ++i) {
if (num[i] > 0)
System.out.println(i + " occurs " + num[i] + " times ");
}
}
答案 0 :(得分:3)
你需要两个独立的循环:第一个收集信息,第二个打印结果:
int data = 0;
while ((data = input.nextInt()) != 0)
{
num[data]++;
}
for (int i = 0; i < 100; ++i)
{
if (num[i] != 0) { /* print num[i] */ }
}
答案 1 :(得分:1)
每次读取整数时都打印输出。您的程序按预期运行。
要获得所需内容,您需要在生成任何输出之前扫描所有输入。
请改为尝试:
while (data != 0){
data = input.nextInt();
num[data]++;
}
for (int i = 1; i < 100; ++i) { // your version is 0...99, else array index out of bounds
if (num[i] > 0)
System.out.println(i + " occurs " + num[i] + " times ");
}
答案 2 :(得分:1)
在while循环后循环遍历num
数组以打印计数。
for (int index = 0; index < num.length; index++) {
if (num[index] != 0)
System.out.println(data + " occurs " + num[data] + " time(s).");
}
答案 3 :(得分:0)
您编写它的方式最后一个数字必须为0才能使扫描停止。检查是否有另一个可用的int并将其用作扫描循环的条件可能是个好主意。这样你的程序就可以接受任何整数。
while (input.hasNextInt()){
num[input.nextInt()]++;
}
答案 4 :(得分:-1)
这很简单
int data = 0;
int[] num = new int[100];
int i = 0;
while (i < num.length) {
if ((data = input.nextInt()) == 0)
break;
num[i] = data;
i++;
}
for (i = 0; i < 100; ++i) {
int times = 0;
if (num[i] != 0) {
for (int j = 0; j < 100; j++) {
if (num[j] == 0) {
break;
} else if (num[i] == num[j]) {
times++;
}
}
System.out.println(num[i] + " occurs " + times + " times ");
} else {
break;
}
}