-1

我正在尝试创建 Line 对象并将它们添加到数组列表中。我遇到的问题是排除任何彼此相似的行。我已经创建了一个比较两行以确定它们是否相等的 equals 方法。我在使用 while 循环时遇到问题。我没有错误消息。它编译得很好。它只是不会从文本文件中读取。我被困住了,不知道从这里还能去哪里。

public void read( File fileName ) throws Exception
{
    reader = new Scanner(fileName);


    //---------------------
    //Have to read the first number before starting the loop
    int numLines = reader.nextInt();
    lines = new ArrayList <Line> (numLines);

    //This loop adds a new Line object to the lines array for every line in the file read.
    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 );

              if (l.equals(lines.get(i)))
                  break;
              else
                  lines.add(i, l);


        }
    }

    //Print the action to the console
    System.out.println( "reading text file: " + fileName );
    reader.close();

}
4

4 回答 4

2

lines是一个数组列表。您不能像在代码中那样访问iArrayList的元素;lines(i)你需要做lines.get(i)

于 2013-09-05T07:22:10.347 回答
0

第一个例外已经被其他人解释了,所以我将解释另一个:

Void methods cannot return a value

您创建了以下方法:

public void read( File fileName ) throws Exception

在你的while循环中你这样做:

    if (this.lines(i).equals(lines(i)))
        return null;
    else
        lines.add(i, l);

你 return null,虽然你可以在循环中使用 return ,while但如果你声明你的 method ,你就不能这样做void。你应该break改用。

于 2013-09-05T07:27:09.443 回答
0

您不应该在没有返回值 (void) 的方法上“返回 null”。您可以只使用“return”。但是,我认为您想要的是“继续”。还可以考虑使用 HashSet 代替 arraylist,然后您不需要再检查相等性,因为 hashset 不允许重复。

于 2013-09-05T07:27:52.540 回答
0

例外很明显,您不能在 void 函数中返回任何内容。因此,只需将您的代码修改为:

  Line l =  new Line( beg, end, color );
  //if not equals, add it
  if (!this.lines(i).equals(lines.get(i))){
            //TODO: add to you collection
  }

我希望它有帮助

于 2013-09-05T07:22:11.707 回答