繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM