Java 阵列问题

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

我在开发Bukkit插件时遇到了一个数组问题。为什么这样不行?它应该检查玩家是否已经放置了挡块。它一直在说钻石!!英格梅

@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这样的东西也可以,而且你不会每次都把它转换成一个列表