为什么我在将字符串转换为int数组时得到一个空指针?

时间:2012-03-22 17:19:38

标签: java

我的主要方法:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String string1;
    string1 = input.next();

    LargeInteger firstInt = new LargeInteger(string1);

    System.out.printf("First integer: %s \n", firstInt.display());
}

LargeInteger类:

public class LargeInteger {

    private int[] intArray;

    //convert the strings to array
    public LargeInteger(String s) {
        for (int i = 0; i < s.length(); i++) {
            intArray[i] = Character.digit(s.charAt(i), 10); // in base 10
        }
    }

    //display the strings
    public String display() {
        String result = "";

        for (int i = 0; i < intArray.length; i++) {
            result += intArray[i];
        }
        return result.toString();
    }
}

6 个答案:

答案 0 :(得分:7)

您没有实例化您的数组。你需要这样的东西:

   private int[] intArray = new int[SIZE];

其中size是数组的长度。

答案 1 :(得分:1)

private int[] intArray;

默认情况下,成员变量为null,因此您需要初始化它。

您最希望它的大小与字符串相同:

public LargeInteger(String s) {
    intArray = new int[s.length()]; // Create the actual array before you try to put anything in it
    for (int i = 0; i < s.length(); i++) {
        intArray[i] = Character.digit(s.charAt(i), 10); // in base 10
    }
}

或者您应该使用自己调整大小的容器,例如ArrayList

答案 2 :(得分:1)

你没有初始化数组intArray,这样你就会出错,这里是完整的程序

import java.util.Scanner;

class  TestForNull {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String string1;
        string1 = input.next(); 

        LargeInteger firstInt = new LargeInteger(string1);

        System.out.printf ("First integer: %s \n", firstInt.display());
    }

}

这是LargeInteger

public class LargeInteger {

    private int[] intArray;
    //convert the strings to array
    public LargeInteger(String s) {
        intArray = new int[s.length()];
        for (int i = 0; i < s.length(); i++) {
            intArray[i] = Character.digit(s.charAt(i), 10); // in base 10
        }
    }

    //display the strings
    public String display() {           
          String result="";

          for (int i = 0; i < intArray.length; i++) {     
            result += intArray[i];
          }
          return result.toString();
        }   
}

答案 3 :(得分:1)

通过Integer.parseInt的不同方法     的Integer.parseInt( “yourInt”);

实现目标:

String a = "12345667788" //sample
String b = "";
int [] vecInt = new int[a.length()];  // The lack of initialization was your mistake as the above stated
for(int i=0; i< a.length(); i++)
{
   b = a.substring(0,1);
   a= a.substring(1);
   vecInt[i] = Integer.parseInt(b);
}

请注意Double,long有更高的范围然后整数,这可能足以避免阵列!

答案 4 :(得分:0)

您忘记初始化数组intArray

我建议使用java.util.List

答案 5 :(得分:0)

您忘了初始化阵列。您已在构造函数中编写它,并且在方法或构造函数中声明的变量需要同时初始化。

注意:建议不要在构造函数中实现逻辑,除非并且直到您没有其他选择。