当我使用break时从“for循环”中获取String

时间:2013-04-06 15:59:23

标签: java loops break minecraft bukkit

我有以下代码块(它是bukkit服务器的插件[我的游戏])

            msg = lang.getString("Kick", "null"); //default msg.
            msg = msg.replace("\\n", "\n");
            int i = 0;
            Player target = null;
            for (i = 0; i < args.length; i++) {
                if (args[i].equalsIgnoreCase("-")){
                    StringBuilder sb = new StringBuilder();
                    for (int ii = i+1; ii < args.length; ii++) {
                            sb.append(args[ii]).append(" ");
                    }
                    msg = sb.toString().trim(); // - that msg I need
                    break;
                } 
                target = (Bukkit.getServer().getPlayer(args[i]));
                target.kickPlayer(msg); // <--- here

如何从循环中获取“msg”字符串 代码必须像以下一样工作:
播放器类型命令/命令target1 target2 - r e a s o n
然后代码:
获得目标1 获得目标2 获取target3但target3为' - '。然后' - '之后的每个args都是原因(msg)。 (然后我必须打破循环才能获得玩家)
并用原因(msg)踢target1。用目标(msg)踢target2。
但是如果玩家类型/命令target1 target2 ... target999
然后按默认原因踢它。

1 个答案:

答案 0 :(得分:0)

首先,你通过参数的方式在这种情况下并不是最好的。请改用for (String argument : args)。另一件事:你不能在break之后的循环中执行代码。

现在你的问题。您想要查看参数并检查它是否为--之后的所有内容都应添加到String。该字符串具有默认值。如果有-,则应删除默认值,该值应为-之后的所有内容。

boolean read = false;
String msg = "default message";
List<String> players = new ArrayList<String>();

for (String argument : args) {
    if (!read && !argument.equalsIgnoreCase("-")) {
        players.add(argument);
    } else if (!read && argument.equalsIgnoreCase("-")) {
        read = true;
        msg = "";
    } else {
        msg += argument;
    }
}

for (String player : players) {
    Player target = Bukkit.getServer().getPlayer(player);
    target.kickPlayer(msg);
}

为此,您需要一个布尔值,消息字符串和一个列表,其中应保存所有目标名称。此代码遍历所有参数。

如果布尔值为false且参数不是-,则参数将保存在播放器列表中。否则,如果布尔值为false但参数为-,则布尔值设置为true,并删除字符串的默认值。否则(参数是消息的一部分)参数附加到字符串。

毕竟还有另一个循环,插件会通过添加到列表中的所有玩家,然后踢他们显示输入的消息。

干杯!