数组超出范围的索引错误

时间:2014-02-18 12:53:11

标签: java

我试图找到序列中数字的出现频率。

例如,当序列为:

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");
        }
    }
}  
  

错误:阵营指数以外的阵列

4 个答案:

答案 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");
  }
}

这可能比您的版本慢,但更容易理解。