Как мне принять ввод пользователя и поместить его в условие while - PullRequest
1 голос
/ 14 июля 2020

Это мой код, в то время как l oop не имеет ввода, а переменная rep не принимает ввод:

import java.util.Scanner;

public class MixedData {
    public static void main(String[] args) {
        String rep = "";
        do {
            Scanner keyboard = new Scanner(System.in);
            System.out.print("Enter your full name");
            String name = keyboard.nextLine();

            System.out.print("Enter your GPA: ");
            double gpa = keyboard.nextDouble();

            System.out.println("Name: " + name + ", GPA: " + gpa);
            System.out.println("Do you want to enter the data for another student?(y/n)");
            rep = keyboard.nextLine();
        } // This does not accept input
        while (rep.equals("y"));
    }
}

Ответы [ 4 ]

1 голос
/ 14 июля 2020

Либо просто добавьте еще один keyboard.nextLine() перед rep = keyboard.nextLine(); (, чтобы очистить символ новой строки ), либо прочтите значение double gpa с помощью:

double gpa = Double.parseDouble(keyboard.nextLine());

Важно здесь необходимо понять (особенно если вы новичок Java разработчик), почему ваш код не работает, заключается в том, что вы вызываете nextDouble() в качестве последнего метода на вашем экземпляре Scanner, и он не перемещает курсор на следующую строку .

Немного подробнее:

Все методы имеют шаблон nextX() (например, nextDouble(), nextInt(), et c.), кроме nextLine(), прочтите следующий введенный вами токен, но если это не новая строка символа, то курсор не перемещается на следующую строку. Когда вы вводите двойное значение и нажимаете Enter, вы фактически даете входному потоку два токена: двойное значение и символ новой строки , двойное значение инициализируется в переменная, а символ новая строка остается во входном потоке. В следующий раз, когда вы вызовете nextLine(), будет прочитан этот самый новый строковый символ, и это даст вам пустую строку.

0 голосов
/ 14 июля 2020

Вот тот же код с использованием while l oop вместо do-while. Он работает так, как вы хотите.

import java.util.Scanner;

public class MixedData {
    public static void main(String[] args) {
        String rep = "y";

        while (!rep.equals("n")) {
            Scanner keyboard = new Scanner(System.in);
            System.out.print("Enter your full name: ");
            String name = keyboard.nextLine();

            System.out.print("Enter your GPA: ");
            double gpa = keyboard.nextDouble();

            System.out.println("Name: " + name + ",GPA: " + gpa);
            System.out.println("Do you want to enter the data for another student?(y/n)");
            rep = keyboard.next();
        }
    }
}
0 голосов
/ 14 июля 2020

Используйте nextLine вместо nextDouble :

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    String rep = "";
    do {
        System.out.println("Enter your full name:");
        String name = keyboard.nextLine();

        System.out.println("Enter your GPA:");
//        double gpa = keyboard.nextDouble();
        double gpa = Double.parseDouble(keyboard.nextLine());

        System.out.println("Name: " + name + ", GPA: " + gpa);

        System.out.println("Do you want to enter the data for another student?(y/n)");
        rep = keyboard.nextLine();
    } while (rep.equals("y"));
    keyboard.close();
}
0 голосов
/ 14 июля 2020

Пропускать пустые строки.

public static void main(String[] args) {
    String rep;
    Scanner keyboard = new Scanner(System.in);
    do {
        System.out.print("Enter your full name");
        String name = keyboard.nextLine();

        System.out.print("Enter your GPA: ");
        double gpa = keyboard.nextDouble();

        System.out.println("Name: " + name + ", GPA: " + gpa);
        System.out.println("Do you want to enter the data for another student?(y/n)");
        rep = keyboard.next();
        keyboard.skip("\r\n"); // to skip blank lines
    }
    while (rep.equalsIgnoreCase("y"));
    keyboard.close();
}
...