Мой код показывает ошибку при получении ввода строки в течение l oop "java .util.InputMismatchException"? - PullRequest
0 голосов
/ 04 марта 2020

Если я принимаю тот же вход снаружи для l oop, он не показывает ошибки, и только вход String показывает ошибку, другие входные данные, такие как double и int, успешно принимаются как для l oop, так и снаружи.

import java.util.*;

class jignasu
{
public static void main(String[] args)
{
    Scanner sc  = new Scanner(System.in);
    int a;
    String name;
    double paid;
    String str = sc.nextLine();
    System.out.println(str);
    double permonth;
    a=sc.nextInt();
    for(int i=0;i<a;i++)
    {
        name=sc.nextLine();// ====> is giving  java.util.InputMismatchException
        paid=sc.nextDouble();
        permonth=sc.nextDouble();
        System.out.println(name+"                    "+paid+"                    "+permonth);
    }

}
}

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Попробуйте выполнить некоторую отладку, и вы увидите исключение из следующей строки

paid = s c .nextDouble ();

, и вы увидите первую строку в for l oop игнорируется, сделать это, печатая некоторые сообщения перед каждым запросом ввода

для его решения заменить

name = s c .nextLine ();

от

name = s c .next ();

0 голосов
/ 04 марта 2020

Try,

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a;
        String name;
        double paid;
        String str = sc.nextLine();
        System.out.println(str);
        double permonth;
        a = sc.nextInt();
        sc.nextLine();
        for (int i = 0; i < a; i++) {
            name = sc.nextLine();// ====> is giving  java.util.InputMismatchException
            paid = sc.nextDouble();
            permonth = sc.nextDouble();
            sc.nextLine();
            System.out.println(name + "                    " + paid + "                    " + permonth);
        }
    }

Ваш s c .nextInt () не будет читать символ новой строки в вашем вводе. Так что ваши s c .nextLine () возвращают этот символ новой строки. Чтобы избавиться от этого, вы можете либо позвонить s c .nextLine () после вашего s c .nextInt () . Или же вы можете использовать s c .nextLine () вместо s c .nextInt () и анализировать результат как Integer затем.

...