给出如下文本文件:
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
这意味着第一个原始索引,第二个表示项目的值或权重..和int cbin = \\the second text's value
和int nbin = \\the first text's value
我在线程
“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);
}
}
任何想法??
答案 0 :(得分:1)
你没有初始化阵列!!
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
我怎么理解为什么
答案 1 :(得分:0)
使用java.util.Scanner,Scanner scanner = new Scanner(System.in);
,while (scanner.hasNext()) { /* ... */ }
和int n = scanner.nextInt();
等语句将使其成为一个更简单的程序。
像这样:
import java.util.Scanner;
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();
}
}
}
}