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我觉得我很高兴: