我从intellisense得到一个Null pointer access: The variable 'numbers' can only be null at this location
错误,代码如下。(标记错误)
public static int isOne(int incoming){
String original = Integer.toString(incoming);
int length = original.length();
int i;
int numbers[] = null;
for(i = 0; i < length; i++){
String worker = Character.toString(original.charAt(i));
int workInt = Integer.parseInt(worker);
/* HERE */ numbers[i] = workInt;
System.out.print(i + "=" + workInt + ","); /* this line just tests it */
}
int z;
int sum = 0;
int thisNumber = 0;
for(z = 0; z < length; z++){
/* HERE */ thisNumber = numbers[z];
thisNumber = thisNumber * thisNumber;
sum = sum + thisNumber;
}
return 0;
}
当运行代码时,控制台会在第一个错误时发出异常。LogCat什么也不给。
Intellisense针对这两个错误给出了@suppress
的建议。
我真的不知道,但我想可能是在我初始化"数字"的时候。
谢谢你的帮助。
用null
分配numbers
,而不是用数组分配。
更改:
int numbers[] = null;
进入
int[] numbers = new int[length];
请注意,在java中,声明int[] myVar
只会为数组分配引用,而不会实际创建数组对象。为了分配数组本身,可以使用new int[size]
,并将新对象分配给所需的变量。
您永远不会初始化数字。您将其设置为null,然后尝试分配给数字[i]。您需要将数字设置为新的阵列
int[] numbers = new int[length];
您需要初始化数组的大小,如下所示:
int number = new int[length];
另一个建议是使用Java ArrayList,这将在创建数组时提供更大的灵活性。你不需要初始化到一个大小,你可以在循环中添加到这个数组:
ArrayList<Integer> numbers = new ArrayList<Integer>();
更改:
int numbers[] = null;
至
int[] numbers = new int[length];
。。。或者更确切地说,在不初始化numbers
的情况下。
Java中的数组必须声明(您已经完成的部分)并在使用之前进行初始化(您还没有完成的那部分)。您应该键入:而不是null
行
int[]numbers=new int[length];
其创建一个新的、空的整数数组并且CCD_ 9作为其长度。
顺便说一句,写int[] numbers
比写int numbers[]
更常见,因为从前者来看,它更明显是一个数组。
因为您正在将值设置为null
。我想你想做的是
int numbers[] = new int[length];
你说得对。问题是你没有初始化数字
更换
int numbers[]=null;
带有
int数字[]={1,2,3,4,5}
这段代码真的很奇怪,效率低下,而且有缺陷。
并且在总是返回0 时毫无用处
尝试以下
public static int isOne(int incoming){
return 0;
}
;-)或者使用相同的计算和一个真实的,对不起,int,返回值
public static int isOne(int incoming){
int sum = 0;
int pos = 0;
while (true) {
int digit = incoming % 10;
System.out.print(pos + "=" + digit + ","); /* reverse order!, this line just tests it */
incoming /= 10;
if (incoming == 0) break;
sum += digit * digit;
pos ++;
}
return sum;
}