簡體   English   中英

掃描儀拋出NPE

[英]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];

您尚未初始化namescontent ,所以請嘗試:

names = new int[namesArraySize];
content = new String[contentArraySize];

其中namesArraySizecontentArraySize應該是數組所需的大小(在您的情況下,可能是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM