java - 将文本文件的 X 和 Y 坐标读取到数组列表中

标签 java arrays file-io arraylist

我正在尝试将此数组更改为 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/

相关文章:

java - 如何在paintComponent中自动添加形状?

java - 使用 Robolectric,如何测试沿 POST *请求* 发送的 JSON 值

python - 连续数组和非连续数组有什么区别?

Java:如何从文本文件中读取特定行?

java - 如何不匹配此正则表达式中的第一个空字符串?

arrays - 从 Firebase 快照数组中获取数据

c++ - union 数组有效还是无效?

android - 如何显示我的应用程序下载的文件列表?

c++ - 无法为整数生成全范围的随机数

java - 为什么要在 for 循环中使用双变量