Java 两个变量相同,甚至应该不同的原因是什么?
我正在试着在minecraft案例开瓶器中编写插件。我有这个问题,因为无论何时变量current_item和变量next是相同的,甚至应该是不同的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
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