Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用对象的equals方法编写一个迭代文本文件并将所有元素添加到arrayList的方法_Java_Arraylist_While Loop_Text Files_Equals - Fatal编程技术网

Java 如何使用对象的equals方法编写一个迭代文本文件并将所有元素添加到arrayList的方法

Java 如何使用对象的equals方法编写一个迭代文本文件并将所有元素添加到arrayList的方法,java,arraylist,while-loop,text-files,equals,Java,Arraylist,While Loop,Text Files,Equals,我正在尝试创建线对象并将它们添加到数组列表中。我遇到的问题是排除任何彼此相似的行。我已经创建了一个equals方法来比较两条线,以确定它们是否相等。我在使用while循环时遇到问题。我没有错误消息。它编译得很好。它只是不会从文本文件中读取。我被困住了,不知道从这里还能去哪里 public void read( File fileName ) throws Exception { reader = new Scanner(fileName); //---------------

我正在尝试创建线对象并将它们添加到数组列表中。我遇到的问题是排除任何彼此相似的行。我已经创建了一个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();

}

lines是一个数组列表。您不能像在代码中那样通过linesi访问ArrayList的元素i;您需要执行lines.geti。

异常很明显,在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
  }

我希望这有帮助

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

Void方法不能返回值

您创建了以下方法:

public void read( File fileName ) throws Exception
在while循环中,您可以执行以下操作:

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

返回null,虽然可以在while循环中使用return,但如果将方法声明为void,则无法执行该操作。您应该改为使用break。

对于没有返回值void的方法,您不应该返回null。您可以使用return。但是我想你想要的是继续。此外,考虑使用HASSET代替ALAYLIST,那么您不需要再检查是否相等,因为HASSET不允许重复。

方法LimeSeT是未定义的类型。MyRead空洞方法不能返回Error消息SAS所有的值。您需要使用lines.GetIther没有lines I。是否有错误?还是刚才的输出?首先尝试一些调试,也许你可以看到错误在哪里,它编译得很好。它根本不运行。它编译得很好,但不运行??那么它是否给出了一个例外?它现在运行。它什么也不做。你可以试着调试你的项目,看看它是否通过你的循环和if/else运行