我正在尝试将此数组更改为 arrayList。它读取一条线的两个点的 x 和 y 坐标以及线的颜色。稍后我将使用 equals() 方法来确定两行是否相等并仅添加第一行。现在我只是尝试将文件放入 arrayList 中。如果我只使用数组 Line[]lines,程序运行正常,但是当我像这样使用 arrayList 运行它时,它只是一个空白面板,这就是第二个循环导致 arrayList 中没有任何内容的原因。
我的文本文件如下所示:
3
482 22 335 492 red
482 22 335 492 blue
482 22 335 492 green
//Line[] lines;
ArrayList<Line> lines;
Scanner reader;
int numLines = reader.nextInt();
//lines = new Line[numLines];
ArrayList<Line>lines = new ArrayList<Line>();
while( reader.hasNext() ) {
for( int i = 0; i < numLines; i++ ) {
int x = reader.nextInt();
int y = reader.nextInt();
Point beg = new Point(x,y);
x = reader.nextInt();
y = reader.nextInt();
Point end = new Point(x,y);
String color = reader.next();
Line l = new Line( beg, end, color );
lines.add(l);
//lines[i] = l;
使用这个循环,我尝试将每一行添加到 arrayList
if( lines != null ) {
for( Line l: lines ) {
int x1 = l.getBeg().getX();
int y1 = l.getBeg().getY();
int x2 = l.getEnd().getX();
int y2 = l.getEnd().getY();
g.setColor(l.color);
g.drawLine(x1, y1, x2, y2);
System.out.println(l);
这是绘制组件,如果列表为空,则面板留空。
我的问题是我是否正确使用了第一个循环,或者我需要做些什么才能使其与 arrayList 一起使用?
最佳答案
没有进一步的上下文,您似乎正在隐藏您的变量......
您从这些声明开始,它们“出现”在实例变量中......
//Line[] lines;
ArrayList<Line> lines;
Scanner reader;
但是当你初始化它们时,你会这样做......
int numLines = reader.nextInt();
//lines = new Line[numLines];
ArrayList<Line>lines = new ArrayList<Line>();
// Warning bells, redeclaration of lines!!
这“表明”您正在隐藏变量,这意味着您的绘制方法正在使用对您在类级别声明的 lines
的引用。
相反,您应该像这样初始化变量......
int numLines = reader.nextInt();
//lines = new Line[numLines];
lines = new ArrayList<Line>(numLines);
注意。使用numLines
来初始化ArrayList
,效率会更高...
关于java - 将文本文件的 X 和 Y 坐标读取到数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18627185/