Следующая линия проблемы с пробелами - PullRequest
0 голосов
/ 09 мая 2018

Моя программа ниже предлагает пользователю узнать, сколько детей у них в классе. После ввода номера они будут вводить все имена своих учеников (первое) и (последнее). Из-за этого я ввел оператор сканирования следующей строки вместо простого scan.next. Из-за этого, какой бы номер вы ни вводили, программа предложит вам на один меньше. Пожалуйста, помогите.

 public class studentRoster {

public static void main(String[] args) {

     Scanner scan = new Scanner (System.in);


     String [] students;
     int size;

     System.out.println("Enter the amount of students in your class: ");
     size = scan.nextInt();

     students = new String[size];

     for (int i = 0; i < students.length; i++ ){
            System.out.println("Enter a student name: ");
            students [i] = scan.next();


       }

                 System.out.println("Student Roster");

     for ( int i = 0;  i < students.length; i++ ){
            System.out.println(students[i]);

           }
        }
     }

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

проблема в этой строке

size = scan.nextInt();

becuase nextInt () метод не использует весь входной буфер, он оставляет последний (\ n) символ. Когда вы вызываете nextLine () после этого, он не будет ждать ввода пользователем чего-либо, но будет использовать символ (\ n) , оставленный в буфере, как остаток от предыдущего nextInt ( ) метод
так что чтобы исправить это у вас есть 2 варианта:

  1. поместить дополнительный метод scan.nextLine () непосредственно после каждого метода scan.nextInt (), чтобы использовать (\ n)
    size = scan.nextInt(); scan.nextLine(); students = new String[size]; //your code
  2. Получить размер в виде строки и преобразовать его в int
    String temp = scan.nextLine(); int size = Integer.parseInt(temp);
0 голосов
/ 09 мая 2018

Я предлагаю вам использовать объект, более подходящий для ваших целей (я думаю, что легче хранить данные и улучшает читабельность):

import java.util.Scanner;

public class StudentRoster {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        Student[] students;
        int size;
        String name;
        String lastname;

        System.out.println("Enter the amount of students in your class: ");
        size = scan.nextInt();

        students = new Student[size];
        Student student;
        for (int i = 0; i < students.length; i++) {
            student = new Student();
            System.out.println("Enter a student name: ");
            name = scan.next();

            System.out.println("Enter a student lastname: ");
            lastname = scan.next();

            student.setName(name);
            student.setLastname(lastname);
            students[i] = student;
        }

        System.out.println("Student Roster");
        for (int i = 0; i < students.length; i++) {
            System.out.println(students[i].getName());
            System.out.println(students[i].getLastname());
        }

    }

    static class Student {
        String name;
        String lastname;

        public String getName() {
            return name;
        }

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

        public String getLastname() {
            return lastname;
        }

        public void setLastname(String lastname) {
            this.lastname = lastname;
        }
    }
}
0 голосов
/ 09 мая 2018

Использование scan.next () захватывает только до первого обнаруженного пробела, поэтому вы можете использовать .nextLine (), если пользователь вводит как имя, так и фамилию одновременно.

Чтобы этот код работал, добавьте scan.nextLine(); после назначения size для пользовательского ввода. Затем измените students [i] = scan.next(); на students [i] = scan.nextLine();.

Причина, по которой вам нужно это сделать, заключается в том, что .nextInt() не принимает последний символ новой строки ввода пользователя, поэтому вам нужно вызвать .nextLine(), чтобы учесть это.


public class StudentRoster {

public static void main(String[] args) {

     Scanner scan = new Scanner (System.in);


     String [] students;
     int size;

     System.out.print("Enter the amount of students in your class: ");
     size = scan.nextInt();
     scan.nextLine();
     students = new String[size];

     for (int i = 0; i < students.length; i++ ){
            System.out.print("Enter a student name: ");
            students [i] = scan.nextLine();

       }

                 System.out.println("Student Roster");

     for ( int i = 0;  i < students.length; i++ ){
            System.out.println(students[i]);

           }
        }
     }

Тестовый вывод

Enter the amount of students in your class: 4 Enter a student name: john Q Enter a student name: albert E Enter a student name: tyler D Enter a student name: mickey M Student Roster john Q albert E tyler D mickey M

...