为什么我的Java数组列表实现不能正常工作

时间:2014-11-17 11:59:48

标签: java

我尝试创建一个名为ArrayListcheckout1checkout2的{​​{1}}的三个实例,但我遇到了一些问题。我试着调用我的方法checkout3但它不起作用,我无法找出原因。

customer1.Add()

感谢。我现在已修复它,所以看起来像这样:

import java.util.*; 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class main {
    public static void main(String[] args){
        int MAX_SIZE = 100;
        CheckOut[] checkout1 = new CheckOut[MAX_SIZE];
        checkout1[0].AddCustomer(RandCustomer());
        System.out.println(checkout1.Size());
    }
    public static int RandCustomer(){
        Random rand = new Random();
        int  items = rand.nextInt(4) + 1;
        return items;
    }
}


import java.util.*; 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

public class CheckOut {
    private ArrayList<Integer> customers = new ArrayList<Integer>();
    public void AddCustomer(int i){
        customers.add(i);
        return;
    }
    public int SizeCustomer(){
        return customers.size();
    }
}

4 个答案:

答案 0 :(得分:2)

    CheckOut[] checkout1 = new CheckOut[MAX_SIZE];
    checkout1[0].AddCustomer(RandCustomer());

您忘记创建CheckOut的实例并将其分配给checkout1[0]。因此,您可能获得NullPointerException

将其更改为:

    CheckOut[] checkout1 = new CheckOut[MAX_SIZE];
    checkout1[0] = new CheckOut();
    checkout1[0].AddCustomer(RandCustomer());

答案 1 :(得分:1)

您需要创建一些CheckOut对象。

这一行

CheckOut[] checkout1 = new CheckOut[MAX_SIZE];

创建一个可以包含对Checkout对象的引用的数组,但是当前 所有这些引用都是空引用。

您可以通过创建一些新的Checkout对象来初始化数组:

for (int i = 0; i < checkout1.length; i++) {
   checkout1[i] = new Checkout();
}

答案 2 :(得分:1)

几个问题:

  • 您定义了数组初始化它,但您在使用之前从未初始化Checkout对象。所以你应该这样做:

    CheckOut[] checkout1 = new CheckOut[MAX_SIZE]; 
    checkout1[0] = new CheckOut();
    checkout1[0].AddCustomer(RandCustomer());
    
  • 在结帐课程中,您定义了SizeCustomer方法,并尝试访问:

    的System.out.println(checkout1.Size());

哪个错了,编译器不满意。你应该这样称呼:

System.out.println(checkout1.SizeCustomer());

答案 3 :(得分:0)

您已创建CheckOut数组,初始值为null,因此您需要在调用其元数据之前循环此数组的所有实例以创建实例,如下所示:

for (int i = 0; i < checkout1.length; i++) {
  checkout1[i] = new Checkout();
}