J'ai créé une classe Employee dans laquelle je ne fais que transmettre la valeur et imprimer le tableau. Tu peux voir:

package practicequestion;

import java.util.Scanner;
import practicequestion.employeeq.Employee;

public class EmployeeMain {
    public static void main(String[] args) {
        Employee[] obj = new Employee[3];
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the number of inputs you want ");
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {

            System.out.println("Enter FirstName");
            String firstname = sc.nextLine();
            System.out.println("Enter LastName");
            String lastname = sc.nextLine();
            System.out.println("Enter Email");
            String email = sc.nextLine();
            System.out.println("Enter Salary");
            int salary = sc.nextInt();
            System.out.println("Enter Mobile Number");
            long mobileno = sc.nextLong();
            System.out.println("Enter Experience");
            int empexp = sc.nextInt();
            System.out.println("Enter Employee Id");
            int empid = sc.nextInt();
            if (i < n) {
                obj[i] = new Employee(firstname, lastname, email, salary, empid, empexp, mobileno);
            }
        }
        for (int i = 0; i < 3; i++) {
            System.out.println("Employee " + i +  " values are: ");
            obj[i].Display();
        }
        if (sc != null) {
            sc.close();   
        }
    }

}

Mais je ne suis pas en mesure de saisir le prénom car chaque fois que je lance le programme, il commence à saisir le nom de famille. Sa classe est la suivante:

package practicequestion.employeeq;

public class Employee {
   String FirstName;
   String LastName;
   String Email;
   int Salary;
   long MobileNo;
   int EmployeeExp;
   int EmployeeId;

    public Employee(String FirstName,String LastName,String Email,int Salary,int EmployeeId,int EmployeeExp,long MobileNo) {
        this.FirstName = FirstName;
        this.LastName = LastName;
        this.Email = Email;
        this.Salary = Salary;
        this.EmployeeId = EmployeeId;
        this.EmployeeExp = EmployeeExp;
        this.MobileNo = MobileNo;
    }
    public void Display() {
        System.out.println(FirstName +"\n" + LastName + "\n" + Email + "\n" + Salary + "\n" + EmployeeId +"\n" + EmployeeId +"\n" + MobileNo);
    }
}

Quelqu'un peut-il résoudre ce problème?

1
Shîvam Yadav 27 août 2020 à 16:19

2 réponses

Meilleure réponse

Essaye ça. Je vais documenter où j'ai fait les changements.

Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of inputs you want ");
int n = sc.nextInt();
// allocate the Employee array after you get the number of inputs.
Employee[] obj = new Employee[n];

for (int i = 0; i < n; i++) {

    // get the newline out of the buffer here. That also
    // takes care of the `nextInt` problem at the end of this loop
    sc.nextLine();
    
    System.out.println("Enter FirstName");
    String firstname = sc.nextLine();
    System.out.println("Enter LastName");
    String lastname = sc.nextLine();
    System.out.println("Enter Email");
    String email = sc.nextLine();
    System.out.println("Enter Salary");
    int salary = sc.nextInt();
    System.out.println("Enter Mobile Number");
    long mobileno = sc.nextLong();
    System.out.println("Enter Experience");
    int empexp = sc.nextInt();
    System.out.println("Enter Employee Id");
    int empid = sc.nextInt();
    // you don't need to verify `i` here.  The for loop does that
    // for you
    obj[i] = new Employee(firstname, lastname, email, salary,
            empid, empexp, mobileno);
    
}

// use the number of inputs `n` to limit the loop
for (int i = 0; i < n; i++) {
    System.out.println("Employee " + i + " values are: ");
    obj[i].Display();
}

Et ce n'est généralement pas une bonne pratique de fermer le scanner.

0
WJS 27 août 2020 à 15:52

Cette question a déjà reçu une réponse ici: Le scanner ignore nextLine () après en utilisant next () ou nextFoo ()?

Fondamentalement, le problème vient de Scanner.nextInt () que vous appelez avant d'entrer dans la boucle. Scanner.nextInt () ne lit que le prochain entier saisi par l'utilisateur, pas la ligne complète, donc lorsque vous appelez Scanner.nextLine () après avoir accepté directement la partie restante (et vide) de la ligne où vous avez entré l'entier.

Pour le résoudre, vous devez soit appeler Scanner.nextLine () une fois, soit utiliser Scanner.nextLine () pour obtenir l'entier, puis le transtyper pour l'utiliser comme un entier.

1
Moorts 27 août 2020 à 13:30