Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有数组java.lang.NullPointerException的Null_Java_Nullpointerexception - Fatal编程技术网

带有数组java.lang.NullPointerException的Null

带有数组java.lang.NullPointerException的Null,java,nullpointerexception,Java,Nullpointerexception,该程序向用户索要账单,然后询问他们为此支付了多少钱,然后计算并打印出零钱。我省略了第二部分,因为我的问题是计算第二个for循环中的变化。根据用户输入,在不同的一角硬币、四分之一硬币、镍币线等上出现的错误是java.lang.NullPointerException。我查过这个问题,人们说是程序试图获取一个null的值,但我不知道怎么做,因为我正在更新 提前谢谢你的帮助 Scanner s = new Scanner(System.in); Double[] Bill = new

该程序向用户索要账单,然后询问他们为此支付了多少钱,然后计算并打印出零钱。我省略了第二部分,因为我的问题是计算第二个for循环中的变化。根据用户输入,在不同的一角硬币、四分之一硬币、镍币线等上出现的错误是
java.lang.NullPointerException
。我查过这个问题,人们说是程序试图获取一个
null
的值,但我不知道怎么做,因为我正在更新

提前谢谢你的帮助

    Scanner s = new Scanner(System.in);

    Double[] Bill = new Double[5];
    Double[] Paid = new Double[5];

    for (int i = 0; i < 1; i++) {
        int j = i + 1;
        System.out.print("Enter bill " + j + ": ");
        Bill[i] = Double.parseDouble(s.nextLine());

        System.out.print("Enter amount paid for bill " + j + ": ");
        Paid[i] = Double.parseDouble(s.nextLine())
        System.out.println("");        
    }

    Integer[] Dollars = new Integer[5];
    Integer[] Quarters = new Integer[5];
    Integer[] Dimes = new Integer[5];
    Integer[] Nickels = new Integer[5];
    Integer[] Pennies = new Integer[5];   
    for (int i = 0; i < 1; i++){
       Double Change = Paid[i] - Bill[i];

       while (Change > 0){
           if (Change > 1){
               Change = Change - 1;
               Dollars[i] = Dollars[i] + 1;   
           }
           else if (Change > 0.25){
               Change = Change - 0.25;
               Quarters[i] = Quarters[i] + 1;
           }
           else if (Change > .1){
               Change = Change - 0.1;
               Dimes[i] = Dimes[i] + 1;
           }
           else if (Change > .05){
               Change = Change - 0.05;
               Nickels[i] = Nickels[i] + 1;
           }
           else if (Change > 0){
               Change = Change = 0.01;
               Pennies[i] = Pennies[i] + 1;
           }
       }
    }
Scanner s=新的扫描仪(System.in);
Double[]账单=新的Double[5];
双倍[]支付=新的双倍[5];
对于(int i=0;i<1;i++){
int j=i+1;
系统输出打印(“输入票据”+j+“:”);
Bill[i]=Double.parseDouble(s.nextLine());
系统输出打印(“输入票据支付金额”+j+:”;
Paid[i]=Double.parseDouble(s.nextLine())
System.out.println(“”);
}
整数[]美元=新整数[5];
整数[]四分之一=新整数[5];
整数[]Dimes=新整数[5];
整数[]镍币=新整数[5];
整数[]便士=新整数[5];
对于(int i=0;i<1;i++){
双倍兑换=已付[i]-账单[i];
而(更改>0){
如果(更改>1){
改变=改变-1;
美元=美元+1;
}
否则,如果(更改>0.25){
变化=变化-0.25;
季度[i]=季度[i]+1;
}
否则如果(更改>0.1){
变化=变化-0.1;
一角硬币[i]=一角硬币[i]+1;
}
否则如果(更改>0.05){
变化=变化-0.05;
镍币[i]=镍币[i]+1;
}
否则如果(更改>0){
变化=变化=0.01;
便士[i]=便士[i]+1;
}
}
}

通过创建一个新数组,您只为元素创建了空间,而没有实例化其中的任何内容。数组使用默认值初始化其元素,因为所有引用类型或对象都是
null

执行任何类型自动取消装箱的任何行-即:

Dollars[i] = Dollars[i] + 1;  
将导致
NullPointerException
,因为
美元[i]
中的值未初始化为任何值-默认情况下为
null

将每个数组中的值初始化为正常值。例如,您可以有一个只将
Integer[]
元素初始化为
Integer.valueOf(0)
的方法

public void initializeArrays(整数[]数组){
for(int i=0;i
在使用数组中的任何值之前调用该函数

从我的重点:取消装箱的
null
装箱值会导致
NullPointerException

取消装箱转换将引用类型的表达式转换为 原语类型的对应表达式。具体来说 以下八种转换称为取消装箱转换:

  • 从布尔类型到布尔类型

  • 从类型字节到类型字节

  • 从短型到短型

  • 从类型字符到类型字符

  • 从Integer类型到int类型

  • 从Long类型到Long类型

  • 从类型Float到类型Float

  • 从Double类型到Double类型

在运行时,取消装箱转换按如下方式进行:

  • 如果r是布尔类型的引用,则取消装箱转换将转换 将r转换为r.booleanValue()

  • 如果r是Byte类型的引用,则取消装箱转换将转换r 转换为r.字节值()

  • 如果r是字符类型的引用,则取消装箱转换 将r转换为r.charValue()

如果r是Short类型的引用,则取消装箱转换将转换r 进入r.shortValue()

  • 如果r是整数类型的引用,则取消装箱转换将转换 r转换为r.intValue()

  • 如果r是Long类型的引用,则取消装箱转换将转换r 进入r.longValue()

  • 如果r是Float类型的引用,则取消装箱转换将r转换为 r、 浮动值()

  • 如果r是Double类型的引用,则取消装箱转换将转换 将r转换为r.doubleValue()

  • 如果r为null,取消装箱转换将抛出NullPointerException


在初始化美元引用变量之前,最初它包含null意味着它不指向任何对象,而如果我们尝试访问它,则它将给出
null指针异常
,如上面的程序所示

错误堆栈跟踪,请?
public void initializeArrays(Integer[] array) {
    for(int i = 0; i < array.length; i++) {
        array[i] = Integer.valueOf(0);
    }
}