Java 为什么我的程序永远达不到解决方法?

Java 为什么我的程序永远达不到解决方法?,java,inputstream,Java,Inputstream,抱歉,如果这是一个愚蠢的问题,但我是一个使用StreamTokenizer的初学者,我正在尝试解决这个练习,请帮助我,我不知道我的程序中有什么错误,从来没有达到我的解决方法,它也从来没有结束,我已经在timus论坛上问过,但我知道在这里更快地得到答案 import java.io.*; public class Prueba { static int index = 0; static double[] l = new double[131072]; public s

抱歉,如果这是一个愚蠢的问题,但我是一个使用StreamTokenizer的初学者,我正在尝试解决这个练习,请帮助我,我不知道我的程序中有什么错误,从来没有达到我的解决方法,它也从来没有结束,我已经在timus论坛上问过,但我知道在这里更快地得到答案

import java.io.*;

public class Prueba {
    static int index = 0;
    static double[] l = new double[131072];

    public static void main(String args[]) throws IOException {
        StreamTokenizer str = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        while (((str.nextToken() != StreamTokenizer.TT_EOF))) {
            if (str.ttype == StreamTokenizer.TT_NUMBER) {
                l[index++] = str.nval;
                //System.out.println(str.nval);
                // System.out.println(l[0]);
                // System.out.println(l[1]);
            }
        }
        solve();
    }

    public static void solve() {
        double res;
        for (int i = index - 1; i >= 0; i--) {
            res = Math.sqrt(l[i]);
            System.out.println(String.format("%.4f\n", res));
        }
    }
}

您正在等待System.in,它在读取时阻塞,因此,您将永远无法到达EOF,因此while循环将继续等待输入。

您正在从标准输入读取,并且您的代码将循环,直到它获得
TT\u EOF
。要将
TT\U EOF
输入程序,如果使用Unix,则需要按
Ctrl-D
;如果使用Windows,则需要按
Ctrl-Z
,然后按
Enter

实际上,您需要从命令行输入文件,或者在控制台上输入文本,后跟EOF字符。在Windows中按Ctrl+Z生成EOF,在Unix/Linux中按Ctrl+D生成EOF

编辑:如果您的输入是单行,您可以检查,而不是TT\u EOF。
您必须在进入循环之前调用。这将确保行尾被视为单独的标记

如果在调试器中单步执行代码会发生什么?这将是确定问题所在的最快方法。如果您从未调用
solve()
,则您的
while
循环不能结束…您如何运行程序?你是将文件重定向到标准输入,还是手动输入?手动输入,所以可能是错误,那么我如何完成循环?它没有完成循环,我只想输入到16 MG,然后显示答案。没有完成循环,我只想输入到16 MG,然后显示答案(求解方法)@GeorgeBecj:
break
退出
一旦
索引
达到16,我添加if(index>=16){break;},循环结束,它还显示了solve方法的输出,谢谢,但我真的能理解如何完成这个循环。我已经理解问题的意思,在文件结束之前,它可以有很多数字,所以法官会对此进行评估