Java 爪哇语;变量只能在此位置为null;带整数数组
我得到了一个Java 爪哇语;变量只能在此位置为null;带整数数组,java,arrays,integer,Java,Arrays,Integer,我得到了一个Null指针访问:变量'numbers'只能在此位置为Null错误,来自intellisense,代码如下。(已标记错误) 公共静态int-isOne(int-incoming){ 字符串original=Integer.toString(传入); int length=original.length(); int i; 整数[]=null; 对于(i=0;i
Null指针访问:变量'numbers'只能在此位置为Null
错误,来自intellisense,代码如下。(已标记错误)
公共静态int-isOne(int-incoming){
字符串original=Integer.toString(传入);
int length=original.length();
int i;
整数[]=null;
对于(i=0;i
在运行代码时,控制台会在第一个错误时出现异常。LogCat什么也不给
Intellisense建议对这两个错误执行@suppress
我真的不知道,但我想可能是在我初始化“数字”的时候
谢谢您的帮助。您可以使用
null
分配数字,而不是使用数组分配
更改:
int numbers[] = null;
int numbers[] = null;
进入
请注意,在java中,声明int[]myVar
只分配对数组的引用,实际上并不创建数组对象。为了分配数组本身,您可以使用newint[size]
,并将新对象分配给所需的变量。您从不初始化数字。将其设置为null,然后尝试分配给数字[i]。您需要将数字设置为新数组
int[] numbers = new int[length];
你说得对。问题是您没有初始化数字
替换
整数[]=null
与
整数[]={1,2,3,4,5}变化:
int numbers[] = null;
int numbers[] = null;
到
您需要像下面这样初始化数组的大小:
int number = new int[length];
另一个建议是使用JavaArrayList,这将在创建数组时提供更大的灵活性。您不需要初始化到某个大小,您可以在循环中添加到该数组:
ArrayList<Integer> numbers = new ArrayList<Integer>();
ArrayList number=new ArrayList();
因为您正在将值设置为null
。我想你想做的是
int numbers[] = new int[length];
…或者更确切地说,您不初始化数字
Java中的数组必须在使用之前声明(您已经完成的部分)并初始化(您还没有完成的部分)。您应该键入以下内容,而不是null
行:
int[]数字=新的int[长度]
它创建一个新的空整数数组,并将length
作为其长度
顺便说一句,编写int[]数字
比int数字[]
更常见,因为从前者来看,更明显的是它是一个数组。这段代码真的很奇怪、低效且有缺陷
并且总是返回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;
}
嗯,您并没有真正初始化数字
。您将其设置为null,这在稍后会导致null指针异常,这并不奇怪。返回的0正好是它返回的内容(我让它首先返回一个布尔值,这使我有一个return语句)。当我输入完此注释后,它将返回一些;)
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;
}