在Java中创建无限循环错误

时间:2014-08-01 09:19:28

标签: java string while-loop

我试图在我的词频 java 代码中实现无限循环。此代码的目标是使用main方法java创建一个程序来分析从用户输入的文本文本。

他们通过将文本输入扫描仪来执行此操作,然后由程序进行分析。

import java.util.Scanner;

public class WordFreq { 

public static void main (String[] args) {

     Scanner input = new Scanner(System.in);

            System.out.println("Enter text: "); 
            String s;
                s = input.nextLine();
                System.out.println("" + s);

          String[] strings = s.split(" ");
          int[] counts = new int[6];
          for(String str : strings)
               if(str.length() < counts.length) counts[str.length()] += 1;
          for(int i = 1; i < counts.length; i++)
              System.out.println(i + " letter words: " + counts[i]);




          input.close();}
}

然后,用户可以反复输入要分析的文本。 我有这段代码,它已经有了无限的时间,但是当我尝试合并这两个代码时,我一直都会遇到错误。

import java.util.Scanner;
public class WhileLoop {



public static void main(String args[])
{
    Scanner scan = new Scanner(System.in);
    String line="";


    while((line=scan.nextLine())!=null)
    {

        String tokens [] = line.split(" ");
        for(int i=0;i&lt;tokens.length;i++)
        {
            System.out.println(tokens[i]);
        }


    }


}

我不是最好的java,而且我不希望任何人只是递给我代码,但是如果有人能给我一些我应该做的提示或只是指出我正确的方向它会非常感谢。

2 个答案:

答案 0 :(得分:1)

您还没有说明如何实际合并您的代码以及您获得的错误类型,但您的while循环不好。您需要等待用户输入INSIDE“无限”循环。

while(true){ //Infinite loop
    Scanner in = new Scanner(System.in);
    while(in.hasNextLine())//Check for input
        System.out.println(in.nextLine()); //Process input
}

这样每次用户按下'Enter'你都会处理他的输入。当然你可以用in.nextLine()' or in.next()做任何你喜欢的事情,而你的while循环可能有一个结束条件因为我怀疑你想要一个100%无限循环,但结构应该是相同的。希望这会有所帮助。

编辑:尝试以下代码:

while(true){

    Scanner input = new Scanner(System.in);

    System.out.println("Enter text: "); 
    String s;
    s = input.nextLine();
    System.out.println("" + s);

    String[] strings = s.split(" ");
    int[] counts = new int[6];
    for(String str : strings)
        if(str.length() < counts.length) counts[str.length()] += 1;
    for(int i = 1; i < counts.length; i++)
        System.out.println(i + " letter words: " + counts[i]);

} 

虽然你不太可能需要一个真正的无限循环,所以考虑在你的while循环中加入一些停止条件。

答案 1 :(得分:0)

这有点令人困惑,但无论如何我还是试试 如果你合并了两个代码块,那么你应该尝试在while循环中打印count [i]而不是token [i]。并且循环的限制应该是count.Length not token.Length。
现在,如果我没有错,这将打印1到5个字母的频率,从代码的第一个块无限地接收输入。