Java 为什么会出现NullPointerException&ArrayIndexOutOfBoundsException错误

Java 为什么会出现NullPointerException&ArrayIndexOutOfBoundsException错误,java,arraylist,nullpointerexception,Java,Arraylist,Nullpointerexception,在第24行为循环获取NullPointerError,在主方法上获取arrayoutofindexexception。我不知道如何解决这个问题,如果您能解释一下,我将不胜感激。请帮忙 编辑:“NullPointerError”已解决,只需要为其初始化ArrayList,但仍然无法解决“ArrayOutOfIndexException”错误 import java.util.*; public class SnackBar { private Random randomizer;

在第24行为循环获取NullPointerError,在主方法上获取arrayoutofindexexception。我不知道如何解决这个问题,如果您能解释一下,我将不胜感激。请帮忙

编辑:“NullPointerError”已解决,只需要为其初始化ArrayList,但仍然无法解决“ArrayOutOfIndexException”错误

import java.util.*;

public class SnackBar
{
    private Random randomizer;
    private String[] flavours;
    private SnackMachine barMachine;
    ArrayList<Student> students;

    public SnackBar(int numStudents, int packetsBarMachine, int costPacket)
    {
        randomizer = new Random();
        flavours = new String[] {"prawn cocktail", "tango cheese", "natural", "paprika", "salt and vinegar"};
        barMachine = new SnackMachine(packetsBarMachine, costPacket);
 students = new ArrayList<Student>();

        for(int i = 0; i < packetsBarMachine; i++)
        {
            barMachine.addPack(new PackOfCrisps(randomFlavour()));
            i++;
        }

        for(int j = 0; j < numStudents; j++)
        {
            students.add(new Student(randomFlavour(), barMachine));            
            j++;
        }
    }

    public String randomFlavour()
    {
        int random = randomizer.nextInt(flavours.length);
        return flavours[random];
    }

    public void describe()
    {
        System.out.println("The SnackBar has " + students.size() + " hungry students.");
        System.out.println("The Snackmachine has:");
        System.out.println(barMachine.countPacks("prawn cocktail") + " packets of prawn cocktail crisps,");
        System.out.println(barMachine.countPacks("tango cheese") + " packets of tango cheese crisps,");
        System.out.println(barMachine.countPacks("natural") + " packets of natural crisps,");
        System.out.println(barMachine.countPacks("paprika") + " packets of paprika crisps,");
        System.out.println(barMachine.countPacks("salt and vinegar") + " packets of salt and vinegar crisps.");
    }

    public void runSnackBar(int nSteps)
    {
        int step = 1;

        while(step <= nSteps)
        {
            System.out.println("Time Step " + step);
            describe();
            int atRandom = randomizer.nextInt(students.size());
            students.get(atRandom).snackTime();
            step++;
        }
    }

    public static void main(String[] args)
    {
        SnackBar bar = new SnackBar (Integer.parseInt(args[4]), Integer.parseInt(args[20]), Integer.parseInt(args[5]));

        bar.runSnackBar(Integer.parseInt(args[30]));
    }
}

首先,您应该初始化ArrayList学生列表


parseIntargs[30]也是可疑的,因为要使其不引发异常,必须提供31个命令行参数。同样的情况也适用于您在不首先检查args数组长度的情况下访问args数组元素的所有其他尝试。

您的程序有真正的20个参数吗?啊,是的,这是一个愚蠢的错误。仍然在主方法上获取Arrayindexoutofbound错误,但是…@ASCH您看到我的编辑了吗?刚刚看到,谢谢您指出。你会建议我怎么做?@ASCH总是在访问args[I]Nvm之前确保args.length>I,这是我的另一个愚蠢错误。我只需要输入一个整数而不是arg。非常感谢你的帮助!