繁体   English   中英

使用ArrayLists的代码中的Out of Bounds Exception错误

[英]Out of Bounds Exception error in code using ArrayLists

我在程序中找不到错误,该错误应该在队列中添加和减去整数,然后在500分钟内打印出每个队列的平均值和最大值。 我不断遇到异常错误,但无法解决问题。 任何帮助确定我的问题所在的帮助将不胜感激!

import java.util.*;
import java.util.Random;
import java.util.LinkedList;
import java.util.ArrayList;

public class AirportQueue {
    public static int longestWaitTime = 0;
    public static Random rand = new Random(3);
    public static int partySize;
    public static Random randQueue = new Random(2);
    public static Queue<Integer> airportQ1 = new LinkedList<>();
    public static Queue<Integer> airportQ2 = new LinkedList<>();
    public static Queue<Integer> airportQ3 = new LinkedList<>();
    public static ArrayList[] minute = new ArrayList[500];
    public static ArrayList[] secondMinute = new ArrayList[250];
    public static ArrayList<Integer> q1 = new ArrayList(0);
    public static ArrayList<Integer> q2 = new ArrayList(0);
    public static ArrayList<Integer> q3 = new ArrayList(0);
    public static int avgQ1 = 0;
    public static int avgQ2 = 0;
    public static int avgQ3 = 0;

    public void airportSimulation() {

        for (int i = 0; i < 500; i++) {
            if ((i % 2) == 0) { // add a party to a queue each minute
                if ((airportQ1.size() < airportQ2.size()) && (airportQ1.size() < airportQ3.size())) {
                    partySize = rand.nextInt();
                    airportQ1.add(partySize);
                    q1.add(partySize);
                } else if ((airportQ2.size() < airportQ1.size()) && (airportQ2.size() < airportQ3.size())) {
                    partySize = rand.nextInt();
                    airportQ2.add(partySize);
                    q2.add(partySize);
                } else {
                    partySize = rand.nextInt();
                    airportQ3.add(partySize);
                    q3.add(partySize);
                }
                int queueSelected = randQueue.nextInt();
                if (queueSelected == 0) {
                    if (airportQ1.isEmpty()) {
                        System.out.println("The first queue is empty.");
                    } else {
                        airportQ1.remove();
                    }
                } else if (queueSelected == 1) { // remove a party every 2 minutes
                    if (airportQ2.isEmpty()) {
                        System.out.println("The second queue is empty.");
                    } else {
                        airportQ2.remove();
                    }
                } else {
                    if (airportQ3.isEmpty()) {
                        System.out.println("The third queue is empty.");
                    } else {
                        airportQ3.remove();
                    }
                }

            } else {
                if ((airportQ1.size() < airportQ2.size()) && (airportQ1.size() < airportQ3.size())) {
                    partySize = rand.nextInt();
                    airportQ1.add(partySize);
                    q1.add(partySize);
                } else if ((airportQ2.size() < airportQ1.size()) && (airportQ2.size() < airportQ3.size())) {
                    partySize = rand.nextInt();
                    airportQ2.add(partySize);
                    q2.add(partySize);
                } else {
                    partySize = rand.nextInt();
                    airportQ3.add(partySize);
                    q3.add(partySize);
                }
            }
        }

        // num of people in queue
        for (int k = 0; k < airportQ1.size(); k++) {
            int q1Total = 0;
            avgQ1 = (q1Total + q1.get(k)) / 500;
        }
        for (int k = 0; k < airportQ2.size(); k++) {
            int q1Total = 0;
            avgQ2 = (q1Total + q2.get(k)) / 500;
        }
        for (int k = 0; k < airportQ3.size(); k++) {
            int q1Total = 0;
            avgQ3 = (q1Total + q3.get(k)) / 500;
        }

        // Max value for each queue
        int max1 = q1.get(0);
        for (int i = 0; i < q1.size(); i++) {
            int current1 = q1.get(i);
            if (current1 > max1) {
                max1 = current1;
            }
        }

        int max2 = q2.get(0);
        for (int i = 0; i < q2.size(); i++) {
            int current2 = q2.get(i);
            if (current2 > max2) {
                max2 = current2;
            }
        }

        int max3 = q3.get(0);
        for (int i = 0; i < q3.size(); i++) {
            int current3 = q3.get(i);
            if (current3 > max3) {
                max3 = current3;
            }
        }

        System.out.println("The average number of people in the first "
                + "Airport Security queue is " + avgQ1);
        System.out.println("The average number of people in the second "
                + "Airport Security queue is " + avgQ2);
        System.out.println("The average number of people in the third "
                + "Airport Security queue is " + avgQ3);
        System.out.println("The maximum number of people in the first "
                + "queue at any given time was " + max1);
        System.out.println("The maximum number of people in the first "
                + "queue at any given time was " + max2);
        System.out.println("The maximum number of people in the first "
                + "queue at any given time was " + max3);

    }

    public static void main(String[] args) {
        AirportQueue testAirport = new AirportQueue();
        testAirport.airportSimulation();
    }
}

堆栈跟踪:

线程“主”中的异常java.lang.IndexOutOfBoundsException:索引:0,大小:0
在java.util.ArrayList.rangeCheck(未知来源)
在java.util.ArrayList.get(未知来源)
在AirportQueue.airportSimulation(AirportQueue.java:93)
在AirportQueue.main(AirportQueue.java:134)

有问题的行:

int max1 = q1.get(0);

解决了问题,感谢您对所有评论的帮助! 以下是更正后的代码,该代码对于分配给它的类而言效果很好。

import java.util.Random;
import java.util.LinkedList;
import java.util.ArrayList;

public class AirportQueue {

public Random rand = new Random();
public int partySize;
public Random randQueue = new Random();
public LinkedList<Integer> airportQ1 = new LinkedList<>();
public LinkedList<Integer> airportQ2 = new LinkedList<>();
public LinkedList<Integer> airportQ3 = new LinkedList<>();
public ArrayList[] minute = new ArrayList[500];
public ArrayList[] secondMinute = new ArrayList[250];
public ArrayList<Integer> q1 = new ArrayList(0);
public ArrayList<Integer> q2 = new ArrayList(0);
public ArrayList<Integer> q3 = new ArrayList(0);
public int avgQ1 = 0;
public int avgQ2 = 0;
public int avgQ3 = 0;
public int max1 = 0;
public int max2 = 0;
public int max3 = 0;
public int countQ1 = 0;
public int countQ2 = 0;
public int countQ3 = 0;

public void airportSimulation() {

    int queueSelected = randQueue.nextInt(3);

    //Simulate queues for 500 minutes
    for (int i = 1; i < 501; i++) {
        //add a party to a queue each minute
        if ((i % 2) == 0) {
            if ((airportQ1.size() <= airportQ2.size()) && (airportQ1.size() <= airportQ3.size())) {
                partySize = rand.nextInt(4) + 1;
                airportQ1.add(partySize);
                q1.add(partySize);
                System.out.println("Minute " + i + ": a party of " + partySize + " just entered the queue.");
            } else if ((airportQ2.size() <= airportQ1.size()) && (airportQ2.size() <= airportQ3.size())) {
                partySize = rand.nextInt(4) + 1;
                airportQ2.add(partySize);
                q2.add(partySize);
                System.out.println("Minute " + i + ": a party of " + partySize + " just entered the queue.");
            } else//((airportQ3.size() <= airportQ1.size()) && (airportQ3.size() <= airportQ2.size())) 
            {
                partySize = rand.nextInt(4) + 1;
                airportQ3.add(partySize);
                q3.add(partySize);
                System.out.println("Minute " + i + ": a party of " + partySize + " just entered the queue.");
            }

            //remove a party every 2 minutes
            if (queueSelected == 0) {
                if (airportQ1.size() != 0) {
                    airportQ1.remove();
                    if (airportQ1.size() > 0) {
                        System.out.println("Minute " + i + ": a party of " + airportQ1.get(airportQ1.size() - 1) + " just passed security.");
                    }
                }
            } else if (queueSelected == 1) {
                if (airportQ2.size() != 0) {
                    airportQ2.remove();
                    if (airportQ2.size() > 0) {
                        System.out.println("Minute " + i + ": a party of " + airportQ2.get(airportQ2.size() - 1) + " just passed security.");
                    }
                }
            } else {
                if (airportQ3.size() != 0) {
                    airportQ3.remove();
                    if (airportQ3.size() > 0) {
                        System.out.println("Minute " + i + ": a party of " + airportQ3.get(airportQ3.size() - 1) + " just passed security.");
                    }
                }
            }
            queueSelected = randQueue.nextInt(3);

        } else {
            if ((airportQ1.size() <= airportQ2.size()) && (airportQ1.size() <= airportQ3.size())) {
                partySize = rand.nextInt(4) + 1;
                airportQ1.add(partySize);
                q1.add(partySize);
                System.out.println("Minute " + i + ": a party of " + partySize + " just entered the queue.");
            } else if ((airportQ2.size() <= airportQ1.size()) && (airportQ2.size() <= airportQ3.size())) {
                partySize = rand.nextInt(4) + 1;
                airportQ2.add(partySize);
                q2.add(partySize);
                System.out.println("Minute " + i + ": a party of " + partySize + " just entered the queue.");
            } else {
                partySize = rand.nextInt(4) + 1;
                airportQ3.add(partySize);
                q3.add(partySize);
                System.out.println("Minute " + i + ": a party of " + partySize + " just entered the queue.");
            }
        }

        //num of people in queue
        int q1Total = 0;
        for (int k = (airportQ1.size() - 1); k > 0; k--) {
            q1Total = q1Total + airportQ1.get(k);
            avgQ1 = q1Total / 500;
            q1.add(q1Total);
        }
        int q2Total = 0;
        for (int k = 1; k < airportQ2.size(); k++) {
            q2Total = q2Total + q1.get(k);
            q2.add(q2Total);
        }
        int q3Total = 0;
        for (int k = 1; k < airportQ3.size(); k++) {
            q3Total = q3Total + airportQ3.get(k);
            q3.add(q3Total);
        }
    }

    //avg number of people in each queue
    for (int m = 1; m < q1.size(); m++) {
        countQ1 = q1.get(m) + countQ1;
    }
    for (int m = 1; m < q2.size(); m++) {
        countQ2 = q2.get(m) + countQ2;
    }
    for (int m = 1; m < q3.size(); m++) {
        countQ3 = q3.get(m) + countQ3;
    }
    avgQ1 = countQ1 / (q1.size() - 1);
    avgQ2 = countQ2 / (q2.size() - 1);
    avgQ3 = countQ3 / (q3.size() - 1);

    //Max value for each queue
    for (int j = 0; j < q1.size(); j++) {
        int current1 = q1.get(j);
        if (current1 > max1) {
            max1 = current1;
        }
    }
    for (int i = 0; i < q2.size(); i++) {
        int current2 = q2.get(i);
        if (current2 > max2) {
            max2 = current2;
        }
    }
    for (int i = 0; i < q3.size(); i++) {
        int current3 = q3.get(i);
        if (current3 > max3) {
            max3 = current3;
        }
    }

    System.out.println("The average number of people in the first "
            + "Airport Security queue is " + avgQ1);
    System.out.println("The average number of people in the second "
            + "Airport Security queue is " + avgQ2);
    System.out.println("The average number of people in the third "
            + "Airport Security queue is " + avgQ3);
    System.out.println("The maximum number of people in the first "
            + "queue at any given time was " + max1);
    System.out.println("The maximum number of people in the second "
            + "queue at any given time was " + max2);
    System.out.println("The maximum number of people in the third "
            + "queue at any given time was " + max3);

}

public static void main(String[] args) {
    AirportQueue testAirport = new AirportQueue();
    testAirport.airportSimulation();
}
}

暂无
暂无

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

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