почему моя программа никогда не достигает метода решения? - PullRequest
0 голосов
/ 13 мая 2011

извините, если это глупый вопрос, но я новичок, использующий StreamTokenizer, я пытаюсь решить это упражнение это , пожалуйста, помогите мне, я не знаю, что плохого в моей программе, которая никогда не достигает моего решения метод, он также никогда не заканчивается, я уже спрашиваю на форуме Тимус, но я знаю, что здесь быстрее получить ответы

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));
        }
    }
}

Ответы [ 3 ]

4 голосов
/ 13 мая 2011

Вы читаете со стандартного ввода, и ваш код зацикливается, пока не получит TT_EOF.Чтобы ввести TT_EOF в вашу программу, вам нужно нажать Ctrl-D, если вы используете Unix, или Ctrl-Z, а затем Enter, если вы используете Windows.

3 голосов
/ 13 мая 2011

Вы ждете в System.in, он блокирует чтение, поэтому вы никогда не попадете в EOF, поэтому пока цикл будет продолжать ждать ввода.

1 голос
/ 13 мая 2011

На самом деле вам нужно либо передать файл из командной строки, либо ввести текст на консоли, а затем символ EOF. Нажатие Ctrl + Z создает EOF в Windows, а нажатие Ctrl + D создает EOF в Unix / Linux.

РЕДАКТИРОВАТЬ: Если ваш ввод однострочный, вы можете проверить TT_EOL вместо TT_EOF. Вы должны вызвать eolIsSignificant (true) перед входом в цикл. Это обеспечит обработку конца строки как отдельного токена

...