В данный момент изучаю по книгам Ввод-Вывод. Задача такая необходимо получить из потока ввода с клавиатуры 2-а числовых значения, которые при вводе разделяются пробелами. После чего выполнить проверку являются ли они целочисленными значениями типа int, с помощью метода parseInt конвертировать их в int и отправить эти значения дальше в программу. С проверкой вопросов не возникло. Ввод я решил реализовать c помощью метода readLine через InputStreamReader упакованный в BufferedReader. С этим тоже не возникло проблем. Вопрос возник при разбиении строки на подстроки с помощью метода split() по пробелам. Задумка была такая, что разбитая на подстроки строка записывается в строковый массив и первые два элемента этого массива передаются в созданный для проверки метод.
Когда я ввожу только одно значение без пробелов, split нечего разделять и он как я понял записывает только один элемент массива. При попытке в цикле вывести 2-а значения на экран, выдаёт ошибку выхода за границы массива. Переменную с ссылкой на этот массив я создал в самом начале.
Собственно вопрос: рассуждая логически и читая мануалы. я пришёл к выводу, что метод split() создаёт свой массив по количеству подстрок и ссылку на него записывает в ранее созданную мной переменную. Так так ли это и как можно ещё реализовать данную операцию?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main
{
static String[] buff = new String[2];
public static void main(String[] args)
{
String edata;
CheckInt checkInt;
try(BufferedReader read = new BufferedReader(new InputStreamReader(System.in));)
{
edata = read.readLine();
buff = edata.split(" ");
for (int i=0; i<2; i++)
{
System.out.println(buff[i]);
}
}
catch(IOException exc)
{
System.out.print("Ошибка ввода вывода");
}
}
}
У вас цикл состоит из двух итераций при i = 0 и i = 1. При массиве из одного элемента он обращается к нулевому элементу, а при обращении к первому вылетает исключение. Кто вам мешает сделать в цикле ограничение не хардкоженное (фиксированное):
for (int i=0, end = buff.length; i<end; i++)
и вводите хоть сто значений, хоть ноль.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main
{
public final static int SIZE=2;
static String[] buff;
public static void main(String[] args)
{
String[] temp = new String[SIZE];
String edata;
CheckInt checkInt = new CheckInt();
try(BufferedReader read = new BufferedReader(new InputStreamReader(System.in));)
{
System.out.print("Введите координаты: ");
do
{
edata = read.readLine();
buff = edata.split(" ");
for (int i = 0; i < buff.length & i < temp.length; i++)
{
temp[i] = buff[i];
}
System.out.println();
for (int i = 0; i < temp.length; i++)
{
System.out.println(checkInt.check(temp[i]));
}
}while(!(checkInt.check(temp[0]) & checkInt.check(temp[1])));
}
catch(IOException exc)
{
System.out.print("Ошибка ввода вывода");
}
}
}
Пока смог придумать только это, вопрос состоит в том можно ли заставить split() писать в уже существующий массив или он в любом случае создаёт свой?
А что мешает написать??
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class tet {
public static void main(String[] args) {
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
try {
String edata = read.readLine();
for(String temp : edata.split(" ")){
System.out.println(temp);
}
} catch (IOException e) {
e.printStackTrace();
}
}
В итоге получил
2 5
2
5
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Как передать параметр метода Message<String> msg в обычный Set метод?
Никак не получается сделать автофотографирование с заданным числом фотоЕсли использовать для фото метод onClick и нажимать несколько раз - всё...
друзья, нужна ваша помощь о работе с асинхронщиной знаю только теорию, на практике не работал работаю с mongodb-async-driver + mongodb-driver-rx у меня есть...