如何使列表大小不会始终为零

时间:2015-01-12 16:08:44

标签: java

我在lotto中有一个列表,我在其中插入对象lottoTicket。如下所示

if(choice.equals("P"))
{
   int i = 1;

   System.out.println("Choose a number between 1 and 90:");
   List<Integer> list = new ArrayList<>();
   list.add(s.nextInt());


   LottoTicket lt = new LottoTicket("Prima",money * 60,list, i++);
   Lotto l = new Lotto();
   l.li.add(lt);     

}

我遇到的问题是在乐透中我有li.size(),它总是打印0(因此总是返回0),即使我已经创建了3个对象并将它们分配给列表。以下代码位于乐透类中。

List<LottoTicket> li = new ArrayList();

@Override
public void draw(){

    Random rand = new Random();     

    int[] array = new int[6];


    for (int i = 1; i < array.length ; i++) {  
        array[i] = rand.nextInt(91) + 1;
        System.out.println("Tickets sold: " + li.size());
        System.out.print(""+ array[i] + ",");
    }


}

2 个答案:

答案 0 :(得分:0)

从上面的代码段开始,我不清楚您将数组array的内容添加到li的位置。 draw函数中的for循环仅为array赋值,但从不向列表添加任何内容。值得注意的是,由于您将i = 1初始化为1,因此您只生成存储在array位置1到5中的5个随机数,而array位置0永远不会被访问

答案 1 :(得分:0)

如果没有更多代码,几乎不可能猜到&#39;你的问题可能是什么,但作为一个黑暗的刺,我会假设你的Lotto对象不是全局的。

LottoTicket lt = new LottoTicket("Prima",money * 60,list, i++);
Lotto l = new Lotto();
l.li.add(lt); 

在这里,我觉得你每次都在创建一个新的Lotto对象。相反,为什么不将它定义为类全局,以便您可以保证只有一个对象。像这样:

// Top of the class(global scope)
private Lotto mLotto = new Lotto();

然后你可以在该课程的任何地方访问它,并知道你只是访问了1个对象。

顺便说一下,除非你别无选择(但通常总是有选择!),否则将成员暴露给外部类是非常糟糕的编码,在这种情况下,我会使用像以下内容:

class Lotto {
    // define as private to avoid possible errors later on
    private List<LottoTicket> mTickets = new ArrayList<LottoTicket>();

    // define getter to return the list as a whole
    public List<LottoTicket> getTickets() { return mTickets; }

    // define an add Ticket method to add the data to the object, rather than 
    // access Lotto.li.add etc...
    public void addTicketToList(LottoTicket thisTicket){
        mTickets.add(thisTicket);
    }
}

因此,在上面代码的场景中,您可以使用以下内容:

LottoTicket lt = new LottoTicket("Prima",money * 60,list, i++);

// Replace all this
// Lotto l = new Lotto();
// l.li.add(lt);   

// with
myGlobalLottoObject.addTicketToList(lt);

// And then loop through the collected tickets with something like:
foreach(LottoTicket lt : myGlobalLottoObject.getTickets())
{
    // Do something here with each "lt" object that is returned
} 

您已走上正轨,但您错过了对类和代码结构的一些基本理解。希望这可以帮助您解决问题的根源。

显然,如果这对您没有帮助,那么您必须发布更相关的代码,以便我们能够准确查看您出错的地方。