0

現在の方法 ( http://pastebin.com/VHjM0KeQ ) が長すぎるStringBuilderため、どのように適切に使用できるのか疑問に思っています。ループまたは文字列ビルダーを実行できると確信しています。へ、ありがとう。

4

3 に答える 3

2

引数が 0 の場合と 20 を超える引数の場合を除いて、すべてがほとんど同じStringBuilderであるため、ループと共に a を簡単に使用して、テキストに単語を追加できます。

このような:

if (args.length == 0) {
    player.sendMessage(ChatColor.DARK_RED + "Usage: /pm <Target> <Message>");
} else if (args.length > 20) {
    player.sendMessage(ChatColor.DARK_RED + "Error: Maximum of 20 words.");
} else {
    StringBuilder sb = new StringBuilder();
    sb.append(ChatColor.DARK_AQUA).append("[PM] ");
    sb.append(player.getName() + " > " + targetPlayer.getName());
    sb.append(ChatColor.WHITE);
    for (final String word : args) {
        sb.append(word).append(' ');
    }
    sb.setLength(sb.length - 1);
    targetPlayer.sendMessage(sb.toString());
}

ここではうまく機能するため、配列ループを使用しました。それ以外の

for (final String word : args) {
    sb.append(word).append(' ');
}

あなたも書くことができます

for (int i = 0; i < args.length; i++) {
    sb.append(args[i]).append(' ');
}

2 番目の解決策をもう少しよく理解できます。

于 2012-06-11T10:55:48.067 に答える
0

このようなことを試してください

if(args.length == 0) {
    player.sendMessage(ChatColor.DARK_RED + "Usage: /pm <Target> <Message>");
} else if(args.length > 20 && player.getServer().getPlayer(args[0]) != null){
    player.sendMessage(ChatColor.DARK_RED + "Error: Maximum of 20 words.");
} else {
    StringBuilder argsConcat= new StringBuilder();
    for(int i;i<args.length;i++) {
        argsConcat.append(" "+args[i]);
    }## Heading ##
    targetPlayer.sendMessage(ChatColor.DARK_AQUA + "[PM] " + player.getName() + " > " +        targetPlayer.getName() + ChatColor.WHITE + argsConcat.toString());
}
于 2012-06-11T11:04:02.777 に答える
0

あなたのコードは StringBuilders を使用することでわずかに改善されます。それは本当です:

targetPlayer.sendMessage(ChatColor.DARK_AQUA + "[PM] " 
+ player.getName() + " > " + targetPlayer.getName() 
+ ChatColor.WHITE + " " + args[0])

次のように変更する必要があります。

targetPlayer.sendMessage(
    new StringBuilder()
    .append(ChatColor.DARK_AQUA).append("[PM] ")
    .append(player.getName()).append(" > ")
    .append(targetPlayer.getName()).append(ChatColor.WHITE)
    .append(' ').append(args[0]).build());

注: コンパイラが内部的にこれを行うため、パフォーマンスが大幅に向上することはありません。ただし、コンパイルされたコードはソース コードと一貫性があるため、コードのデバッグが容易になります。StringBuilder.append()そうしないと、デバッグ時に、ソース コードにない呼び出し内でジャンプし続けることになります。

しかし、あなたのコードで見られる主な問題は、多くの if() 句を switch ステートメントに変更する必要があることです。

switch(args.length){
 case 0: dosomething(); break;
 case 1: doSomethingElse();break;
 default: doSomethingEntirelyDifferent();break;
}
于 2012-06-11T10:56:12.160 に答える