大家好,我试图制作一个以数组为参数的类,并返回该数组中的min,max,mean和最频繁的元素。但是,在使该类的实例成为im时出现一个奇怪的错误,说Exception in thread "main" java.lang.NullPointerException at app.trackint.getmean(trackint.java:79)
有人可以帮助我吗?谢谢大家的帮助!
谢谢大家的帮助!
/**
*
* @author User
*/
import java.util.Arrays;
public class trackint{
private int[] array;
public trackint(int[] a){
a = new int[2];
}
public void getmax(int[] array){
// Initialize maximum element
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
System.out.println(max);
}
}
public void getmin(int min){
min = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] < min) {
min = array[i];
}
System.out.println(min);
}
}
public void getmax(int max){
// Initialize maximum element
max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
System.out.println(max);
}
}
public void getmean(){
// Initialize maximum element
float sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
System.out.println( sum / array.length);
}
public void mostFrequent(int n, int[] array) {
// find the max frequency using linear
// traversal
int max_count = 1, res = array[0];
int curr_count = 1;
for (int i = 1; i < n; i++)
{
if (array[i] == array[i - 1])
curr_count++;
else
{
if (curr_count > max_count)
{
max_count = curr_count;
res = array[i - 1];
}
curr_count = 1;
}
}
// If last element is most frequent
if (curr_count > max_count)
{
max_count = curr_count;
res = array[n - 1];
}
System.out.println( res);
}
public static void main(String []args){
int[] array = {1,2,3,4,5};
trackint a = new trackint(array);
a.getmean();
}
}
答案 0 :(得分:0)
问题出在您的构造函数中,
您的构造函数未正确初始化实例变量int []数组,因为该实例变量保持为空,并在此代码array.length处引发NullPointerException,
for (int i = 0; i < array.length; i++) { // here array is null so throws NPException
您需要使您的构造函数像这样
public trackint(int[] a) {
array = a;
}
而不是
public trackint(int[] a) {
a = new int[2];
}
答案 1 :(得分:0)
public trackint(int[] a){
a = new int[2];
}
这正在重新分配a
局部变量。相反,您应该这样做
public trackint(int[] a){
array = a;
}
这会将array
设置为a
的值。
我还没有测试过。因此,如果答案有任何问题,请在下面评论。
答案 2 :(得分:0)
您必须初始化array
:
public trackint(int[] a){
array = a;
}
或
public trackint(int[] a) {
array = new int[a.length];
System.arraycopy(a, 0, array, 0, a.length);
}
或仅将数组传递给getmean函数。