我的代码在第27和32行抛出了一个NPE异常。
(names[i] = myScanner.nextLine();) +
(content[i] = myScanner.next();)
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Main {
static Scanner myScanner = new Scanner(System.in);
static int timesNames = 0;
static String[] names;
static String[] content = null;
public static void main(String[] args) {
System.out.println("How many things ? ");
timesNames = myScanner.nextInt();
for(int i = 0; i <= timesNames; i++ ){
int times = i + 1;
if(times <= timesNames ){
System.out.println("Thing Nr." + times);
System.out.println("");
System.out.println("Name of the thing: ");
names[i] = myScanner.nextLine();
System.out.println("");
System.out.println("Desciption : ");
content[i] = myScanner.next();
try {
File newTextFile = new File("P:/" + names[i] + ".txt");
FileWriter myFilewriter = new FileWriter(newTextFile);
myFilewriter.write(content[i]);
myFilewriter.close();
} catch (IOException iox) {
iox.printStackTrace();
}
}
}
}
}
造成这种情况的原因是什么?我错过了什么吗? 我搜索过我的问题,但没有找到任何帮助。
答案 0 :(得分:0)
这样就可以了:
static String[] names;
static String[] content = null;
这两个都被初始化为null
- 一个明确地,一个隐含地。您需要为它们设置一些默认大小。
static String[] names = new String[timesNames];
static String[] content = new String[timesNames];
答案 1 :(得分:0)
您尚未初始化names
和content
,请尝试:
names = new int[namesArraySize];
content = new String[contentArraySize];
namesArraySize
和contentArraySize
应该是您的数组所需的大小(在您的情况下,它可能是timesNames
)。
您已明确指定content
null
且names
已隐式设置为null
,因此当您尝试通过{null
访问它们时,两者实际上都是names[i]
{1}}和content[i]
(因此是NPE)。
如果您不知道将存储多少项,您应该尝试java.util.List
。
答案 2 :(得分:0)
在您知道有多少“事物”之后初始化数组:
public static void main(String[] args) {
System.out.println("How many things ? ");
timesNames = myScanner.nextInt();
names = new String[timesNames];
content = new String[timesNames];
答案 3 :(得分:0)
你有很多错误。 1.您没有初始化数组 2.当你这样做时,你可能会给它们timeNames的大小,这将在你的循环中给你一个NPE 要解决此问题,您应该将条件从i&lt; = timeNmaes更改为i