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