我已经解决了这个问题,但我一直有例外。谁能告诉我问题出在哪里?
package assingment;
public class frequencyCount {
static void count(int x[]){
System.out.println("ENTERED ARRAY IS ");
for( int i=0; i < x.length; i++)
{
System.out.print(x[i]);
}
int c[] = new int [x.length];
for(int i=0; i<c.length ;i++)
{ c[i] = 0;
}
for(int i=0; i< x.length ;i++){
int m= x[i];
c[m]++;
}
System.out.println("frequency table");
for(int i=0; i< c.length ;i++){
System.out.print(i + " "+ c[i]);
}
}
public static void main(String[] args) {
count(new int []{1,1,5,2,10});
}
}
答案 0 :(得分:0)
您正试图在第3个周期中访问c[m]
m=x[i]
。但是x[2]=5
和c[5]
会导致异常,因为c[]
中只有5个元素(从c[0]
到c[4]
)
答案 1 :(得分:0)
这是因为您错误地分配了空间来正确存储您的计数。你需要的是创建一个数组,其中元素的总数是数组的最大,加上1表示为0.我将假设你的所有数字都是正数事情很简单。因此,您实际上需要首先确定数组中的最大值,然后相应地分配空间。
如果不这样做,当您在数组中指定5
的值时,您只分配了一个大小为5
的数组,因此如果您尝试使用5
进行索引你的数组,当你试图访问数组的第六个位置时,你得到一个OutOfBounds
异常,它不存在。
FWIW,有更聪明的方法可以做到这一点,比如使用HashMap
,但我假设你还没有在Java课程中介绍过更高级的数据结构,你可能需要一个数组解决方案。但是,我完全建议使用HashMap
。
因此,修改代码以先找到最大值,然后相应地进行分配:
package assingment;
public class frequencyCount {
static void count(int x[]){
System.out.println("ENTERED ARRAY IS ");
// NEW - To store maximum
int maxi = -1;
for( int i=0; i < x.length; i++)
{
System.out.println(x[i]);
// Keep checking for the maximum
if (x[i] > maxi)
maxi = x[i];
}
// NEW - modify length to account for maximum
int c[] = new int [maxi+1];
for(int i=0; i<c.length ;i++)
{
c[i] = 0;
}
for(int i=0; i< x.length ;i++){
int m= x[i];
c[m]++;
}
System.out.println("frequency table");
for(int i=0; i< c.length ;i++){
System.out.println(i + " "+ c[i]);
}
}
public static void main(String[] args) {
count(new int []{1,1,5,2,10});
}
}