我有一系列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?正如旁注所示,如果您在此处看到任何可以更有效编码的内容,请随时提出建议。
答案 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)
正如其他人所说的那样,你的括号嵌套错误了,你错误的代码缩进会误导你。
建议......如果你想在将来避免这种问题:
更多地关注您的代码风格,特别是缩进。它使您的代码更容易>>您<<阅读。
使用IDE ...或能够正确缩进Java的智能编辑器。并确保您使用其自动缩进功能。
如果可能,请将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;