일련의 단어를 한꺼번에 입력하면 역방향 방법이 작동합니까?Stack을 사용하여 문장의 단어를 뒤집기
내 임무는 다음과 같습니다. 사용자로부터 일련의 문자열을 읽는 완벽한 방법을 작성합니다. 사용자는 "end"를 입력하여 단어 입력을 중지합니다. 그런 다음 입력 된 순서의 역순으로 문자열을 출력하십시오. 문자열 "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
을하지만 내 실행 :
이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();
}
}
당신이 루프 동안 할 일의 각 반복에서 당신의'input' 변수를 덮어 쓰는 것 같다. 루프 내에서 문자열을 연결하는 것을 권장하지 않지만, _reverse_ 메소드를 호출 할 때'StringBuilder'를 사용하여'String'으로 변환 할 것을 권장하지만, 이미 입력 된'String' 값의 레코드를 유지해야합니다. –
누구나 OP가 문자열을 연결하도록 제안하는 이유는 무엇입니까? 그건 잘못된 것입니다. 입력 된 각 단어는 루프의 스택에 추가되어야합니다. – tima
@ 티 무라. 원래의 질문에는 단어가 공백으로 구분 된 단일 문자열을 예상하는'reverse()'구현이 포함 되었기 때문입니다. 왜 OP가 자신의 게시물을 왜곡 한 것인지 잘 모르겠습니다. – shmosel