gpt4 book ai didi

java - 队列/链表程序中的 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 23:08:11 25 4
gpt4 key购买 nike

  1 // This program helps staff manage customers'
2 // orders and decide who should be given a ready dish.
3
4 import java.util.*;
5
6 // This class represents all orders of customers
7 class ListOrder {
8
9 // Data member
10 private int numDishes;
11 // All dishes which the restaurant offers
12 private String[] dishes;
13 // Each dish has a queue of customers who ordered this dish
14 // All such queues are put inside an ArrayList called dishQueues
15 private ArrayList<Queue<Integer>> dishQueues;
16
17 // Constructor
18 public ListOrder(int numDishes, Scanner sc) {
19 this.numDishes = numDishes;
20 dishes = new String[this.numDishes];
21 for(int i=0;i<this.numDishes;i++) {
22 dishes[i] = new String(sc.nextLine());
23 dishQueues.add(new LinkedList<Integer>());
24 }
25 }
26
27 // Add new order to the list
28 public void addNewOrder(int dishID, int tag) {
29 dishQueues.get(dishID-1).offer(new Integer(tag));
30 }
31
32 // Process food when it is ready
33 // Return the customer who currently ordered for the dish
34 // if there is no customer order for this dish return -1
35 public int processReadyFood(int dishID) {
36 int ready=0;
37 if (dishQueues.get(dishID-1).peek() == null)
38 return -1;
39 else
40 ready = dishQueues.get(dishID-1).poll();
41
42 return ready;
43 }
44
45 // Get dish's name
46 public String getDishName(int dishID) {
47 return dishes[dishID-1];
48 }
49
50 }
51
52 public class QuickEat {
53
54 public static void main(String [] args) {
55
56 Scanner sc = new Scanner(System.in);
57 int numDishes = sc.nextInt();
58 String command;
59 sc.nextLine();
60
61 // Create the list order of food
62 ListOrder listOrder = new ListOrder(numDishes, sc);
63
64 int noOfCommands = sc.nextInt();
65 sc.nextLine();
66
67 // Process commands
68 for(int i=0; i<noOfCommands;i++) {
69 command = sc.next();
70 if(command.equals("Order")) {
71 int tag = sc.nextInt();
72 int numOfDishes = sc.nextInt();
73 for(i=0;i<numOfDishes;i++)
74 listOrder.addNewOrder(sc.nextInt(),tag);
75 }
76 else if(command.equals("Ready")) {
77 int dishID = sc.nextInt();
78 int customer = listOrder.processReadyFood(dishID);
79 if(customer == -1)
80 System.out.println("Throw away " + listOrder.getDishName(dishID));
81 else
82 System.out.println(listOrder.getDishName(dishID) + " ready to be served to Tag " + customer);
83 }
84 }
85 }
86 }

我对代码的其他部分没有太大问题,但如果有,请向我突出显示!我遇到的主要问题是当我输入

3
Fish n Chips

我不断收到此错误

Exception in thread "main" java.lang.NullPointerException
at ListOrder.<init>(QuickEat.java:23)
at QuickEat.main(QuickEat.java:62)

我似乎无法在任何地方发现错误。有什么帮助吗? :/

已编辑:感谢大家的评论。我还收到另一个错误。我认为这与你们所说的初始化问题是一样的

当我进入时

3
Fish n Chips
Chicken Chop
Grilled Salmon
9
Order 1 2 1 3

我收到此错误。

Exception in thread "main" java.lang.NullPointerException
at ListOrder.addNewOrder(QuickEat.java:30)
at QuickEat.main(QuickEat.java:75)

救命! :(

最佳答案

private ArrayList<Queue<Integer>> dishQueues;

未实例化

private ArrayList<Queue<Integer>> dishQueues = new ArrayList<Queue<Integer>>();

使用之前。

甚至

private List<Queue<Integer>> dishQueues = new ArrayList<Queue<Integer>>();

关于java - 队列/链表程序中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22457208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com