开发者

why my program never reach the solve method?

开发者 https://www.devze.com 2023-03-05 12:53 出处:网络
sorry if its a stupid question, but I a beginner using StreamTokenizer, I am trying to solve this exercise this, please help me, I dont know what its wrong in my program that never reach my solve meth

sorry if its a stupid question, but I a beginner using StreamTokenizer, I am trying to solve this exercise this, please help me, I dont know what its wrong in my program that never reach my solve method, it also never finishes, I already ask in timus forum, but I know that here is faster to receive an answers

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开发者_JAVA百科.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));
        }
    }
}


You are reading from the standard input, and your code loops until it gets a TT_EOF. To feed a TT_EOF into your program, you need to press Ctrl-D if you're using Unix, or Ctrl-Z followed by Enter if you're using Windows.


You are waiting on System.in, it is blocking on read, ergo, you will never get to EOF so you while loop will continue to wait for input.


As it is, you either need to pipe a file from command line, or enter text on console followed by EOF character. Pressing Ctrl+Z generates EOF in Windows, and pressing Ctrl+D generates EOF in Unix/Linux.

EDIT: If your input is single line you can check for TT_EOL instead of TT_EOF. You must call eolIsSignificant(true) before entering the loop. This will make sure end-of-line is treated as separate token

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号