我正在编写一个程序,我在其中创建一个包含0到20之间随机整数元素的100个整数元素的数组。我被告知编写一个方法来计算每个值0到20的生成次数。我试图编写这部分代码,但没有任何工作。有人可以帮我解决我做错了什么吗?这是我一直在研究的代码。
public static void arrayCounter()
{
int[] counter = new int[21];
for (int x = 0; x < counter.length; x++)
{
for (int i = 0; i < randomArray.length; i++)
{
if (i == randomArray[x])
counter[x]++;
}
System.out.println("Element " + x + " : " + counter[x] + " times");
}
}
答案 0 :(得分:1)
你在想这个,你不需要一个嵌套循环来访问数组的每个元素,你只需要一个索引。
public static int[] count(int[] array, int maxValue) {
int[] count = new int[maxValue + 1];
// for each value.
for (int n : array) count[n]++; // increment the counter for that value.
return count;
}
你可以用
来调用它Random rand = new Random();
int[] array = new int[100];
for (int i = 0; i < array.length; i++) array[i] = rand.nextInt(21);
int[] count = count(array, 20);
for (int i = 0; i < count.length; i++)
System.out.println(i + ": " + count[i]);
在此处运行http://ideone.com/utSNd3打印
0: 5
1: 5
2: 4
3: 6
4: 4
5: 9
6: 5
7: 9
8: 1
9: 3
10: 4
11: 11
12: 2
13: 6
14: 1
15: 6
16: 5
17: 3
18: 4
19: 4
20: 3
答案 1 :(得分:1)
你应该试试
if (x == randomArray[i])
而不是
if (i == randomArray[x])
另一种解决方案: 停止使用数组。 如果您使用Java 8或使用Java 6+的集合,则可以使用流,这应该可行:
Set<T> mySet = new HashSet<T>(Arrays.asList(someArray));
int occurrences = Collections.frequency(mySet, x);
只需添加一个循环来测试x
的每个值答案 2 :(得分:0)
尝试像这样创建一个变量int count
:
int count =0;
for (int x = 0; x < counter.length; x++)
{
for (int i = 0; i < randomArray.length; i++)
{
if (randomArray[i] == randomArray[x])
count++;
}
}
System.out.println("Element " + x + " : " + count + " times");
答案 3 :(得分:0)
另一个更动态的解决方案可能是使用array
来确定出现哪个值的频率。它基本上与@PeterLawray使用的原理相同,但不是使用带有定义值的索引的key
,而是首先需要知道数组的最大值,此解决方案确实使用{{ 1 {} map
来识别每个值。
public static void main(String[] args) {
int[] testArray = {0, 1, 1, 3, 4, 15, 1, 2, 3, 5};
count(testArray);
}
public static void count(int[] array) {
Map<Integer, Integer> counter = new HashMap<Integer, Integer>();
for(int i : array) {
// If the value was already found, increase it´s occurence,
// otherwise the value occured once yet, so we put 1 in there
counter.put(i, counter.get(i) == null ? 1 : counter.get(i) + 1 );
}
for(Entry<Integer, Integer> entry : counter.entrySet()) {
System.out.println("The value " + entry.getKey() + " appears " + entry.getValue() + " times");
}
}