0

让这个类里面有一个名为 Calc.java 的类有一个名为 Min 的方法

  public int Min(int one, int two)
    {
        return one - two ;
    }

现在在名为 First.java 的主类中:

package first;
public class First {
    public static void main(String[] args) {
        Calc y [] = new Calc[3];

       System.out.println(y[1].Min(5, 3));
    }
}

运行时:

线程“main”中的异常 java.lang.NullPointerException at first.First.main(First.java:9) Java 结果:1 BUILD SUCCESSFUL(总时间:0 秒)

Netbeans 显示提示:不平衡读/写与数组

我不知道怎么了!谢谢...

4

5 回答 5

1

您必须在使用 calc 对象之前对其进行初始化。初始化数组本身是不够的,但您必须像这样初始化数组中的 calc 对象:

calc[1]=new calc();
于 2013-07-14T20:15:33.210 回答
1

在你的主要方法的第一行,当你在做

Calc y [] = new Calc[3];

数组的值将是,

y[0]=null, y[1]=null, y[2]=null

为什么?

因为就像在创建整数时一样,int[] 数组使用默认值(即零)进行初始化,类似地,在创建对象数组时,默认情况下将其初始化为 null。

现在,在对数组 Item 进行任何操作之前,您必须创建对象。

所以你应该这样做,

y[1] = new Calc();

在调用 Min 方法之前。

我希望这清楚了。

于 2013-07-14T20:54:52.883 回答
1

y[1]为空,你必须初始化你的数组:

public static void main(String[] args) {

   Calc y[] = new Calc[3];
   for(int i=0;i<y.legnth;i++){
       y[i] = new Calc();
   }
   System.out.println(y[1].Min(5, 3));
}

在 Java 方法中也是用小写字母开头的。您可能对此链接感兴趣

于 2013-07-14T20:13:43.767 回答
0

你为什么要在那里创建一个数组?真的需要吗?如果确实需要,您需要先用Calc对象填充该数组,然后再调用任何实例方法。


但是,您的方法似乎应该是public static,因为Calc该类只是一个实用程序类,并且Min方法根本不与任何实例相关联,而只是与该类相关联。所以,修改它:

public static int min(int one, int two)

然后你可以在类名上调用这个方法:

Calc.min(5, 3);

不需要该类的不同实例。另请查看具有类似实用方法的类的API 。Math你会明白我在说什么。

此外,您的min方法似乎没有做它应该做的事情。例如,y[i].Min(5, 3)当前将返回2. 是不是很奇怪?它根本没有返回传递参数的最小值。您应该将return语句更改为:

return one < two ? one : two;

如果您理解这一点,您应该进一步扩展它以考虑相等的数字。

于 2013-07-14T20:14:46.150 回答
0
Calc y [] = new Calc[3];
for (int i = 0; i< 3;i++)
{
    y[i] = new Calc();
}
于 2013-07-14T20:16:21.003 回答