Консольный ввод чисел через Scanner в одну строку

Рейтинг: 0Ответов: 1Опубликовано: 13.03.2023

я ученик, учусь 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.