簡體   English   中英

檢查Bukkit中是否已經存在用於游戲模式的游戲[意外結果]

[英]Checking if a game for game mode already exists in Bukkit [Unexpected Result]

大家好,我正在為Bukkit創建游戲模式,並且遇到了一個問題,此刻似乎讓我感到困惑。 也許我只是在看一些東西,所以如果我能再有雙眼睛看這段代碼,我將非常感激。 這是我的情況,我有一個創建游戲的命令。 這是一個類Type。 每次使用/ newgame命令時,它將添加到ArrayList中。 現在應該檢查名稱是否存在的游戲。 它僅適用於第一個游戲名稱。 因此,如果我制作了一個名為“ game1”的游戲,然后再次嘗試制作“ game1”,它將返回“無法創建名稱為game1的游戲”,但是當我制作另一個游戲時,例如如果我添加了游戲“ game2”,然后我再次制作“ game2”,它允許創建它。 它似乎只適用於制作的第一個游戲。 如果有人可以提供幫助,那將有很大幫助,所以在此先感謝。

注意:Main.games.size()總是上升,因此正在創建游戲,但是僅第一個游戲不能再創建,之后的任何游戲由於某種原因可以具有相同的名稱。

這是我的CommandExecuter中的代碼片段

if (cmd.equalsIgnoreCase("newgame")){
        Player player = sender.getServer().getPlayer(sender.getName());
            if (Main.games.size() == 0){
                Main.games.add(new Game(args[0]));
                player.sendMessage(ChatColor.GREEN + "Game Created. To join Type " + ChatColor.ITALIC + "/join " + args[0]);
                return true;
            }else{
                //Loop and Check
                Game game;
                for (int i = 0; i < Main.games.size(); i++){
                    game = Main.games.get(i);
                    if (game.getName().equalsIgnoreCase(args[0]) == false){
                        Main.games.add(new Game(args[0]));
                        player.sendMessage(ChatColor.GREEN + "Game Created. To join Type " + ChatColor.ITALIC + "/join " + args[0]);
                        //debug
                        player.sendMessage(Main.games.size() + ""); // + "" id
                        return true;
                    }else{
                        //Tells that a game already exists with that name.
                        player.sendMessage(ChatColor.RED + "Can not create game with the name of " + args[0]);
                        return true;
                    }
                }   
            }

您的代碼僅檢查列表中第一個游戲的名稱。 如果第一個游戲匹配,則返回的代碼是正確的,因為它已經知道名稱是重復的。 但是,如果第一個游戲的名稱不匹配,則代碼不應返回。 我們只知道新游戲不是第一個游戲的副本,但是我們不知道它是否是列表中其他游戲的副本。 該代碼應繼續檢查列表中其余的游戲。 只有在沒有游戲名稱匹配后,此代碼才返回。

將您的else子句更改為以下內容。

Game game;
for (int i = 0; i < Main.games.size(); i++){
    game = Main.games.get(i);
    if (game.getName().equalsIgnoreCase(args[0]) == false){
        // Do not return here. Instead, continue to check the rest of the list
        continue;
    }else{
        //Tells that a game already exists with that name.
        player.sendMessage(ChatColor.RED + "Can not create game with the name of " + args[0]);
        return true;
    }
}
// We have reached the end of the loop so we now know that none of the 
// games in the list match. Now we can return.
Main.games.add(new Game(args[0]));
player.sendMessage(ChatColor.GREEN + "Game Created. To join Type " + ChatColor.ITALIC + "/join " + args[0]);
//debug
player.sendMessage(Main.games.size() + "");
return true;

似乎您仍在學習Java,所以我不想為您提供完整的代碼解決方案,僅作解釋。

遍歷循環以查看數組中是否包含某些項時,除非檢查所有項目,否則無法返回錯誤結果。

您在這里輸入錯誤-您將新名稱與第一項進行比較。 如果名稱不同-您將創建一個新游戲。

您應該做什么-您應該添加一個布爾變量isFound並將其設置為false。 遍歷所有游戲並檢查名稱是否存在。 如果是這樣-將isFound更改為true並中斷循環。 循環結束后,應檢查isFound狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM