Java-как читать целые числа, разделенные пробелом в массив

У меня проблемы с моим проектом, потому что я не могу получить правильное начало, которое состоит в том, чтобы прочитать строку целых чисел, отделенных пробелом от пользователя, и поместить значения в массив.

    System.out.println("Enter the elements separated by spaces: ");
    String input = sc.next();
    StringTokenizer strToken = new StringTokenizer(input);
    int count = strToken.countTokens();
    //Reads in the numbers to the array
    System.out.println("Count: " + count);
    int[] arr = new int[count];

    for(int x = 0;x < count;x++){
        arr[x] = Integer.parseInt((String)strToken.nextElement());
    }

Это то, что у меня есть, и кажется, что он только читает первый элемент в массиве, потому что при инициализации count он по какой-то причине установлен в 1.

может кто-нибудь помочь мне? Может, лучше сделать это по-другому?

5 ответов


существует только небольшое изменение, необходимое для работы вашего кода. The в этой строке:

String input = sc.next();

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

Если вы замените его с

String input = sc.nextLine();

он будет делать то, что вы хотите, потому что nextLine() потребляет всю строку ввода.


String integers = "54 65 74";
List<Integer> list = new ArrayList<Integer>();
for (String s : integers.split("\s"))  
{  
   list.add(Integer.parseInt(s));  
}
list.toArray();

существуют альтернативные способы достижения того же. но когда я попробовал ваш код, он, кажется, работает правильно.

StringTokenizer strToken = new StringTokenizer("a b c");
int count = strToken.countTokens();
System.out.println(count);

оно печатает отсчет как 3. демилитер по умолчанию -""

Я не знаю, как вы получаете поле ввода. Может быть, он не возвращает полный ввод в строковом формате.

Я думаю, вы используете java.утиль.Сканер для считывания вашего ввода

Ява doc от сканера.

сканер разбивает свой вход на маркеры, использующие шаблон разделителя, который по умолчанию соответствует пробел. Полученные токены могут быть преобразуется в значения различных типов с помощью различных next методы.

следовательно, вход возвращает только одно целое число и оставляет остальное без присмотра

читать это. сканер#next (), вы должны использовать сканер # nextLine () вместо


Это будет более простой способ сделать то же самое -

System.out.println("Enter the elements seperated by spaces: ");
String input = sc.nextLine();
String[] split = input.split("\s+");
int[] desiredOP = new int[split.length];
int i=0;
for (String string : split) {
    desiredOP[i++] = Integer.parseInt(string);
}

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
.
.
.
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int N= Integer.parseInt(st.nextToken());