2016-10-21 45 views
0

我有另一个类中的arrayList的打印函数。每当我调用它时,它只显示一个空的ArrayList。我究竟做错了什么?我几乎模拟使用线程的电梯,只是将楼层添加到arrayList,然后需要对它们进行排序。我只是想打印数组来看看它是否有序。从另一个类打印ArrayList

import java.util.Random; 
import java.util.concurrent.Semaphore; 

public class Threads { 

    public static int RandomFloor(){ 
     Random random = new Random(); 
     int floor = random.nextInt(6) + 2; 
     return floor; 
    } 
    public static void main(String[] args) throws Exception { 

     Semaphore sem = new Semaphore(0); 
     //Random number for floors 

     Elevator elevator1 = new Elevator(); 

     //Creates the first set of threads and assigns the floor using random number generator defined at the top. 
     Thread myThread1 = new Thread(new Driver(1,RandomFloor())); 
     Thread myThread2 = new Thread(new Driver(2,RandomFloor())); 
     Thread myThread3 = new Thread(new Driver(3,RandomFloor())); 
     Thread myThread4 = new Thread(new Driver(4,RandomFloor())); 
     Thread myThread5 = new Thread(new Driver(5,RandomFloor())); 
     Thread myThread6 = new Thread(new Driver(6,RandomFloor())); 
     Thread myThread7 = new Thread(new Driver(7,RandomFloor())); 
     Thread elevator = new Thread(new Elevator()); 

     //Start first set of threads 
     myThread1.start(); 
     myThread1.join(); 
     myThread2.start(); 
     myThread3.start(); 
     myThread4.start(); 
     myThread5.start(); 
     myThread6.start(); 
     myThread7.start(); 

     elevator1.printFloors(); 

     sem.acquire(); 


} 
} 

其中包含ArrayList和打印功能电梯类

import java.util.*; 
    public class Elevator implements Runnable 
{ 

    List<Integer> floors = new ArrayList<Integer>(); 
    int floor; 
    //add floors into Arraylist 
    public void addFloors(int floor) 
    { 

    this.floor=floor; 
     floors.add(floor); 

     System.out.println("Added to floor array\n"); 

     System.out.println(floors); 
    } 

    public void run() 
    { 

    } 


    public void sortFloors() 
    { 
     Collections.sort(floors); 
    } 

    public void printFloors() 
    { 
     //System.out.println(floors); 
    } 
} 
+0

您是否注意到您的'printFloors'方法此刻不做任何事情? – Henry

+0

你在哪里调用'addFloors'? – 4castle

+0

你知道每次'新的电梯'运行它创建一个新的电梯,对吧? – immibis

回答

0

您可以创建一个新的电梯线程像这样的地板的随机数:

Elevator elevator1 = new Elevator(); 
int numberOfFloors = RandomFloor(); 
for(int i = 1; i <= numberOfFloors; i++) 
    elevator1.addFloors(i); 

这将产生一个来自RandomFloor()方法的随机数并将许多整数添加到Elevator对象中的floors数组中。

像其他人指出,你的代码中有一些错误,比如甚至没有调用addFloors方法,并printFloors无码


如果你想安装的电梯对象在随机地板开始然后给它一些随机数字地面模拟客户呼叫,那么你可以修改你的代码是这样的:

电梯类:

public class Elevator implements Runnable 
{  
    private List<Integer> floors = new ArrayList<Integer>(); 
    private int startingFloor = 0; 

    //add floor into Arraylist 
    public void addFloor(int floor) 
    { 
     floors.add(floor); 
     System.out.println("Added to floor array\n"); 
     System.out.println(floors); 
    } 

    public void setStartingFloor(int floor){ 
     this.startingFloor = floor; 
    } 

    public void run() 
    { 

    } 

    public void sortFloors() 
    { 
     Collections.sort(floors); 
    } 

    public void printFloors() 
    { 
     System.out.println(floors); 
    } 
} 

主要方法:

Elevator elevator1 = new Elevator(); 
elevator1.setStartingFloor(RandomFloor()); 

int numberOfElevatorCalls = 50; 
for(int i = 0; i < numberOfElevatorCalls, i++){ 
    elevator1.addFloor(RandomFloor()); 
} 

// sort 
elevator1.sortFloors(); 

// print 
elevator1.printFloors();