0

我有一个数组列表,其中包含代表一个人的整数。我想为每第四个人分配一个表号,但该数组列表中有超过 4 个人,所以我想

  • 将接下来的 4 人分配到不同的桌子,然后
  • 4 人之后换了一张新桌子

我怎样才能做到这一点?

这是我迄今为止尝试过的:

    try {
        String[] toernooi = toernooien2.getSelectedItem().toString().split(" ");

        PreparedStatement stat = con.prepareStatement("SELECT speler FROM fullhouse.inschrijving_toernooi WHERE IT_betaaldatum is not null AND toernooi = ?;");
        stat.setString(1, toernooi[0]);
        ResultSet resultaat = stat.executeQuery();
        ArrayList<Integer> array = new ArrayList<>();

        PreparedStatement stat2 = con.prepareStatement("INSERT INTO fullhouse.indeling (person,tablenumber,ronde) VALUES (?,?,?)");

        for (int i = 1; resultaat.next(); i++) {
            stat2.setInt(1, resultaat.getInt(1));
            array.add(resultaat.getInt(1));
            stat2.execute();

            for (Integer arrayitem : array) 
            {

            }

        }
4

3 回答 3

1

您可以使用整数除法来避免担心其他变量或重置。我已经用普通循环替换了迭代器,因为如果我们有一个计数器来计算列表,那么使用循环变量似乎更优雅:

private List<Integer> assign (List<Integer> guestList) {

    int size = guestList.size();

    for (int i = 0; i < size; i++) {

        guestList.add(i, i/4);

    }
        return guestList;
}

假设:

  • .size() 方法获取客人数量
  • 第一个表号应该为零
  • 输入 List 的大小不会超出整数除法范围

这是我的第一个答案-感谢评论:)

于 2013-01-22T16:55:35.353 回答
1

有一个计数器并在迭代时检查计数器,并在第 4 次迭代时将计数器恢复为 1 并分配给一个新表。

int counter=1;
for(Person p: list){
if(counter==4) {
//assing to a different table
counter=1;
continue;
}
//assign to an normal table
counter++;

}
于 2013-01-22T16:10:59.613 回答
0

您应该在 for 循环中保留某种计数器。当该计数器达到 4 时,您应该重置它并相应地更改正在发生的事情。冲洗并重复。我留给你一些更精细的实现细节,因为很难准确地说出你是如何做和管理一些事情的。

int counter = 0;
for (Integer arrayitem : array) 
    {
            counter++;
            assign to table;
            if (counter == 4)
            {
                change what table we are now assigning to;
                counter = 0;
            }
    }
于 2013-01-22T16:10:23.747 回答