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