【问题标题】:Java "variable can only be null at this location" with integer array带有整数数组的Java“变量只能在此位置为空”
【发布时间】:2012-03-30 18:18:49
【问题描述】:

我收到来自智能感知的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 的建议。

我真的不知道,但我认为可能是在我初始化“数字”的时候。

感谢您的帮助。

【问题讨论】:

  • 好吧,你并没有真正初始化numbers。您将其设置为 null,这不出所料会导致稍后出现空指针异常。

标签: java arrays integer


【解决方案1】:

您将numbers 分配给null,而不是分配给一个数组。

变化:

int numbers[] = null;

进入

int[] numbers = new int[length];

注意,在java中,声明int[] myVar只是分配一个对数组的引用,并没有真正创建数组对象。为了分配数组本身,您使用new int[size],并将新对象分配给您想要的变量。

【讨论】:

    【解决方案2】:

    你永远不会初始化数字。您将其设置为 null,然后尝试分配给 numbers[i]。您需要将数字设置为新数组

    int[] numbers = new int[length];
    

    【讨论】:

      【解决方案3】:

      您需要像这样初始化数组的大小:

      int number = new int[length];
      

      另一个建议是使用 Java ArrayList,它可以让您更灵活地创建数组。你不需要初始化一个大小,你可以在你的循环中添加到这个数组中:

      ArrayList<Integer> numbers = new ArrayList<Integer>();
      

      【讨论】:

        【解决方案4】:

        变化:

        int numbers[] = null;
        

        int[] numbers = new int[length];
        

        【讨论】:

          【解决方案5】:

          ...或者更确切地说,您不初始化 numbers

          Java 中的数组必须在任何使用之前声明(你已经完成的那部分)和初始化(那部分你还没有)。而不是null 行,您应该输入:

          int[] 数字 = 新的 int[length];

          创建一个新的空整数数组,并以length 作为其长度。

          顺便说一句,int[] numbersint numbers[] 更常见,因为从前者来看,它更明显是一个数组。

          【讨论】:

            【解决方案6】:

            因为您将值设置为null。我想你的意思是

            int numbers[] = new int[length];
            

            【讨论】:

              【解决方案7】:

              你是对的。问题是你没有初始化数字

              替换

              int numbers[] = null;

              整数[] = {1,2,3,4,5}

              【讨论】:

                【解决方案8】:

                这段代码真的很奇怪,效率低下而且有问题。

                而且总是返回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;
                }
                

                【讨论】:

                • 返回的 0 只是为了返回一些东西(我一开始让它返回一个布尔值,这让我有一个返回语句)。返回一些是当我完成输入此评论时它将执行的操作;)
                猜你喜欢
                • 2011-06-22
                • 1970-01-01
                • 1970-01-01
                • 2017-04-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多