2013-09-04 2 views
-1

Хорошо, ребята, этот код является частью присваивания, которое у меня есть, я должен реализовать метод equals(), чтобы проверить, являются ли две строки равными. Две строки определены как равные, если две конечные точки одинаковы. Однако я не могу проверить это, потому что, когда я запускаю программу as-is здесь, ее пробел, как будто список массивов пуст. Мой вопрос: нужно ли мне менять чтение цикла через файл или мне нужно раскомментировать исходный массив и что-то сделать с ним в отношении массива?Преобразование из массива в массивList

Любая помощь была бы очень признательна!

//Line[] lines; 

    ArrayList<Line> lines;  
    Scanner reader; 

public MyDrawing() 

    super(); 

    this.setPreferredSize(new Dimension(500,500)); 
} 

/** 
* Reads the file and builds an array of Line objects. 
* 
* @param fileName The name of the file that contains the lines 
* @throws Exception 
*/ 
public void read(File fileName) throws Exception 
{ 
    reader = new Scanner(fileName); 

    //---------------- 
    // Change to Arraylist. Make the name of the arraylist "lines" so that code  in paintComponent works. 
    //--------------------- 
    //Have to read the first number before starting the loop 
    int numLines = reader.nextInt(); 
    //lines = new Line[numLines]; 
    ArrayList<Line>lines = new ArrayList<Line>(); 

Здесь я создать экземпляр ArrayList

//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); 

      //---------------- 
      // Change to make sure that you only add lines that don't already exist. 
      //-------------------- 
      lines.add(l); 
      //lines[i] = l; 

и здесь я попытался добавить строку "л" в список }

} 


    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); 
     } 
    } 
    //Print the action to the console 
    System.out.println("drawing lines"); 
} 

}

+2

Вы получите помощь, если вы включили небольшой пример/только применимые области вашего кода. –

+2

Как вы пробовали отлаживать до сих пор? –

+1

Одна ошибка, которую вы делаете, вы проверяете доступный вход один раз и читаете его 4 раза. –

ответ

0

У вас есть переменная экземпляра с именем lines, но вы не используете ее внутри read способ. Внутри метода read вы объявляете локальную переменную с тем же именем lines и читаете ее, но это не меняет поле экземпляра с тем же именем. Следовательно, это поле экземпляра будет null в более позднее время, когда вы попытаетесь его использовать. К сожалению, вы защищаете этот код if(lines != null), а не спрашиваете себя, почему что-то null, которое не должно.

В то время как ваш код, который перебирает поля экземпляра работает независимо от того, lines является массивом или ArrayList ваш код, который читает в него не может работать с массивом, как массивы не имеют add метод. Таким образом, при изменении переменной экземпляра в массив факт, что метод чтения все еще компилируется, дает вам подсказку о том, что он не использует этот массив.

Измените линию ArrayList<Line>lines = new ArrayList<Line>(); внутри метода чтения на lines = new ArrayList<Line>();. Затем список, который вы читаете, будет сохранен в поле экземпляра, которое вы используете позже. И, конечно, он больше не будет компилироваться, если lines объявлен как массив.

Смежные вопросы