2016-01-24 38 views
-1

我是一个编程新手。请解释一下,以便初学者能理解。我的数组是空的吗?如果是这样,为什么?错误“java.lang.NullPointerException”

我试图建立一个彩票。 首先我用所需数量的数字填充数组。然后画一个数字。该号码从彩票中删除,并返回到主控台上打印的主号码。这一直重复直到所有的数字都被绘制出来。

这就是我想要的。但是我得到错误“java.lang.NullPointerException”。我的数组是空的吗?如果是这样,为什么?

import java.util.*; 

public class Tombola { 

    private ArrayList<Integer> lottery; 
    private int numbers; 

    public Tombola(int n){ 

    this.numbers = n; 
    ArrayList<Integer> lottery = new ArrayList<Integer>(); 
    for(int i = 0; i < this.numbers; i++){ 
     this.lottery.add(i+1); 
    } 
    } 

    public int draw(){ 
    int drawnNumber = this.lottery.get((int) (Math.random() * numbers)); 
    for(int i = 0; i < numbers; i++){ 
     if(this.lottery.get(i) == drawnNumber){ 
      this.lottery.remove(i); 
      break; 
     } 
    } 
    this.numbers--; 
    return drawnNumber; 
    } 

    public static void main(String[] args) { 

    int x = 10; 
    Tombola jackpot = new Tombola(x); 
    for(int i = 0; i < x; i++){ 
    System.out.println(jackpot.draw()); 
    } 
    } 
} 
+0

定义'lottery'构造之外,作为类成员。 – Maroun

回答

0

你在你的Tombola构造函数初始化本地ArrayList,而不是你的初始化实例变量。这就是你的实例变量保持为空的原因。

变化

ArrayList<Integer> lottery = new ArrayList<Integer>(); 

lottery = new ArrayList<Integer>(); 
0

尝试初始化ArrayList的lotteryconstructor这样的:

public Tombola(int n){ 
    this.numbers = n; 
    lottery = new ArrayList<Integer>(); 
相关问题