逆の方法は、一連の単語を一度に入力すると機能しますか?Stackを使用して文中の単語を逆転させる
私の仕事は、ユーザーから一連の文字列を読み取る完全なメソッドを作成することでした。ユーザは単語の入力を停止するために「終了」を入力する。次に、入力された方法と逆の順序でストリングを出力します。文字列 "end"を出力しないでください。
スタックを使用してこのタスクを実行します。スタックオブジェクトに対してpush、pop、peek、isEmptyの各メソッドのみを呼び出します。
Enter a word or 'end' to quit: Hello
Enter a word or 'end' to quit: Java
Enter a word or 'end' to quit: World
Enter a word or 'end' to quit: end
You entered (in reverse):
World
Java
Hello
しかし、鉱山は実行されます:ここで
は、実行するようになっている方法です。ここ
Enter a word or 'end' to quit: Hello
Enter a word or 'end' to quit: Java
Enter a word or 'end' to quit: World
Enter a word or 'end' to quit: end
You entered (in reverse): end
は、私がこれまで持っているものです。
import java.util.Scanner;
import java.util.Stack;
import java.util.regex.Pattern;
public class Stack1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "end";
do {
System.out.printf("Enter a word or 'end' to quit: ");
input = scanner.nextLine();
if (input == null || input.length() == 0) {
System.out.println("Invalid! Try again...");
return;
}
} while(!input.equalsIgnoreCase("end"));
String reverse = reverse(input);
System.out.printf("You entered (in reverse): %s", reverse);
}
private static String reverse(String inputString) {
String[] str = inputString.trim().split(Pattern.quote(" "));
Stack stack = new Stack();
for(String input : str) {
stack.push(input);
}
StringBuilder builder = new StringBuilder();
while(!stack.isEmpty()) {
builder.append(stack.pop()).append(" ");
}
return builder.toString();
}
}
あなたがdo-while文の各繰り返しで、あなたの 'input'変数を上書きしているようです。ループ内で文字列を連結することはお勧めしませんが、_reverse_メソッドを呼び出すときに 'StringBuilder'を使用して' String'に変換することはお勧めしませんが、既に入力された 'String'値のレコードを保持する必要があります。 –
誰もOPが文字列を連結することを提案しているのはなぜですか?それは間違いです。入力された各単語はループ内のスタックに追加する必要があります。 – tima
@ティムラ。元の質問には、単語がスペースで区切られた単一の文字列を必要とする 'reverse()'の実装が含まれていたためです。なぜOPが自分のポストを荒らしたのか分かりません。 – shmosel