проблема со связанным списком Java - PullRequest
0 голосов
/ 06 ноября 2010

Я написал некоторый код Java с 3 простыми классами, где первый, Controller, имеет метод main и создает экземпляры других классов.Floaters - это классы, которые создают связанный список экземпляров Floater, каждый из которых имеет определенную длину и логическое значение, чтобы сказать, являются ли они вертикальными или нет.Моя проблема, как говорится в закомментированных строках первого класса, состоит в том, что экземплярам Floaters "people" и "выдры" присваиваются одинаковые значения и, следовательно, они имеют одинаковый размер ....

Anyпредложения как это исправить?

Заранее спасибо!

public class Controller{

   private static Floaters humans;
   private static Floaters otters;

   public static void main(String[] args)
   {
           otters = new Floaters();
           humans = new Floaters();

           otters.addFloater(2, true);
           otters.addFloater(3, true);

           //this should read "2" and it does
           System.out.println(otters.size());

           //this should read "0" but reads "2". Why?
           //How can I get it to read "0"?
           System.out.println(humans.size());
   }
}


import java.util.LinkedList;

 public class Floaters {

   private static LinkedList<Floater> llf;

   Floaters()
   {
           llf = new LinkedList<Floater>();
   }

   public void addFloater(int length, boolean is_vertical)
   {
           Floater floater = new Floater(is_vertical, (byte)length);
           llf.add(floater);
   }

   public int size()
   {
           return llf.size();
   }
}

public class Floater {

   int length;
   boolean is_vertical;

   Floater(boolean is_vertical,  int length)
   {
           this.length = length;
           this.is_vertical = is_vertical;
   }
}

Ответы [ 4 ]

3 голосов
/ 06 ноября 2010

Класс llf в вашем Floaters -классе равен static .Когда вы делаете переменные статичными, они связываются с классом, а не с экземпляром, и поэтому оба экземпляра Floaters используют один и тот же список.

Чтобы исправить это, просто удалите static из вашего объявленияпеременной.

0 голосов
/ 06 ноября 2010

Например, математические функции в Java объявлены как статические методы класса java.lang. Математические константы являются статическими атрибутами этого класса.Поэтому, если вы используете sin (x), вы всегда используете один и тот же метод.

0 голосов
/ 06 ноября 2010

Из-за static:

private static LinkedList<Floater> llf;

В этом случае static означает поле класса, общее для всех экземпляров класса.

0 голосов
/ 06 ноября 2010

в плавающих элементах, если не будет статическим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...