Java 简单计算返回空指针异常。。。为什么?

Java 简单计算返回空指针异常。。。为什么?,java,nullpointerexception,Java,Nullpointerexception,(我是Java新手,请原谅我的无知) 我有一个非常简单的课程: public class Bill { private String Total; private int Tip; private int People; Bill() { Total = "0"; Tip=0; People=0; } Bill (String total, int people, int tip) {

(我是Java新手,请原谅我的无知)

我有一个非常简单的课程:

public class Bill {
    private String Total;
    private int Tip;
    private int People;
    Bill() {
        Total = "0";
        Tip=0;
        People=0;
    }
    Bill (String total, int people, int tip) {
        Total = total;
        Tip = tip;
        People = people;
    }

    //the problem is here somewhere.
    private Double Split = (Double.parseDouble(Total) * ((double)Tip / 100)) / (double)People;

    public String getTotal() {
        return Total;
    }

    public double getSplit() {
        return Split;
    }

    public double getTip() {
        return Tip;
    }

}
当我调用“getSplit()”方法时,运行时会崩溃,出现NullPointer异常:

09-03 19:37:02.609: E/AndroidRuntime(11325): Caused by: java.lang.NullPointerException
09-03 19:37:02.609: E/AndroidRuntime(11325):    at java.lang.StringToReal.parseDouble(StringToReal.java:244)
09-03 19:37:02.609: E/AndroidRuntime(11325):    at java.lang.Double.parseDouble(Double.java:295)
09-03 19:37:02.609: E/AndroidRuntime(11325):    at williamgill.de.helloworld.Bill.<init>(Bill.java:21)
09-03 19:37:02.609: E/AndroidRuntime(11325):    at williamgill.de.helloworld.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:38)
09-0319:37:02.609:E/AndroidRuntime(11325):由以下原因引起:java.lang.NullPointerException
09-03 19:37:02.609:E/AndroidRuntime(11325):位于java.lang.StringToReal.parseDouble(StringToReal.java:244)
09-03 19:37:02.609:E/AndroidRuntime(11325):在java.lang.Double.parseDouble(Double.java:295)
09-03 19:37:02.609:E/AndroidRuntime(11325):在williamgill.de.helloworld.Bill。(Bill.java:21)
09-03 19:37:02.609:E/AndroidRuntime(11325):在williamgill.de.helloworld.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:38)

我似乎在类型转换方面犯了一些明显的错误,但我一辈子都想不出是什么原因。

在这一行执行时

private Double Split = (Double.parseDouble(Total) * ((double)Tip / 100)) / (double)People;
构造函数尚未初始化字段
Total
和其他字段,其默认值为
null
parseDouble()
必须抛出
NullPointerException
如果其参数为
null
(我无法验证这一点,它也可能来自解引用)

声明该字段

private Double Split;
并在构造函数中进行赋值

Bill (String total, int people, int tip) {
    Total = total;
    Tip = tip;
    People = people;
    Split = (Double.parseDouble(Total) * ((double)Tip / 100)) / (double)People;
}

建议:Java非常量实例变量应以小写字母开头。

执行此行时

private Double Split = (Double.parseDouble(Total) * ((double)Tip / 100)) / (double)People;
构造函数尚未初始化字段
Total
和其他字段,其默认值为
null
parseDouble()
必须抛出
NullPointerException
如果其参数为
null
(我无法验证这一点,它也可能来自解引用)

声明该字段

private Double Split;
并在构造函数中进行赋值

Bill (String total, int people, int tip) {
    Total = total;
    Tip = tip;
    People = people;
    Split = (Double.parseDouble(Total) * ((double)Tip / 100)) / (double)People;
}

建议:Java非常量实例变量应该以小写字母开头。

另一个建议:构造函数应该是
public
。根据Java惯例,变量和方法一样,应该以小写字母开头。谢谢-这解决了我的问题。一旦你这样说就完全有道理了……:)再次感谢@威尔吉尔:不客气。请注意注释中给出的建议并遵循Java惯例。说到大写字母,Double和Double之间有区别吗?另一个建议:构造函数应该是
public
。变量,比如方法,根据Java约定,应该以小写字母开头。谢谢-这解决了我的问题。一旦你这样说就完全有道理了……:)再次感谢@威尔吉尔:不客气。请注意注释中给出的建议并遵循Java惯例。说到大写字母,Double和Double之间有区别吗?