查找ArrayList Java的模式

时间:2013-12-27 22:29:54

标签: java arraylist mode

过去几个小时左右,我一直试图找出ArrayList的模式。在程序中,您还可以找到最大值,最小值,中值和平均值。我已经弄清楚了所有这些但我无法进行模式。我一直在IndexOutOfBoundsException。到目前为止,这是我的代码:

public String getMode(){
  int mode = 0;
  int count = 0;

  for ( int i : file1 ){
    int x = file1.get(i);
    int tempCount = 1;

    for(int e : file1){
      int x2 = file1.get(e);

      if( x == x2)
        tempCount++;

      if( tempCount > count){
        count = tempCount;
        mode = x;
      }
    }
  }

  return ("The mode is " + mode);
}

我得到的错误是:

java.lang.IndexOutOfBoundsException: Index: 181, Size: 108
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at FunNumber2.getMode(FunNumber2.java:75)
at FunNumber2Tester.main(FunNumber2Tester.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

1 个答案:

答案 0 :(得分:2)

这是你的问题

for ( int i : file1 ){

将其更改为

for ( int i = 0; i< file1.size() ; i++ ){

此语法

for ( int i : file1 ){

给出了file1的迭代值,这意味着如果file1 = List([4,5,6])那么在循环i == 4 not 0的第一次迭代中。

显然这也适用于第二个循环。

或者你可以改变

for ( int i : file1 ){
  int x = file1.get(i);

for ( int i : file1 ){
  int x = i;

它会解决你的问题。 希望有所帮助。