Java: другой вывод при сканировании ввода с пробелами или вводом в качестве разделителей - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь получить ввод от пользователя и распечатать его на консоли, используя Java 8 (IDE BlueJ, Windows 10).При печати вывода есть ошибка: программа печатает Уравнение 2 дважды вместо печати Уравнения 1 и Уравнения 2.

Это код:

import java.util.Scanner;

public class Equations
{
        public static void main (String[] args)

    {
        Scanner scan = new Scanner (System.in); 

        System.out.println("This program solves a system of 2 linear equations");
        System.out.println("Enter the coefficients a11 a12 a21 a22 b1 b2");

        int a11 = scan.nextInt();
        int a12 = scan.nextInt();
        int a21 = scan.nextInt();
        int a22 = scan.nextInt();
        int b1 = scan.nextInt();
        int b2 = scan.nextInt();

        System.out.println("Eq1: "+ a11 +"*x1+"+ a12 +"*x2="+ b1);
        System.out.println("Eq2: "+ a21 +"*x1+"+ a22 +"*x2="+ b2);

    }
}

это ожидаемый результат:

Эта программа решает систему из 2 линейных уравнений. Введите коэффициенты a11 a12 a21 a22 b1 b2
1 2 3 4 5 6
Eq1: 1 * x1+ 2 * x2 = 5
Eq2: 3 * x1 + 4 * x2 = 6

И это вывод:

Эта программа решает систему2 линейных уравнения Введите коэффициенты a11 a12 a21 a22 b1 b2
1 2 3 4 5 6
Eq2: 3 * x1 + 4 * x2 = 6
Eq2: 3 * x1 +4 * x2 = 6

Обратите внимание, что ошибка существует только при вводе ввода в одну строку с пробелами между цифрами, и не существует при нажатии клавиши Enter после каждого числа.

Это означает, что если на вход поступает одно число за раз, ожидаемый результат получается правильно:

Эта программа решает систему из 2 линейных уравнений. Enterкоэффициенты a11 a12 a21 a22 b1 b2

1

2

3

4

5

6

Eq1: 1 * x1 + 2 *x2 = 5
Eq2: 3 * x1 + 4 * x2 = 6

Поскольку в это трудно поверить и трудно воспроизвести, вот скриншот: enter image description here

Чем обусловлена ​​разница, когда вход поступает в одну строку, разделенную пробелами, по сравнению с тем, когда он входит в отдельные строки, разделенные вводом?

Как получить желаемый вывод при входеформат одной строки?

1 Ответ

0 голосов
/ 11 марта 2019

Похоже, ошибка с вашей IDE.Рассмотрим следующее:

import java.util.Scanner;

public class Equations
{
    public static void main (String[] args) {

        Scanner scan = new Scanner("1 2 3 4 5 6");

        System.out.println("This program solves a system of 2 linear equations");
        System.out.println("Enter the coefficients a11 a12 a21 a22 b1 b2");

        int a11 = scan.nextInt();
        int a12 = scan.nextInt();
        int a21 = scan.nextInt();
        int a22 = scan.nextInt();
        int b1 = scan.nextInt();
        int b2 = scan.nextInt();

        System.out.println("Eq1: "+ a11 +"*x1+"+ a12 +"*x2="+ b1);
        System.out.println("Eq2: "+ a21 +"*x1+"+ a22 +"*x2="+ b2);

    }
}

Это точно такой же код, за исключением того, что он не зависит от пользовательского ввода.Входные данные разделены пробелами, а выходные данные ожидаются:

This program solves a system of 2 linear equations
Enter the coefficients a11 a12 a21 a22 b1 b2
Eq1: 1*x1+2*x2=5
Eq2: 3*x1+4*x2=6

См. онлайн-компилятор Java

Попытайтесь установить разделитель явно:

scan = new Scanner(System.in).useDelimiter(" |\n");
...