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

Java 为什么在将字符串转换为int数组时会得到空指针?,java,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", first

我的主要方法是:

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());
}
大整数级:

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();
    }
}

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

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

其中size是数组的长度。

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

   private int[] intArray = new int[SIZE];
private int[] intArray;
其中size是数组的长度

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

默认情况下,成员变量为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。

您忘记在array中初始化数组


我建议您使用java.util.List,因为您忘了在数组中初始化数组

我建议您使用java.util.List

如果您没有在数组中初始化数组,那么您就会出现错误,下面是完整的程序

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());
    }

}
这是一个大整数

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();
        }   
}
你没有在数组中初始化数组,这样你就会出错,这是完整的程序

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());
    }

}
这是一个大整数

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();
        }   
}

通过Integer.parseInt的不同方法 Integer.parseIntyourInt

要实现您的目标:

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的范围比Integer大得多,这在您的情况下可能足以避免数组

通过Integer.parseInt的不同方法 Integer.parseIntyourInt

要实现您的目标:

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的范围比Integer大得多,这在您的情况下可能足以避免数组

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


注意:除非您没有其他选择,否则不建议在构造函数中实现您的逻辑。

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



注意:除非您没有其他选择,否则不建议在构造函数中实现您的逻辑。

哪里是空指针?哪一行?包含错误消息和堆栈跟踪通常很有帮助,因为它会准确地告诉我们问题发生在哪一行以及原因。您应该咨询调试器,但可能是因为您从未给出intArray的大小?是的,对此表示歉意。这肯定是因为我没有给出大小。空指针在哪里?哪一行?包含错误消息和堆栈跟踪通常很有帮助,因为它会准确地告诉我们问题发生在哪一行以及原因。您应该咨询调试器,但可能是因为您从未给出intArray的大小?是的,对此表示歉意。这肯定是因为我没有给你一个尺码。。事实上,这将是一个非常大的数字谁的长度可以是任何东西。所以我想我必须切换到arrayList。但是在这种情况下,数组的大小是未知的。所以这不是使用arrayList的原因吗?您不需要使用arrayList。长度通过字符串的长度来确定!我错了!你知道数组的长度!这是s.lengthright dang。。事实上,这将是一个非常大的数字谁的长度可以是任何东西。所以我想我必须切换到arrayList。但是在这种情况下,数组的大小是未知的。所以这不是使用arrayList的原因吗?您不需要使用arrayList。长度通过字符串的长度来确定!我错了!你知道数组的长度!是s.lengthah说得通!作为附带问题,本作业的最终目标是在不使用biginteger类的情况下添加大量数字。对于数据结构来说,使用一个可以增长为大量数字的整数数组是正确的选择吗?一般来说,我的观点是不相信整数。如果你计划使用大量数字,还有其他数据类型。所以我可以说,对于数据结构来说,这不是一个正确的选择。但这取决于开发者,我用12345678900123456789012345678901234567890123456789012345678901234567890测试你的程序,它对我来说是有效的。是的,有一些非常大的数字,所以我觉得我很高兴:啊,这很有意义!作为附带问题,本作业的最终目标是在不使用biginteger类的情况下添加大量数字。对于数据结构来说,使用一个可以增长为大量数字的整数数组是正确的选择吗?一般来说,我的观点是不相信整数。如果你计划使用大量数字,还有其他数据类型。所以我可以说,对于数据结构来说,这不是一个正确的选择。但这取决于开发者,我用12345678900123456789012345678901234567890123456789012345678901234567890测试你的程序,它对我来说是有效的 o我觉得我很高兴: