[英]why my program never reach the solve method?
很抱歉,如果这是一个愚蠢的问题,但是我是使用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));
}
}
}
您正在从标准输入中读取内容,并且您的代码将循环执行,直到获得TT_EOF
为止。 要将TT_EOF
馈入程序,如果使用Unix,则需要按Ctrl-D
如果使用Windows,则按Ctrl-Z
然后按Enter
。
您正在等待System.in,它在读取时阻塞,因此,您永远都不会进入EOF,因此while循环将继续等待输入。
照原样,您要么需要从命令行通过管道传输文件,要么在控制台上输入文本,后跟EOF字符。 在Windows中按Ctrl + Z会生成EOF,而在Unix / Linux中按Ctrl + D会生成EOF。
编辑:如果您的输入是单行,则可以检查TT_EOL而不是TT_EOF 。 进入循环之前,您必须调用eolIsSignificant(true) 。 这样可以确保将行尾视为单独的令牌
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.