错误if语句的java帮助

错误if语句的java帮助,java,Java,伙计们,这更像是一个java问题,但我试图看看我在3个不同的if语句中犯了什么错误。。第一个和第二个有一些错误,而第三个工作正常 好吧,这就是它的工作原理 /命令arg arg /命令arg arg playername /命令arg arg-g /命令arg arg-g playername /命令arg arg playername-g 所以-g和playername可以位于不同的侧面 第一个if语句 if (args.length == 3) { if (args[2].equal

伙计们,这更像是一个java问题,但我试图看看我在3个不同的if语句中犯了什么错误。。第一个和第二个有一些错误,而第三个工作正常 好吧,这就是它的工作原理

/命令arg arg

/命令arg arg playername

/命令arg arg-g

/命令arg arg-g playername

/命令arg arg playername-g

所以-g和playername可以位于不同的侧面

第一个if语句

if (args.length == 3) {
    if (args[2].equalsIgnoreCase("-g")) {
        glo = true;
    } else {
        if (Bukkit.getPlayer(args[2]) != null) {
            k = args[2];
        } else {
            sender.sendMessage(ChatColor.RED + args[2] + " is not a player3");
        }
    }
}

if (args.length == 4) {
    if (args[3].equalsIgnoreCase("-g")) {
        glo = true;
    } else {
        if (Bukkit.getPlayer(args[3]) != null) {
            k = args[3];
        } else {
            sender.sendMessage(ChatColor.RED + args[3] + " is not a player4");
        }
    }
}
出了什么问题:

/命令arg arg错误playername-g

我没有注意到我的名字是不是错了

第二个呢

if (args.length > 2) {
    if (args[2].equalsIgnoreCase("-g") || ((args.length == 4) && (args[3].equalsIgnoreCase("-g")))) {
        glo = true;
    }
    if (args.length > 2) {
        if (Bukkit.getPlayer(args[2]) != null) {
            k = args[2];
        } else if (args.length == 4 && Bukkit.getPlayer(args[3]) != null) {
            k = args[3];
        } else {
            if (Bukkit.getPlayer(args[2]) == null) {
                sender.sendMessage(ChatColor.RED + args[2] + " is not a player1");
            } else if (Bukkit.getPlayer(args[3]) == null) {
                sender.sendMessage(ChatColor.RED + args[3] + " is not a player2");
            }
        }
    }
}
出了什么问题:

/命令arg arg-g

给我一个错误-g不是一个球员的名字

第三个很好用

if (args.length == 3) {
    if (args[2].equalsIgnoreCase("-g")) {
        glo = true;
    } else {
        if (Bukkit.getPlayer(args[2]) != null) {
            k = args[2];
        } else {
            sender.sendMessage(ChatColor.RED + args[2] + " is not a player5");
        }
    }
} else if (args.length == 4) {
    if (args[2].equalsIgnoreCase("-g")) {
        glo = true;
    } else {
        if (Bukkit.getPlayer(args[2]) != null) {
            k = args[2];
        } else {
            sender.sendMessage(ChatColor.RED + args[2] + " is not a player6");
        }
    }
    if (args[3].equalsIgnoreCase("-g")) {
        glo = true;
    } else {
        if (Bukkit.getPlayer(args[3]) != null) {
            k = args[3];
        } else {
            sender.sendMessage(ChatColor.RED + args[3] + " is not a player7");
        }
    }
}
sender.sendMessage("2:" + " glo: " + glo + "  k: " + k);    
我只想找出第一和第二节的错误 如果有一种更短/更快的方法可以做到这一点
下面是在eclipse中使用ctrl+f的完整代码

我宁愿将其重新编写为更易于遵循和维护的代码:

public static void parseCommand(String[] args) {

    String playerName = null;
    List<String> argsLst = Arrays.asList(args);              
    if (argsLst.contains("-g")) {
        argsLst.remove("-g");
        // do your logic for '-g' switch
        // ...
    }
    // now you have only two options:
    // /command arg arg
    // /command arg arg playername
    if (argsLst.size() == 3) {
        playerName = argsLst.remove(2);
    }

    // now we've got:
    // /command arg arg
    // so continue dealing with the two 'arg's
    // ...
}
publicstaticvoidparseCommand(字符串[]args){
字符串playerName=null;
List argsLst=Arrays.asList(args);
if(argsLst.contains(“-g”)){
argsLst.remove(“-g”);
//执行'-g'开关的逻辑
// ...
}
//现在您只有两个选项:
///command arg arg
///command arg arg playername
如果(argsLst.size()==3){
playerName=argsLst.remove(2);
}
//现在我们有:
///command arg arg
//所以,继续处理这两个“arg”
// ...
}

尝试使用Commons CLI:。此缩进无法读取您的代码。如果缩进正确,您可能会自己发现问题。我没有收到命令行输入,我从chatAs@kruemel获得用户输入,Commons CLI易于使用、稳定,解决了这个问题。不要重新发明轮子。在第一个轮子上,你说if(args[3].equalsIgnoreCase(“-g”)),然后将glo标记为true,否则搜索玩家名称。如果最后一个选项是长度为4的-g,这意味着playername必须位于索引2处,但是由于您的If,它在找到-g后停止。很好,如果它是“-g arg arg”或“arg-g arg playername”或…@kruemel,这也会起作用!在这个实现中,顺序并不重要,同时哪个是好的,哪个是坏的:)如果OP想要“强制”一个顺序,那么只允许一个顺序并在实现中使用一个数组是有意义的,或者,为了给这个impl添加一些验证,因为我有for循环,所以我正在通过每个参数非法登录,我没有任何订单atm,如果我添加更多的参数和/或名称,它就会工作