繁体   English   中英

从另一个类打印ArrayList

[英]Printing an ArrayList from another class

我在另一个类中为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和print函数的电梯类

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

您可以创建一个具有随机楼层数的新电梯线程,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM