[英]Scanner is throwing NPE
我的代碼在第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();
}
}
}
}
}
是什么原因造成的? 我想念什么嗎? 我已經搜索過我的問題,但沒有發現任何幫助。
這樣做:
static String[] names;
static String[] content = null;
它們都被初始化為null
一個顯式,一個隱式。 您需要為其設置一些默認大小。
static String[] names = new String[timesNames];
static String[] content = new String[timesNames];
您尚未初始化names
和content
,所以請嘗試:
names = new int[namesArraySize];
content = new String[contentArraySize];
其中namesArraySize
和contentArraySize
應該是數組所需的大小(在您的情況下,可能是timesNames
)。
您為content
明確分配了null
並且names
被隱式設置為null
,因此當您嘗試通過names[i]
和content[i]
(因此是NPE)訪問它們時,兩者實際上都是null
。
如果您不知道將存儲多少個項目,則應嘗試使用java.util.List
。
在知道有多少“事物”之后,初始化數組:
public static void main(String[] args) {
System.out.println("How many things ? ");
timesNames = myScanner.nextInt();
names = new String[timesNames];
content = new String[timesNames];
您有很多錯誤。 1.您沒有初始化數組2.當您這樣做時,您可能會給它們指定timeNames的大小,這將在循環內為您提供NPE。要解決此問題,您應將條件從i <= timeNmaes更改為i
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.