Консольный ввод чисел через Scanner в одну строку
я ученик, учусь 3-ю неделю. Буду очень благодарен, если кто-то подскажет: Язык Java. Вот код:
import java.util.Scanner;
public class Draft_230312_zazadanie13_3_1 {
/* 13. Мини-игра в слова. Первый игрок вводит слово. Потом второй
игрок вводит два числа, с какого по какой символ можно найти слово внутри
исходного, используя substring. Потом первый игрок вводит два числа.
Побеждает тот, чье слово длиннее. Пример:
1: революционный
2: 0 3 (вывод: рев)
1: 7 13 (вывод: ионный)
Победил игрок 1 */
public static void main(String[] args) {
System.out.print("Игрок 1, введите исходное слово: ");
Scanner inWordScan = new Scanner(System.in); //new InputStreamReader
String inWord = inWordScan.next();
System.out.println("Игрок 2, введите два порядковых номера символов: ");
Scanner scan1 = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
int num1 = scan1.nextInt() - 1;
int num2 = scan2.nextInt();
String fragmentWord2 = inWord.substring(num1, num2);
System.out.println(fragmentWord2);
System.out.println("Игрок 1, введите два порядковых номера символов: ");
Scanner scan3 = new Scanner(System.in);
Scanner scan4 = new Scanner(System.in);
int num3 = scan3.nextInt() - 1;
int num4 = scan4.nextInt();
String fragmentWord1 = inWord.substring(num3, num4);
System.out.println(fragmentWord1);
int len2 = fragmentWord2.length();
int len1 = fragmentWord1.length();
if (len2 > len1) {
System.out.println("Победил игрок 2.");
} else {
if (len1 > len2) {
System.out.println("Победил игрок 1.");
} else {
if (len1 == len2) {
System.out.println("Длины слов равны. Ничья.");
}
}
}
}
}
Вопрос: Кода мы вводим два порядковых номера символа вот здесь: Scanner scan1 = new Scanner(System.in); Scanner scan2 = new Scanner(System.in);
Например (разделением является клавиша Enter): 2 6 То они на экран выводятся в разных стоках. А надо, чтобы выводились в одной строке, через пробел (или также можно через запятую), т.е. вот так: 2 6 Хотелось бы спросить у специалистов, можно ли как-то это сделать? Спасибо.
Ответы (1 шт):
Если при вводе данных в качестве разделителя использовался Enter / перевод строки, разумеется какое-то число будет выведено с новой строки.
Scanner::next / Scanner::nextInt считывают символы до первого разделителя, сами разделители игнорируются.
Если в качестве разделителей нужно использовать другие символы , например , или ;, а не только пробельные, следует сконфигурировать сканер при помощи метода Scanner::useDelimiter.
Для чтения данных из консоли не нужно создавать отдельный экземпляр сканера для каждой вводимой переменной, для этого достаточно одного экземпляра.
Также в показанном примере при вводе 0 как индекса первого символа будет выброшено исключение в методе String::substring из-за ненужного вычитания 1.
Исправленный и отформатированный код может выглядеть так:
import java.util.Scanner;
public class MyClass {
/* 13. Мини-игра в слова. Первый игрок вводит слово. Потом второй
игрок вводит два числа, с какого по какой символ можно найти слово внутри
исходного, используя substring. Потом первый игрок вводит два числа.
Побеждает тот, чье слово длиннее. Пример:
1: революционный
2: 0 3 (вывод: рев)
1: 7 13 (вывод: ионный)
Победил игрок 1 */
public static void main(String[] args) {
System.out.print("Игрок 1, введите исходное слово: ");
Scanner scanner = new Scanner(System.in).useDelimiter("[\\s,;]+");
String inWord = scanner.next();
System.out.println("Игрок 2, введите два порядковых номера символов: ");
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
String fragmentWord2 = inWord.substring(num1, num2);
System.out.println(fragmentWord2);
System.out.println("Игрок 1, введите два порядковых номера символов: ");
int num3 = scanner.nextInt();
int num4 = scanner.nextInt();
String fragmentWord1 = inWord.substring(num3, num4);
System.out.println(fragmentWord1);
int len2 = fragmentWord2.length();
int len1 = fragmentWord1.length();
if (len2 > len1) {
System.out.println("Победил игрок 2.");
} else if (len1 > len2) {
System.out.println("Победил игрок 1.");
} else {
System.out.println("Длины слов равны. Ничья.");
}
}
}
Вариант ввода:
Игрок 1, введите исходное слово: революционный
Игрок 2, введите два порядковых номера символов:
0; 3
рев
Игрок 1, введите два порядковых номера символов:
7, 13
ионный
Победил игрок 1.