【问题标题】:Why does this display the output infinitely / many times?为什么这会无限/多次显示输出?
【发布时间】:2012-07-22 08:37:34
【问题描述】:

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

非常感谢!

【问题讨论】:

    标签: java string infinite-loop


    【解决方案1】:

    看看这个:

     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(". ");
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2022-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-06
          • 1970-01-01
          相关资源
          最近更新 更多