如果语句总是返回false

时间:2014-03-14 23:06:46

标签: java if-statement minecraft bukkit

我有一系列if语句似乎都有效,除非我在命令(Minecraft Bukkit服务器/ API)之后达到两个参数。有两个参数,无论如何都会返回false。我正在使用命令/jukebox play 13来测试它。

当前代码:

        @SuppressWarnings("deprecation")
        public boolean onCommand(CommandSender sender, Command cmd, String commandlabel, String[] args) {
            Player p = (Player) sender;
            if (cmd.getName().equalsIgnoreCase("jukebox")) {
                if (args.length == 0) {
                sender.sendMessage(ChatColor.GOLD + "** " + ChatColor.AQUA + "Jukebox version " + pdFile.getVersion() + ChatColor.GOLD + " **\n" + ChatColor.RED + "Usage: " + ChatColor.LIGHT_PURPLE + "/jukebox play (track)");
                return true;
                }
                if (args.length == 1) {
                    if (args[0].equalsIgnoreCase("play")) {
                        String recordNames = "Stop, 13, Cat, Blocks, Chirp, Far, Mall, Mellohi, Stal, Strad, Ward, 11, Wait";
                        String regex = "\\[|\\]";
                        recordNames = recordNames.replaceAll(regex, "");
                        sender.sendMessage(ChatColor.AQUA + "Track selection: " + ChatColor.GREEN + recordNames + "\n" + ChatColor.AQUA + "Type " + ChatColor.LIGHT_PURPLE + "/jukebox play (track)" + ChatColor.AQUA + " to play a track.");
                        return true;
                    }
                if (args.length == 2 && (args[0].equalsIgnoreCase("play"))) {
                        if (args[1].equalsIgnoreCase("13")) {
                            p.playEffect(p.getLocation(), Effect.RECORD_PLAY, 2256);
                            sender.sendMessage(ChatColor.AQUA + "Now playing " + ChatColor.GREEN + "13" + ChatColor.AQUA + ".");
                            return true;
                        }
                        else {
                            sender.sendMessage(ChatColor.AQUA + "Please enter a valid track name.");
                        }
                }
            }
        }
        return false;
    }
}

有谁知道为什么它会返回false?正如旁注所示,如果您在此处看到任何可以更有效编码的内容,请随时提出建议。

4 个答案:

答案 0 :(得分:2)

你的压力让你失望。你的关闭括号是在错误的地方。您的args.length == 2检查嵌套在args.length == 1检查中。至少你必须:  1.在args.length == 2检查的if语句之前添加一个右括号  2.在返回false语句之前删除右括号。

答案 1 :(得分:2)

看起来支架位置错误:

if (args.length == 1) {
    if (args[0].equalsIgnoreCase("play")) {
        String recordNames = "Stop, 13, Cat, Blocks, Chirp, Far, Mall, Mellohi, Stal, Strad, Ward, 11, Wait";
        String regex = "\\[|\\]";
        recordNames = recordNames.replaceAll(regex, "");
        sender.sendMessage(ChatColor.AQUA + "Track selection: " + ChatColor.GREEN + recordNames + "\n" + ChatColor.AQUA + "Type " + ChatColor.LIGHT_PURPLE + "/jukebox play (track)" + ChatColor.AQUA + " to play a track.");
        return true;
    }

应该是:

if (args.length == 1) {
    if (args[0].equalsIgnoreCase("play")) {
        String recordNames = "Stop, 13, Cat, Blocks, Chirp, Far, Mall, Mellohi, Stal, Strad, Ward, 11, Wait";
        String regex = "\\[|\\]";
        recordNames = recordNames.replaceAll(regex, "");
        sender.sendMessage(ChatColor.AQUA + "Track selection: " + ChatColor.GREEN + recordNames + "\n" + ChatColor.AQUA + "Type " + ChatColor.LIGHT_PURPLE + "/jukebox play (track)" + ChatColor.AQUA + " to play a track.");
        return true;
    }
}

最后注意}。现在,你的代码是这样做的:

if(args.length == 1){
    if(args.length > 1 && args[0].equalsIgnoreCase("play")){
    }
}

总是返回false,因为args的长度不能为1,而且长度也大于1

答案 2 :(得分:1)

正如其他人所说的那样,你的括号嵌套错误了,你错误的代码缩进会误导你。

建议......如果你想在将来避免这种问题:

  1. 更多地关注您的代码风格,特别是缩进。它使您的代码更容易>>您<<阅读。

  2. 使用IDE ...或能够正确缩进Java的智能编辑器。并确保您使用其自动缩进功能。

  3. 如果可能,请将IDE /编辑器配置为使用空格字符而不是TAB字符进行代码缩进。如果您的代码中包含TAB字符,那么它在不同系统上看起来会有所不同(即缩写不正确)。

答案 3 :(得分:0)

正如 shoover 指出,}声明的if (args.length == 1)位置错误。

新代码为:

@SuppressWarnings("deprecation")
        public boolean onCommand(CommandSender sender, Command cmd, String commandlabel, String[] args) {
            Player p = (Player) sender;
            if (cmd.getName().equalsIgnoreCase("jukebox")) {
                if (args.length == 0) {
                    sender.sendMessage(ChatColor.GOLD + "** " + ChatColor.AQUA + "Jukebox version " + pdFile.getVersion() + ChatColor.GOLD + " **\n" + ChatColor.RED + "Usage: " + ChatColor.LIGHT_PURPLE + "/jukebox play (track)");
                    return true;
                }
                if (args.length == 1) {
                    if (args[0].equalsIgnoreCase("play")) {
                        String recordNames = "Stop, 13, Cat, Blocks, Chirp, Far, Mall, Mellohi, Stal, Strad, Ward, 11, Wait";
                        String regex = "\\[|\\]";
                        recordNames = recordNames.replaceAll(regex, "");
                        sender.sendMessage(ChatColor.AQUA + "Track selection: " + ChatColor.GREEN + recordNames + "\n" + ChatColor.AQUA + "Type " + ChatColor.LIGHT_PURPLE + "/jukebox play (track)" + ChatColor.AQUA + " to play a track.");
                        return true;
                    }
                }
                if (args.length > 1 && (args[0].equalsIgnoreCase("play"))) {
                    if (args[1].equalsIgnoreCase("13")) {
                        p.playEffect(p.getLocation(), Effect.RECORD_PLAY, 2256);
                        sender.sendMessage(ChatColor.AQUA + "Now playing " + ChatColor.GREEN + "13" + ChatColor.AQUA + ".");
                        return true;
                    }
                    else {
                        sender.sendMessage(ChatColor.AQUA + "Please enter a valid track name.");
                        return true;
                    }
                }
            }
        return false;