有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中将文本文件读取到int数组

给出如下文本文件:
10
100
99
99
96
96
92
92
91
88
87
86

其中,第一个数字“10”表示文本文件包含10整数,第二个数字100表示文本文件中的所有数字不超过100
我的目标是阅读课文并填写int data[][];如下:

data[0][0]=1    data[0][1]=99
data[1][0]=2    data[1][1]=99
data[2][0]=3    data[2][1]=96
data[3][0]=4    data[3][1]=96
data[4][0]=5    data[4][1]=92
data[5][0]=6    data[5][1]=92
data[6][0]=7    data[6][1]=91
data[7][0]=8    data[7][1]=88
data[8][0]=9    data[8][1]=87
data[9][0]=10   data[9][1]=86
cbin = 100 // bin capacity 
nbin = 10 // number of objects 

这意味着第一个是索引的原始值,第二个是项目的值或权重。。和{}和{}
问题是线程中出现异常

"AWT-EventQueue-0" java.lang.NullPointerException


这是我的代码:

 public static int[][] data=null; \\ in the first of the document

       JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File f= chooser.getSelectedFile();

        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(f));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(interface1.class.getName()).log(Level.SEVERE, null, ex);
        }
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();
        int i=0,j=0;
        while (line != null) {

            if(i==0){
                nbin= (int) Integer.parseInt(""+line);
                System.out.println(nbin);
            }
            else if (i==1) {
                cbin=(int) Integer.parseInt(""+line);
                System.out.println(cbin);
            }
          //  sb.append(line);
            line = br.readLine();
        if(i >= 2 && line != null){

               data[j][1]=(int) Integer.parseInt(line);
               data[j][0]=j;
               j++;

             }

            i++;

        }
          }   catch (IOException ex) {
            Logger.getLogger(interface1.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
        try {
            br.close();
        } catch (IOException ex) {
            Logger.getLogger(interface1.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

有什么想法吗


共 (2) 个答案

  1. # 1 楼答案

    使用java.util.Scanner,诸如Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) { /* ... */ }int n = scanner.nextInt();等语句将使它成为一个简单得多的程序

    像这样:

    导入java。util。扫描仪

    public class Read {
      public static void main (String [] args) {
        try (
          Scanner scanner = new Scanner(System.in);
        ) {
          int nbin = scanner.nextInt();
          int cbin = scanner.nextInt();
          int data[][] = new int[nbin][2];
          for (int i = 0; i < nbin; ++i) {
            data[i][0] = i + 1;
            data[i][1] = scanner.nextInt();
          }
        }
      }
    }
    
  2. # 2 楼答案

    您没有初始化阵列

    public static int[][] data=null;
    

    这不是正确初始化,您正在“声明”变量。这与:

    public static int[][] data;
    

    没有区别

    如果希望能够在阵列中添加某些内容,则必须对其进行初始化:

    例如:

    public static int[][] data;
    try{
        data[1][1] = 5;
        System.out.println("Added");
    }catch(NullPointerException e){
        System.out.println("First exception catched");
    }
    data = new int[10][10];
    try{
        data[1][1] = 5;
        System.out.println("added at the second try");
    }catch(NullPointerException e){
        System.out.println("Second Exception catched");
    }
    

    该代码将给出以下结果:

    First exception catched
    added at the second try
    

    我知道你是怎么理解的