2010-11-06 2 views
0

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

Любые предложения по как это исправить?

Заранее благодарен!

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; 
    } 
} 

ответ

3

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

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

0

Из static:

private static LinkedList<Floater> llf; 

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

0

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

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