我试图找到序列中数字的出现频率。
例如,当序列为:
时1, 1, 3, 4
输出应该是
1 found 3 times
, 3 found 1 times
, 4 found 1 time
等等。我有以下代码
import java.util.*;
class fre {
public static void main(String a[]) {
int c = a.length;
int d[] = new int[c];
int num = 0;
for (int p = 0; p < c; p++)
d[p] = Integer.parseInt(a[p]);
for (int z : d)
System.out.println(z);
for (int i = 0; i < c - 1; i++) // FROM THIS LINE ERROR IS THROWN
{
for (int t = 0; t < c - 1; i++) {
if (d[i] == d[t]) {
num++;
}
}
System.out.println("the element" + i + "found" + num + "times");
}
}
}
错误:阵营指数以外的阵列
答案 0 :(得分:2)
不应该
for (int t = 0; t < c - 1; i++)
是
for (int t = 0; t < c - 1; t++)
您在第二个循环中再次递增i
。
答案 1 :(得分:0)
好吧,首先,你在内循环中增加i而不是t。 改变这一点,该计划似乎有效。
将输出线更改为sth。喜欢
System.out.println("the element " + d[i] + " found " + num + " times");
使其可读。
不是说没有更好的办法解决这个问题......
确定 本诺
答案 2 :(得分:0)
a
是一个包含所有命令行参数的数组。您正在使用a.length
来确定给定的命令行参数量。我想你可能想要通过命令行参数传递数组的长度。如果我是正确的,您应该使用int c = a[0];
之类的东西来获取第一个命令行参数。当然,没有任何检查,这不是好的风格,但如果我开始,我必须重写你的整个代码;)
答案 3 :(得分:0)
你的例子是错误的。
未测试:
public static void main(String args[])
{
Map<Integer, Integer> result = new HashMap<>();
for (String s : args) {
Integer currentNumber = Integer.parseInt(s);
// don't forget error handling if s is not a number
Integer currentCount = result.get(currentNumber);
if (currentCount == null) { // you could also check with result.containsKey(..)
currentCount = 0;
}
result.put(currentNumber, currentCount + 1);
}
for (Map.Entry<Integer, Integer> entry : result) {
System.out.println("The element: " + entry.getKey() + " found " + entry.getValue() + " times");
}
}
这可能比您的版本慢,但更容易理解。