扫描仪正在投掷NPE

时间:2014-02-02 17:42:38

标签: java arrays input nullpointerexception java.util.scanner

我的代码在第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();
        }
      }
    }
  } 
}

造成这种情况的原因是什么?我错过了什么吗? 我搜索过我的问题,但没有找到任何帮助。

4 个答案:

答案 0 :(得分:0)

这样就可以了:

static String[] names;
static String[] content = null;

这两个都被初始化为null - 一个明确地,一个隐含地。您需要为它们设置一些默认大小。

static String[] names = new String[timesNames];
static String[] content = new String[timesNames];

答案 1 :(得分:0)

您尚未初始化namescontent,请尝试:

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

namesArraySizecontentArraySize应该是您的数组所需的大小(在您的情况下,它可能是timesNames)。

您已明确指定content nullnames已隐式设置为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