Java 两个变量相同,甚至应该不同的原因是什么?

Java 两个变量相同,甚至应该不同的原因是什么?,java,minecraft,bukkit,Java,Minecraft,Bukkit,我正在试着在minecraft案例开瓶器中编写插件。我有这个问题,因为无论何时变量current_item和变量next是相同的,甚至应该是不同的 Inventory inv = Bukkit.createInventory(null, InventoryType.CHEST, "Losowanie"); ItemStack rnditem = new ItemStack(Material.STICK); ItemStack current_item = new ItemStack(Mate

我正在试着在minecraft案例开瓶器中编写插件。我有这个问题,因为无论何时变量current_item和变量next是相同的,甚至应该是不同的

Inventory inv = Bukkit.createInventory(null, InventoryType.CHEST, "Losowanie");

ItemStack rnditem = new ItemStack(Material.STICK);

ItemStack current_item = new ItemStack(Material.APPLE);
ItemStack next = new ItemStack(Material.STICK);

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

    Random rand = new Random();

    switch(rand.nextInt(2)) {
        case 0:
            rnditem.setType(Material.DIAMOND);
            break;
        case 1:
            rnditem.setType(Material.GOLDEN_APPLE);
            break;
    }


    inv.clear();

    current_item = next;
    next = rnditem;

    inv.setItem(13, current_item);
    inv.setItem(14, next);

    p.updateInventory();

    Thread.sleep(i*100);
}

不同的变量用于保存移位引用,但rnditem从未设置为新引用

switch(rand.nextInt(2)) {
    case 0:
        rnditem.setType(Material.DIAMOND);
        break;
    case 1:
        rnditem.setType(Material.GOLDEN_APPLE);
        break;
}
应该是

switch(rand.nextInt(2)) {
    case 0:
        rnditem = new ItemStack(Material.DIAMOND);
        break;
    case 1:
        rnditem = new ItemStack(Material.GOLDEN_APPLE);
        break;
}

当您写入current_item=next时,您使所有3个itemstack引用相同的对象;next=rnditem;。如果不希望对其中一个对象的更改影响其他对象,则需要复制这些对象。我会写一个答案,但我不知道这些对象是什么,所以我真的不能说你将如何复制它们;在循环之前,您需要在循环的每次迭代中睡眠越来越多的时间,而不是恒定的睡眠时间time@phflack这是有意的行为,我希望物体的运动比做一个循环要慢。每当项目必须再次绘制时,那么随机必须在循环中,所以第一个项目应该是即时的,100毫秒后的第二个,200毫秒后的第三个,依此类推,直到项目之间的延迟为1.5秒?而且不确定为什么Random必须在循环中,您每次都在制作一个新的Random生成器,而不是重复使用它。Random.NextInt将在每次调用时生成一个新的Random int