线程中的Java wierd错误异常;“主要”;app.trackint.getmean处的java.lang.NullPointerException(trackint.java:79)
嗨,我正在尝试创建一个类,该类将数组作为参数,并返回该数组中的min、max、mean和most-frequency元素。然而,当我创建一个类的实例时,我得到一个wierd错误,在app.trackint.getmean(trackint.java:79)的线程“main”java.lang.NullPointerException中说线程中的Java wierd错误异常;“主要”;app.trackint.getmean处的java.lang.NullPointerException(trackint.java:79),java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,嗨,我正在尝试创建一个类,该类将数组作为参数,并返回该数组中的min、max、mean和most-frequency元素。然而,当我创建一个类的实例时,我得到一个wierd错误,在app.trackint.getmean(trackint.java:79)的线程“main”java.lang.NullPointerException中说异常有人能帮我吗?谢谢大家的帮助!!! 谢谢大家的帮助 /** * * @author User */ import java.util.Arrays;
异常
有人能帮我吗?谢谢大家的帮助!!!
谢谢大家的帮助
/**
*
* @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();
}
}
/**
*
*@author用户
*/
导入java.util.array;
公共类trackint{
私有int[]数组;
公共轨道int(int[]a){
a=新整数[2];
}
公共void getmax(int[]数组){
//初始化最大元素
int max=数组[0];
for(int i=1;imax){
max=数组[i];
}
系统输出打印项次(最大值);
}
}
公共void getmin(int min){
最小值=数组[0];
for(int i=1;imax){
max=数组[i];
}
系统输出打印项次(最大值);
}
}
公共无效getmean(){
//初始化最大元素
浮点数和=0;
for(int i=0;i最大计数)
{
最大计数=当前计数;
res=数组[i-1];
}
当前计数=1;
}
}
//如果最后一个元素是最频繁的
如果(当前计数>最大计数)
{
最大计数=当前计数;
res=数组[n-1];
}
系统输出打印项次(res);
}
公共静态void main(字符串[]args){
int[]数组={1,2,3,4,5};
trackint a=新的trackint(数组);
a、 getmean();
}
}
问题出在您的构造函数中
您的构造函数没有正确初始化实例变量int[]数组,因此它将保持null,并在此代码array.length处抛出NullPointerException
for (int i = 0; i < array.length; i++) { // here array is null so throws NPException
而不是
public trackint(int[] a) {
a = new int[2];
}
这是重新分配a
局部变量。相反,你应该这样做
public trackint(int[] a){
array = a;
}
它将array
设置为a
的值
我还没有测试过这个。因此,如果您在回答中遇到任何问题,请在下面进行评论。您必须初始化
数组
:
public trackint(int[] a){
array = a;
}
或
或者将数组传递给getmean函数。注意java命名约定。类名应以大写字符开头。方法名称中使用驼峰大小写1)请参见&2)使用缩进代码行和代码块的逻辑一致形式。缩进的目的是使代码的流程更易于遵循!3) 在源代码中只需要一行空白就可以了。
{
之后或}
之前的空行通常也是多余的。4) 请学习常见的Java命名法(命名约定-例如,…EachWordUpperCaseClass
,firstWordLowerCaseMethod()
,firstWordLowerCaseAttribute
,除非它是一个大写常量
),并始终如一地使用它。
public trackint(int[] a){
array = a;
}
public trackint(int[] a){
array = a;
}
public trackint(int[] a) {
array = new int[a.length];
System.arraycopy(a, 0, array, 0, a.length);
}