Vuole prendere multiple input dall’utente in Java con Getter e Setter

Qui è il mio User.java classe.

public class User {
private String First_Name;
private String Last_Name;
public String getFirst_Name() {
    return First_Name;
}
public void setFirst_Name(String first_Name) {
    First_Name = first_Name;
}
public String getLast_Name() {
    return Last_Name;
}
public void setLast_Name(String last_Name) {
    Last_Name = last_Name;
}
public User(String first_Name, String last_Name) {
    super();
    First_Name = first_Name;
    Last_Name = last_Name;
}
public User() {
    //TODO Auto-generated constructor stub
}   
}

Voglio prendere input da parte di utenti diversi, come nome e cognome. Per questo ho classe Input.java come :

 public class InputLogic {

public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);

    System.out.println("How many name you want to enter:");
      int num = sc.nextInt();
      int i=0;
      while(i < num){
    User firstname = new User();
    System.out.println(i + "Enter First name:");
    String firsttemp = sc.nextLine();
    firstname.setFirst_Name(firsttemp);
    User lastname = new User();
    System.out.println(i + "Enter Last name:");
    String lasttemp = sc.nextLine();
    lastname.setLast_Name(lasttemp);
    i++;

      }
} 
 }

Che cosa di sbagliato in questo approccio…??

  • Qual è il comportamento che si aspetta che il precedente non fare? Questo non è un buon forum per “cosa c’è di sbagliato con questo”. Penso che tutti possiamo vedere i problemi con il precedente, ma la domanda è: perché pensi che sia sbagliato allora potremmo essere in grado di aiutare a risolvere ciò che è sbagliato.
  • User lastname = new User(); vuoi un nuovo utente per il cognome? dovrebbe essere il cognome per lo stesso utente che hai inserito il nome per?
  • Si prega di seguire java convenzioni. Per esempio First_Name dovrebbe essere firstName. Leggi di più su google su Java Convenzioni.
InformationsquelleAutor Vaibhav Jain | 2013-07-29



7 Replies
  1. 0

    La prima cosa che ho notato è che si utilizza, mentre con iteratore io invece del normale ciclo for.
    In secondo luogo, se si desidera utilizzare qualsiasi oggetto al di fuori del ciclo devi dichiarare prima.
    Sei sicuro di voler avere due utenti distinti per nome e cognome?
    Il ciclo suggerisce, inoltre, si desidera avere multipli utenti, in modo che avrebbe bisogno di un array o di un elenco.

    Qui il tuo codice è corretto.

    public class InputLogic {
    
        public static void main(String args[]) {
            Scanner sc = new Scanner(System.in);
            User users[];
    
            System.out.println("How many name you want to enter:");
            int num = sc.nextInt();
            users = new User[num];
    
            for (int i=0; i<num; i++) {
                users[i] = new User();
                System.out.println(i + " Enter First name:");
                String temp = sc.nextLine();
                users[i].setFirst_Name(temp);
                System.out.println(i + " Enter Last name:");
                temp = sc.nextLine();
                users[i].setLast_Name(temp);
            }
        } 
    }
    • Questo codice di pausa a String temp = sc.nextLine(); all’interno del ciclo for
  2. 0

    leggere un nextLine dopo il nextInt. Il carattere di ritorno è leggere come input per il nome.

  3. 0

    Quando si conosce oggetto della classe Utente è priva di senso senza

    private String First_Name;
    private String Last_Name;

    perché non mettere all’interno del costruttore?

    public User(String fname, String lname) {
        this.First_Name = fname;
        this.Last_Name = lname;
    }  

    quindi creare il proprio oggetto, dopo la lettura fname e lname da std input come

    User[] userList = new User[num];
    for(int i=0;i<userList.length();i++) {
      userList[i] = new User(fname,lname);
    }
  4. 0

    Più cose corretti nella InputLogic classe. Paio di loro:

    1.Si sta creando numerosi firstname, lastname oggetti e quindi di perdere i riferimenti.

    2.Perché avete bisogno di un oggetto diverso per firstname, lastname. Non appartengono a una sola persona (stesso oggetto)

    Si può pensare di creare un ArrayList o Array di oggetti utente

  5. 0

    La creazione di due utenti diversi (chiamato firstname e lastname) invece di un utente che contiene entrambi i nomi. Provare qualcosa di simile:

    while(i < num){
    System.out.println(i + "Enter First name:");
    String firstname = sc.nextLine();
    System.out.println(i + "Enter Last name:");
    String lastname = sc.nextLine();
    User user = new User(firstname, lastname);
    i++;
    }

    E anche la classe user necessità di contenere le stringhe:

    private String Nome;
    private String Cognome;

  6. 0

    Ci sono più errori sul vostro approccio:

    User xy = new User() //creates a new user

    Si sta facendo per Nome e per Cognome che è sbagliato.

    Anche la creazione di istanze nel ciclo while. Dopo questo ciclo termina
    youre Istanze sarà andato.

    Per il salvataggio di più gli utenti che si potrebbe usare un array

    Dopo un controllo, come numero di Utenti che si desidera inserire è possibile creare una Matrice

    User[] users = new User[UserInput]

    e nel ciclo while è possibile controllare l’ingresso e di effettuare le seguenti operazioni

    users[i] = new User();
    users[i].firstname = firstnameinput;
    users[i].lastname = lastnameinput;
  7. 0

    La creazione di due istanze dell’Utente; nel primo si sta inserendo solo il nome di primo e nel secondo si stanno inserendo solo il cognome. Corretto il codice come segue al fine di inserire sia il nome e cognome per una singola istanza dell’Utente ( che è una persona):

    public class InputLogic {
    
    public static void main(String args[]) 
    {
        Scanner sc = new Scanner(System.in);
    
        System.out.println("How many name you want to enter:");
        int num = sc.nextInt();
        int i=0;
        while(i < num)
        {
            User p = new User();
    
            System.out.println(i + "Enter First name:");
            String firsttemp = sc.nextLine();
    
            System.out.println(i + "Enter Last name:");
            String lasttemp = sc.nextLine();
    
            p.setFirst_Name(firsttemp);
            p.setLast_Name(lasttemp);
            i++;
        }
    }

    Con il codice di cui sopra, tuttavia, si sta perdendo il senso dell’Utente p, perché si stanno sostituendo p informazioni ogni volta che il ciclo viene riavviato.

    Salvare gli Utenti in un ArrayList almeno come segue:

    public class InputLogic {
    
    public static void main(String args[]) 
    {
    
        ArrayList<User> listOfUsers = new ArrayList<User>();
        Scanner sc = new Scanner(System.in);
    
        System.out.println("How many name you want to enter:");
        int num = sc.nextInt();
        int i=0;
        while(i < num)
        {
            User p = new User();
    
            System.out.println(i + "Enter First name:");
            String firsttemp = sc.nextLine();
    
            System.out.println(i + "Enter Last name:");
            String lasttemp = sc.nextLine();
    
            p.setFirst_Name(firsttemp);
            p.setLast_Name(lasttemp);
            listOfUsers.add(p);
    
            i++;
        }
    }

    In ArrayList, ora hai tutti gli Utenti salvato, ed è possibile accedervi in qualsiasi momento, o anche li salva in un database, se necessario. 🙂

Lascia un commento