Каков наилучший способ чтения ввода в Java, особенно для последовательных строк?Я не знаю, когда использовать next () и nextLine () - PullRequest
0 голосов
/ 13 марта 2019

Я получаю эту ошибку в действительно простом коде и не могу ее понять.

Также, пожалуйста, предложите, как лучше всего читать две последовательные строки, как в этом случае.Я сталкиваюсь с InputMismatchException и думаю, что это может быть причиной.

странно, что код также не может принять целое число.Я получаю исключение при чтении целого числа.

Я не уверен, когда следует использовать Scanner.next () и Scanner.nextLine ().

import java.util.Scanner;

class Customer
{
    private int id;
    private String name;
    private String city;
    private double salary;

    Customer(){}

    Customer(int id, String name, String city, double salary)
    {
        this.id=id;
        this.name=name;
        this.city=city;
        this.salary=salary;
    }

    public int getId(){
        return id;
    }

    public String getName(){
        return name;
    }

    public String getCity(){
        return city;
    }

    public double getSalary(){
        return salary;
    }

    public void setId(int id){
        this.id=id;
    }

    public void setName(String name){
        this.name=name;
    }

    public void setCity(String city){
        this.city=city;
    }

    public void setSalary(double salary){
        this.salary=salary;
    }
}

public class Solution{

     public static void main(String []args){

        Scanner in = new Scanner(System.in);

        Customer c = new Customer();

        int id = in.nextInt();
        String name = in.next();
        String city = in.next();
        double sal = in.nextDouble();

        c.setId(id);
        c.setName(name);
        c.setCity(city);
        c.setSalary(sal);

        System.out.println(c.getId() + " " + c.getName() + " " + c.getCity() + " " + c.getSalary());
     }
}

Ввод

1
ABC
MH
2000.25

Трассировка стека

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at Solution.main(Solution.java:61)

1 Ответ

1 голос
/ 13 марта 2019

java.util.Scanner.next(); возвращает слово. то есть читать до появления символа новой строки или пробела.

java.util.Scanner.nextLine(); возвращает строку. то есть читать всю строку.

Обе возвращаемые строки.

Если вы хотите читать несколько строк одновременно, используйте .nextLine();, однако nextLine() и другие методы чтения имеют конфликт.

т.е. в этом коде

Scanner sc = new Scanner (System.in);
int A = sc.nextInt();
String S = sc.nextLine();

S будет пустой строкой. Вы можете решить эту проблему, добавив в программу еще один .nextLine(), чтобы проглотить символ newLine. Некоторые подробности в комментариях.

...