(Java) Comment puis-je imprimer un objet d'information lorsque l'objet est dans une ArrayList? [dupliquer]

0

La question

J'ai une liste de tableaux en principal et j'ai une classe avec un constructeur à l'intérieur et une méthode pour imprimer les données. - Je ajouter un nouvel objet avec de nouvelles informations, lorsqu'on l'appelle, et l'ajoute à la liste de tableaux pour le garder en un seul endroit. Ce que je vais avoir un moment difficile est la syntaxe pour imprimer les informations. Je l'ai essayé avec un tableau normal, mais j'ai besoin d'utiliser ArrayList. J'ai besoin d'être en mesure d'obtenir l'index d'un objet spécifique, et de l'impression que l'objet de l'information. Par exemple, le code ci-dessous les deux dernières lignes:

import java.util.ArrayList;
import java.util.Scanner;

public class student{

    String name;
    int age;
    int birthYear;

    public student(String name, int age, int birthYear){
        this.name = name;
        this.age = age;
        this.birthYear = birthYear;
    }
    
    public void printStudentInformation(){
        System.out.println(name);
        System.out.println(age);
        System.out.println(birthYear);
    }
}

public class Main{
    public static void main(String[] args){

        ArrayList listOfObj = new ArrayList();
        ArrayList names = new ArrayList();
        Scanner sc = new Scanner(System.in);

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

            System.out.println("New Student Information:"); // Three student's information will be saved
            String name = sc.nextLine();
            int age = sc.nextInt();
            int birthYear = sc.nextInt();

            student someStudent = new student(name, age, birthYear);
            listOfObj.add(someStudent);
            names.add(name);
        }

        System.out.println("What student's information do you wish to view?");
        for(int i = 0; i < names.size(); i++){
            System.out.println((i + 1) + ") " + names.get(i)); // Prints all students starting from 1
        }
        int chosenStudent = sc.nextInt(); // Choose a number that correlates to a student
        
        // Should print out chosen student's object information
        listOfObj.get(chosenStudent).printStudentInformation(); // This is incorrect, but I would think the syntax would be similar?
        
    }
}

De l'aide ou des précisions sont grandement appréciés.

arraylist java printing
2021-11-24 04:07:52
3
1

Vous avez besoin de changer votre définition de listOfObj de:

ArrayList listOfObj = new ArrayList();

pour:

ArrayList<student> listOfObj = new ArrayList<>();

Le premier vous permettra de créer un ArrayList de Object les objets de la classe.

Le deuxième va créer une ArrayList de student les objets de la classe.

Quelques problèmes dans votre code:

  1. Puisque vous lisez le nom à l'aide nextLine, vous devrez peut-être passer une nouvelle ligne après la lecture de l'acte de naissance de l'année:
...
int birthYear = sc.nextInt();
sc.nextLine();  // Otherwise in the next loop iteration, it will skip reading input and throw some exception
...
  1. Vous sélectionnez une option pour l'étudiant à l'écran, mais cette option est 1 indexés et ArrayList magasins de 0 indexées, vous devez modifier la ligne à sc.nextInt() - 1:
int chosenStudent = sc.nextInt() - 1; // Choose a number that correlates to a student
  1. Scanner peut jeter l'exception dans le cas où vous entrez, par exemple, une chaîne de caractères au lieu d'un int. Donc, assurez-vous que vous êtes correctement à l'aide de la gestion des exceptions try-catch les blocs.
2021-11-24 04:26:42
1
  • Vous modifiez la liste de tableaux defination et ajouter toString() dans votre studen classe.
  • Et pour imprimer tous les étudiants de l'objet insted de l'aide pour la boucle d'utilisation seulement un sop.

EX:-

import java.util.*;

class Student {
    private String name;
    private int age;
    private int birthYear;

    public Student() {
        super();
    }

    public Student(String name, int age, int birthYear) {
        super();
        this.name = name;
        this.age = age;
        this.birthYear = birthYear;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getBirthYear() {
        return birthYear;
    }

    public void setBirthYear(int birthYear) {
        this.birthYear = birthYear;
    }

    @Override
    public String toString() {
        return "Student [age=" + age + ", birthYear=" + birthYear + ", name=" + name + "]";
    }

}

public class DemoArrayList {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<Student>();

        Scanner scan = new Scanner(System.in);

        int n = scan.nextInt();

        for (int i = 0; i < n; i++) {
            scan.nextLine();
            String name = scan.nextLine();
            int age = scan.nextInt();
            int birthYear = scan.nextInt();
            list.add(new Student(name, age, birthYear));
        }

        System.out.println(list);
    }
}

O/P:-

2
joy 
10
2003
jay
20
2005
[Student [age=10, birthYear=2003, name=joy], Student [age=20, birthYear=2005, name=jay]]
2021-11-24 04:14:02

Salut, pouvez-vous modifier votre réponse et d'ajouter du code en tant que bien de sorte que l'OP peut mieux la comprendre?
kiner_shah

ok juste attendre un certain temps
Batek'S

voyons maintenant ce code.
Batek'S
0

Vous ne pouvez pas déclarer le type de ArrayList tout initialiser listOfObj et names dans ArrayList.

Ici, c'est juste façon de déclarer ArrayList:

ArrayList<type> list = new ArrayList();

Et l'autre problème est que, bien que vous récupérer des données à partir de ArrayList. variable chosenStudent prendre la position de l'utilisateur et des données de listOfObj mais l'indice de début de 0 pas 1.

Par exemple, votre avis est 2 ensuite, ArrayList obtenir les données à partir de la deuxième position, mais votre index est à partir de 1 alors que les données d'impression. Vous devez mettre chosenStudent - 1 pour obtenir des données correctes.

listOfObj.get(chosenStudent - 1).printStudentInformation() // chosenStudent = 2 - 1 = 1 

Ici est mon code:

ArrayList<student> listOfObj = new ArrayList<>();
ArrayList<String> names = new ArrayList<>();
Scanner sc = new Scanner(System.in);
    for(int i = 0; i < 3; i++){
        System.out.println("New Student Information:");
        String name = sc.next();
        int age = sc.nextInt();
        int birthYear = sc.nextInt();

        student someStudent = new student(name, age, birthYear);
        listOfObj.add(someStudent);
        names.add(name);
     }

     System.out.println("What student's information do you wish to view?");
     for(int i = 0; i < names.size(); i++){
        System.out.println((i + 1) + ") " + names.get(i));
     }
     int chosenStudent = sc.nextInt();
        
     listOfObj.get(chosenStudent - 1).printStudentInformation();
2021-11-24 04:41:01

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................