带有整数数组的 Java "variable can only be null at this location"



我从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;
}

相关内容

最新更新