У меня на входе "1 2 3 4 5", и я хочу, чтобы это было так
int[] numbers = new int[5];
number[0] = 1;
number[1] = 2;
number[2] = 3;
number[3] = 4;
number[4] = 5;
Итак, как я могу извлечь каждое число из строки и поместить его в массив int?
ConsoleIO io = new ConsoleIO();
int[] numbers = new int[5];
io.writeOutput("Type in 5 numbers");
String input = io.readInput();
// If input is longer than 1 character for example, "1 2 3 4 5"
if (input.length() > 1) {
System.out.println(input.length());
for(int y = 0; y < io.readInput().length(); y++) {
numbers[y] = Integer.parseInt(io.readInput().substring(y, io.readInput().indexOf(" ")));
}
return;
}
// If input is one number for example, "1"
else {
for(int i = 0; i < numbers.length; i++) {
numbers[i] = Integer.parseInt(io.readInput());
}
}
Остальное работает, поэтому, если я введу одно число и нажму ввод, а затем следующее, все будет хорошо. Но если у меня есть последовательность чисел с пробелом между ними («1 2 3 4 5»), программа просто прерывается.




Почему бы не использовать Scanner, а затем split и parse?
Scanner in = new Scanner(System.in);
String[] nums = in.nextLine().split(" ");
for(int i = 0; i <=5; i++) {
numbers[i] = Integer.parseInt(nums[i]);
}
вы можете добавить Сканер в = новый Сканер (System.in); в цикле
@AbdessamadHALLAL Это создало бы новый объект Scanner при каждой итерации цикла, а также потребовало бы, чтобы String[] nums = in.nextLine().split(" "); находился внутри цикла, что могло бы вызвать проблемы.
Я считаю, что это тоже сработало, но я выбираю ответ @Joeri Akkerman, потому что он использовал io, который я уже использовал. Спасибо за ваш ответ.
String input = io.readInput();
int[] arr = new int[5];
if (input.length() >= 5){
String[] c = input.split(" ");
for(int i = 0; i < c.length(); i++){
arr[i] = Integer.parseInt(c[i]);
}
}
Это не удается в двух ситуациях: код не выдает ошибку, если вводов меньше пяти; и код умирает, когда имеется более пяти входов, поскольку вы выходите из конца arr, что составляет 5 длин. Вы должны либо вообще не иметь условия if и инициализировать arr после определения c, чтобы можно было установить его длину равной длине c, либо вы должны выдать ошибку, если нет ровно пяти значений.
Я только хотел показать ему метод разделения и то, как его использовать, а не показать ему весь необходимый код для его программы. На самом деле он только что написал мне, что этот ответ помог его программе. Он уже создал целую систему «анти-дурак», которая проверяет неправильный ввод, поэтому ему не было смысла печатать весь исходный код.
Предположим, что ваш ввод - это всегда числа с пробелом между собой (или только одно число), в Java 8 вы можете работать следующим образом:
String[] splits = input.split(" ");
int[] result = Arrays.stream(splits).mapToInt(Integer::parseInt).toArray();
import java.util.*;
public class Solution {
public static void main(String []args) {
Scanner in = new Scanner(System.in);
String[] nums = in.nextLine().split(" ");
int[] numbers = new int[5];
for(int i = 0; i <5; i++) {
numbers[i] = Integer.parseInt(nums[i]);
System.out.println(numbers[i]);
}
}
}
вы можете использовать разделение и удалить пространство java 8