为什么这会无限/多次显示输出?

时间:2012-07-22 08:37:35

标签: java string infinite-loop

以下此程序在运行时不会停止。我不认为我犯了一个重大错误,但请帮助我,因为我是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. 无限次。

非常感谢你!

3 个答案:

答案 0 :(得分:3)

看看这个:

 while (tokens.hasMoreTokens())

你永远不会抓取下一个令牌。因此,如果它返回真实,它将永远这样做。你可能想要(在while循环中):

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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