Java 阵列问题
我在开发Bukkit插件时遇到了一个数组问题。为什么这样不行?它应该检查玩家是否已经放置了挡块。它一直在说钻石!!英格梅Java 阵列问题,java,bukkit,Java,Bukkit,我在开发Bukkit插件时遇到了一个数组问题。为什么这样不行?它应该检查玩家是否已经放置了挡块。它一直在说钻石!!英格梅 @EventHandler public void OnPlaceofDiamond(BlockPlaceEvent e){ Player player = e.getPlayer(); String storage[] = new String[100]; int i = 0; if(e.getBlock().getType() == Ma
@EventHandler
public void OnPlaceofDiamond(BlockPlaceEvent e){
Player player = e.getPlayer();
String storage[] = new String[100];
int i = 0;
if(e.getBlock().getType() == Material.DIAMOND_BLOCK){
if(Arrays.asList(storage).contains(player.getName())){
player.sendMessage(ChatColor.BLUE + "You are on the list");
}else{
player.sendMessage(ChatColor.BLUE + "DIAMONDS!!");
storage[i] = player.getName();
i++;
}
}
}
您的问题是,每次调用BlockPlaceEvent事件时,都会创建一个全新的存储阵列。如果不希望在每次事件调用时重新创建存储,则必须将其放置在方法声明之外,如下所示:
String storage[] = new String[100];
@EventHandler
public void OnPlaceofDiamond(BlockPlaceEvent e) {
Player player = e.getPlayer();
int i = 0;
//The rest of your code below
}
这是因为每当玩家放置块时,您都会创建一个新的存储阵列:
@EventHandler
public void OnPlaceofDiamond(BlockPlaceEvent e){
Player player = e.getPlayer();
String storage[] = new String[100];
所以你永远不会有完整的球员名单。要解决此问题,应在方法外部声明数组:
String storage[] = new String[100];
@EventHandler
public void OnPlaceofDiamond(BlockPlaceEvent e) {
Player player = e.getPlayer();
int i = 0;
if(e.getBlock().getType() == Material.DIAMOND_BLOCK){
if(Arrays.asList(storage).contains(player.getName())){
player.sendMessage(ChatColor.BLUE + "You are on the list");
}
else{
player.sendMessage(ChatColor.BLUE + "DIAMONDS!!");
storage[i] = player.getName();
i++;
}
}
}
您给出的代码将始终将播放器名称添加到存储器[0],因为每次调用该方法时,存储器[i]=player.getName始终将i作为0。这可能是在写你想要检查的玩家名字吗?为什么你还要用数组来做这件事,而像LinkedList这样的东西也可以,而且你不会每次都把它转换成一个列表