Как завершить цикл Streamtokenizer при чтении токенов? - PullRequest
0 голосов
/ 17 мая 2011

Я знаю, что "while (((str.nextToken ()! = Str.TT_EOL)))" является бесконечным циклом, но я хочу знать, как я могу завершить этот цикл аналогично тому, как в StringTokenizer, как "while (st.hasMoreTokens ()) ", нужно только прочитать 20 токенов, это мой код: Помощь очень ценится:

    import java.io.*;
    import java.util.Arrays;

    public class StonePile {

    public static void main(String args[]) throws IOException {
        StreamTokenizer str = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        //int diff = 0;
        str.nextToken();
        int[] array = new int[(int) str.nval + 1];
        int array2[] = new int[array.length - 1];
        //System.out.println(array.length);
        int i = 0;
        int diff = 0;

        while (((str.nextToken() != str.TT_EOL))) {
            if (str.ttype == StreamTokenizer.TT_NUMBER) {
                System.out.println(i);
                array[i++] = (int) str.nval;

            }
//            if (i > 4) {
//                break;
//            }
        }

        for (int j = 0; j < array.length - 2; j++) {
            diff = Math.abs(array[j + 1] - array[j]);
            array2[j] = diff;
            // System.out.println("El array es en" + j+" es"+ array2[j]);
        }

        Arrays.sort(array2);
        System.out.println(array2[1]);
    }
}

1 Ответ

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

Если вы хотите, чтобы первые 20 использовали любые токены:

for (int k = 0; k < 20 && str.nextToken() != str.TT_EOL; k++) {
    if (str.ttype == StreamTokenizer.TT_NUMBER) {
        System.out.println(i);
        array[i++] = (int) str.nval;
    }
}

Если вы хотите, чтобы первые 20 использовали TT_NUMBER:

int k = 0;
while (k < 20 && str.nextToken() != str.TT_EOL) {
    if (str.ttype == StreamTokenizer.TT_NUMBER) {
        System.out.println(i);
        array[i++] = (int) str.nval;
        k++;
    }
}
...