0

下面的这个程序在运行时不会停止。我不认为我犯了重大错误,但请帮助我,因为我是 Java 新手。

import java.util.*;
    public class ReverseWords {
    public static void main( String args[] ) {
        String paragraph;
        Scanner input = new Scanner (System.in);

        System.out.print("Enter a paragraph: ");
        paragraph = input.nextLine();
        paragraph = paragraph.trim();
        StringTokenizer tokens = new StringTokenizer(paragraph, ".");
        while (tokens.hasMoreTokens()){

            for (int i = paragraph.length() - 1; i>=0; i--) {
                System.out.print(paragraph.charAt(i));
            }
            System.out.print(". ");
        }
        System.out.println();
    }
    }

当我输入时: The quick brown fox. Jumps over. The lazy dog.
它输出: .god yzal ehT .revo spmuJ .xof nworb kciuq ehT. 无限次。

非常感谢!

4

3 回答 3

3

看这个:

 while (tokens.hasMoreTokens())

您永远不会获取下一个令牌。因此,如果它返回 true,它将永远如此。您可能想要(在 while 循环中):

String token = tokens.nextToken();
for (int i = token.length() - 1; i >= 0; i--) {
    System.out.print(token.charAt(i));
}
System.out.print(". ");

那是假设您要反转每行中的每个部分句子。目前还不清楚你的目标是什么。

于 2012-07-22T08:41:48.470 回答
2

您甚至从未tokenizer在循环中使用过。因此,hasMoreTokens()始终返回 true。

于 2012-07-22T08:41:35.323 回答
0

我从未使用过 Java,但除非“StringTokenizer”非常奇怪:您的 while 循环检查“hasMoreTokens”,但循环体从不删除标记。所以它总是会有更多的令牌......

于 2012-07-22T08:44:48.147 回答