2015-11-29 56 views
-1

存在我有兩個簡單的類,NetworkDevice.java和Channel.javaArrayList中,每個對象只能在一個ArrayList的同時

在Channel.java我有

private ArrayList<Channel> channel = new ArrayList<Channel>(); 

我正努力改變只存儲NetworkDevices

我試圖讓該規範是:

每個NETWORKDEVICE有能力加入一個頻道,但一次只能在一個頻道中存​​在 。

NetworkDevice.java如下所示

public class NetworkDevice { 

    // Fields 
    private String address; 
    //Constructor 
    public NetworkDevice(String address, Channel channel){ 
     this.address = address; 
     addToChannel(channel); 
    } 

    // Add a NetworkDevice to the 
    public void addToChannel(Channel channel){ 
      channel.addChannel(this); 
    } 
} 

Channel.java下面

import java.util.List; 
import java.util.ArrayList; 

public class Channel { 

    // Fields 
    private ArrayList<Channel> channel = new ArrayList<Channel>(); 
    private int number; 
    private List<Packet> packet; 

    /* 
    * Constructor 
    * Initializes the number of the the Channel 
    * Allows for a packet to be passed in 
    */ 
    public Channel(int number, Packet packets) { 
     this.number = number; 
     packet.add(packets); 
    } 

    /* 
    * Adds to the Channel array 
    * @Param a network device object 
    */ 
    public void addChannel(NetworkDevice device) { 
     channel.add(this); 
    } 
} 
+1

什麼問題,但? –

+0

將聯合通道放入NetworkDevice是一個選項嗎?該頻道是一個「可選」將解決這個問題。 – Felk

+0

這將如何工作?問題是規範 – user5438578

回答

0

看起來你搞砸了相當多的名稱和概念有顯示。

我重寫了代碼,所以對我來說很有意義。也就是說,我沒有任何真正的線索要實現什麼。不過看到什麼樣的結果我的代碼帶來的:

public class MultiInst { 
    static public class NetworkDevice { 
     private final String mAddress; 
     private Channel   mCurrentChannel = null; 

     public NetworkDevice(final String address, final Channel channel) { 
      this.mAddress = address; 
      addToChannel(channel); 
     } 

     public void addToChannel(final Channel channel) { 
      if (mCurrentChannel == channel) return; // may do this 
      if (mCurrentChannel != channel && mCurrentChannel != null) mCurrentChannel.removeNetworkDevice(this); 

      mCurrentChannel = channel; 
      mCurrentChannel.addNetworkDevice(this); 
     } 

     @Override public String toString() { 
      return mAddress; 
     } 
    } 


    static public class Channel { 

     private final ArrayList<NetworkDevice> mNetworkDevices = new ArrayList<>(); 
     private final List<Packet>    mPackets  = new ArrayList<>(); 
     private final int      mNumber; 

     public Channel(final int number, final Packet... packets) { 
      this.mNumber = number; 
      if (packets != null) for (final Packet p : packets) { 
       mPackets.add(p); 
      } 
     } 

     public void addNetworkDevice(final NetworkDevice device) { 
      mNetworkDevices.add(device); 
     } 
     public void removeNetworkDevice(final NetworkDevice device) { 
      mNetworkDevices.remove(device); 
     } 

     @Override public String toString() { 
      String acc = "Channel #" + mNumber + ":\t"; 
      if (mNetworkDevices.size() < 1) return acc + " [EMPTY] "; 
      for (final NetworkDevice c : mNetworkDevices) { 
       acc += "\t" + c; 
      } 
      return acc; 
     } 
    } 



    public static void main(final String[] args) { 
     final Channel c1 = new Channel(1); 
     final Channel c2 = new Channel(2); 
     final NetworkDevice d = new NetworkDevice("lol", null); 

     System.out.println("Start\n"); 

     System.out.println(c1); 
     System.out.println(c2); 
     System.out.println(); 

     System.out.println("Adding to channel 1..."); 
     d.addToChannel(c1); 
     System.out.println(c1); 
     System.out.println(c2); 
     System.out.println(); 

     System.out.println("Adding to channel 2..."); 
     d.addToChannel(c2); 
     System.out.println(c1); 
     System.out.println(c2); 
     System.out.println(); 

     System.out.println("End"); 
    } 

} 

將創建輸出

Start 

Channel #1: [EMPTY] 
Channel #2: [EMPTY] 

Adding to channel 1... 
Channel #1:  lol 
Channel #2: [EMPTY] 

Adding to channel 2... 
Channel #1: [EMPTY] 
Channel #2:  lol 

End 
相關問題