我正在编写一个程序,用于统计输入数组中整数的出现次数。例如,如果您键入了1 1 1 1 2 1 3 5 2 3,则程序将打印不同数字及其出现次数,如下所示:
1出现了5次, 2出现了2次, 3出现了2次, 5出现了1次。
除了一个问题外,程序已经接近完成,我无法解决:
我遇到的问题是,无论'num'的当前值是多少,'count'总是只打印出1,而且问题不在于计算出现次数的方法,因为当你在变量位置输入数字时,值就会改变。
有没有办法可以改变这种情况,使其正确地打印出现次数呢?还是我应该尝试其他方法? 而且,解决方案越简单越好,因为我还没有超过一维数组。
谢谢您的帮助!
1出现了5次, 2出现了2次, 3出现了2次, 5出现了1次。
除了一个问题外,程序已经接近完成,我无法解决:
import java.util.Scanner;
import java.util.Arrays;
public class CountOccurrences
{
public static void main (String [] args)
{
Scanner scan = new Scanner (System.in);
final int MAX_NUM = 10;
final int MAX_VALUE = 100;
int [] numList;
int num;
int numCount;
int [] occurrences;
int count[];
String end;
numList = new int [MAX_NUM];
occurrences = new int [MAX_NUM];
count = new int [MAX_NUM];
do
{
System.out.print ("Enter 10 integers between 1 and 100: ");
for (num = 0; num < MAX_NUM; num++)
{
numList[num] = scan.nextInt();
}
Arrays.sort(numList);
count = occurrences (numList);
System.out.println();
for (num = 0; num < MAX_NUM; num++)
{
if (num == 0)
{
if (count[num] <= 1)
System.out.println (numList[num] + " occurs " + count[num] + " time");
if (count[num] > 1)
System.out.println (numList[num] + " occurs " + count[num] + " times");
}
if (num > 0 && numList[num] != numList[num - 1])
{
if (count[num] <= 1)
System.out.println (numList[num] + " occurs " + count[num] + " time");
if (count[num] > 1)
System.out.println (numList[num] + " occurs " + count[num] + " times");
}
}
System.out.print ("\nContinue? <y/n> ");
end = scan.next();
} while (!end.equalsIgnoreCase("n"));
}
public static int [] occurrences (int [] list)
{
final int MAX_VALUE = 100;
int num;
int [] countNum = new int [MAX_VALUE];
int [] counts = new int [MAX_VALUE];
for (num = 0; num < list.length; num++)
{
counts[num] = countNum[list[num]] += 1;
}
return counts;
}
}
我遇到的问题是,无论'num'的当前值是多少,'count'总是只打印出1,而且问题不在于计算出现次数的方法,因为当你在变量位置输入数字时,值就会改变。
有没有办法可以改变这种情况,使其正确地打印出现次数呢?还是我应该尝试其他方法? 而且,解决方案越简单越好,因为我还没有超过一维数组。
谢谢您的帮助!
counts[num] = countNum[list[num]] += 1;
这一行并不是你想象中的那样。它在数组中移动,将数字的计数放在单独的索引中。例如,对于你当前的输入,counts
数组的值为[1, 2, 3, 4, 5, 1, 2, 1, 2, 1, ... 0]
。第一个[1, 2, 3, 4, 5
是因为你的数组中有5个1
,接下来的1, 2
是因为你的数组中有2个2
,以此类推。你需要重新编写你的occurrences
函数。本来可以把这个作为答案留下,但问题已经关闭了。 - Shadow