我想使用Java中的scanner类来从文件中获取输入。我想从文件中读取不同城市的两个坐标,然后将它们存储在ArrayList
个City
个对象中。
输入文件格式如下:
NAME : att48
COMMENT : 48 capitals of the US (Padberg/Rinaldi)
TYPE : TSP
DIMENSION : 5
EDGE_WEIGHT_TYPE : ATT
NODE_COORD_SECTION
1 6734 1453
2 2233 10
3 5530 1424
4 401 841
5 3082 1644
我的示例代码片段如下:TourManager
是一个包含ArrayList
City对象的类。我还没有在这里展示它。 City类包含城市的每个细节(x,y坐标)。
try
{
Scanner in = new Scanner(new File("att48.tsp"));
String line = "";
int n;
//three comment lines
in.nextLine();
in.nextLine();
in.nextLine();
//get n
line = in.nextLine();
line = line.substring(11).trim();
n = Integer.parseInt(line);
City[] city= new City[n];
for (int i = 0; i < n; i++) {
city[i].x=0;
city[i].y=0;
}
//two comment lines
in.nextLine();
in.nextLine();
for (int i = 0; i < n; i++)
{
in.nextInt();
city[i].x = in.nextInt();
city[i].y = in.nextInt();
TourManager.addCity(city[i]);
}
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
但我得到的是NullPointerException
。
city[i].x = in.nextInt();
虽然我之前已将其初始化为0,但代码会抛出NullPointerException
。
为清楚起见,City类如下:
public class City {
int x;
int y;
// Constructs a city at chosen x, y location
public City(int x, int y){
this.x = x;
this.y = y;
}
}
代码中是否有问题?
答案 0 :(得分:0)
您收到错误是因为:
City[] city= new City[n];
您尚未为单个city[i]
元素分配内存。
你必须做这样的事情,但为此你需要在你的城市类中添加一个默认构造函数,因为你之后分配了x和y:
for (i=0;i <n ;i++){
city[i]= new City();
}
在City
班级中添加以下构造函数:
public City(){
}
或者我建议你修改你的City
课程:
public class City {
private int x;
private int y;
// Constructs a city at chosen x, y location
public City(int x, int y) {
this.setX(x);
this.setY(y);
}
public City() {
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}