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