Массив StringTokenizer

Ява. Итак, я хочу ввести массив целых чисел, а затем распечатать максимальное значение с помощью StringTokenizer. Я знаю, как это сделать, используя целые числа, но когда я пытаюсь сделать это с массивом, команда String to int (Integer.parseInt) не работает - не может преобразовать из int в int[].

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String strTmp;
        StringTokenizer strTok;
        while ((strTmp = in.readLine()) != null && strTmp.length() != 0) {
            strTok = new StringTokenizer(strTmp);

        int[] c;

        c = Integer.parseInt(strTok.nextToken());

        int max = 0;
        for (int i = 0; i < c.length; i++) {
            if (c[i] > max) {
                max = c[i];
            }
        }
        System.out.println(max);
    }
}
}

Как мне решить эту проблему или есть другие команды, которые я должен использовать?


person user2974951    schedule 01.12.2013    source источник
comment
Integer.parseInt возвращает целое число, а не массив целых чисел.   -  person Alexis C.    schedule 01.12.2013


Ответы (3)


Вы, кажется, смущены тем, действительно ли вам нужен массив или нет. Вы анализируете одиночное значение, но пытаетесь присвоить int переменной c, которая является переменной массива. На самом деле вам это не нужно, так как вам нужно только запомнить текущий максимум и значение, которое вы только что проанализировали:

int max = Integer.MIN_VALUE;
while (strTok.hasMoreTokens()) {
    int value = Integer.parseInt(strTok.nextToken());
    if (value > max) {
        max = value;
    }
}

Если вам действительно нужен массив, вам нужно знать, сколько в нем токенов, прежде чем вы сможете их анализировать, что непросто.

Другой альтернативой было бы создание List<Integer>:

// First parse everything...
List<Integer> values = new ArrayList<>();
while (strTok.hasMoreTokens()) {
    values.add(Integer.parse(strTok.nextToken());
}

// Then you can find the maximum value in the list

Лично я предпочитаю первый подход, если вам нужно только найти максимальное значение.

person Jon Skeet    schedule 01.12.2013
comment
второй подход мне не по силам, я не знаю этих команд, а первый подход работает! но я точно не знаю, что ты там делал - person user2974951; 01.12.2013
comment
@ user2974951: Хорошо, следуйте по строке за строкой — какой именно бит вы не понимаете? - person Jon Skeet; 01.12.2013

 int[] c;

 c = Integer.parseInt(strTok.nextToken());

Вы пытаетесь присвоить один целочисленный объект массиву int.

Скорее используйте int[index] = Integer.parseInt(strTok.nextToken());

person Zavior    schedule 01.12.2013

Integer.parseInt(String) возвращает целое число, а не Integer array. Вы должны сохранить возвращаемое значение Integer в переменной int, например

int i = Integer.parseInt(String);

Вы должны выполнить итерацию целочисленного массива и установить его значение индекса в возвращаемое целочисленное значение.

for (int i = 0; i < c.length; i++) {
           c[i] = Integer.parseInt(strTok.nextToken());
            if (c[i] > max) {
                max = c[i];
            }
        }

Надеюсь это поможет!

person Keerthivasan    schedule 01.12.2013