Java中的无限循环

Java中的无限循环,java,stringtokenizer,Java,Stringtokenizer,因此,我试图查看输入,并计算符合特定标准的单词(或者更确切地说,排除我不想计算的单词)。错误出现在以下代码中: BufferedReader br; BufferedWriter bw; String line; int identifiers = 0; boolean count = false; try { br = new BufferedReader(new FileReader("A1.input"));

因此,我试图查看输入,并计算符合特定标准的单词(或者更确切地说,排除我不想计算的单词)。错误出现在以下代码中:

    BufferedReader br;
    BufferedWriter bw;
    String line;
    int identifiers = 0;
    boolean count = false;

    try
    {
        br = new BufferedReader(new FileReader("A1.input"));
        line = br.readLine();

        while(line != null)
        {
            StringTokenizer t = new StringTokenizer(line);
            String word;
            System.out.println(t.countTokens()); //for testing, keeps printing 6
            for(int c = 0; c < t.countTokens(); c++)
            {

                word = t.nextToken();
                count = true;
                if(Character.isDigit(word.charAt(0))) //if word begins with a number
                {
                    count = false; //do not count it
                } 
                if(count == true)
                {
                    for(String s : keywords)
                    {
                        if(s.equals(word)) //if the selected word is a keyword
                        {
                           count = false; //do not count it
                        }
                    }
                }

                System.out.println(word); //testing purposes

            }
            word = t.nextToken();
        }

正如上面代码中的注释所述,第一个println语句重复打印6(向我表明while循环是无止境重复的)。第二个“testing purposes”println语句连续地重复打印
INT f2(INT x

您对
while()
的使用仅评估当前行;因此,它从不为
null
。将其更改为
if()
您对
while()的使用
仅对当前行求值;因此,它从不为
null
。将其更改为
if()

看起来您从未真正读取文件的下一行。更改此位:

try
{
    br = new BufferedReader(new FileReader("A1.input"));
    line = br.readLine();

    while(line != null)
    {
为此:

try
{
    br = new BufferedReader(new FileReader("A1.input"));

    while((line = br.readLine()) != null)
    {

看起来您从未真正读取文件的下一行。更改此位:

try
{
    br = new BufferedReader(new FileReader("A1.input"));
    line = br.readLine();

    while(line != null)
    {
为此:

try
{
    br = new BufferedReader(new FileReader("A1.input"));

    while((line = br.readLine()) != null)
    {

确实,line=br.readLine();需要在循环的底部找到。@MeBigFatGuy:那也行。我所建议的只是我习惯于看到的范例,还有一个额外的好处,就是在回答时更加简洁。确实,line=br.readLine();需要在循环的底部找到。@MeBigFatGuy:那也行。我所建议的只是我习惯看到的范例,还有一个额外的好处,就是在回答时更加简洁。