(Java) Cum pot imprima unui obiect informații atunci când obiectul este într-un ArrayList? [duplicat]

0

Problema

Am un ArrayList în principal și am o clasa cu un constructor și o metodă pentru a imprima datele. Am adăuga un nou obiect cu noi informații, atunci când este solicitat, și adaugă-l la ArrayList să-l păstrați într-un singur loc. Ce sunt având un timp de greu este sintaxa pentru a imprima informații. Am incercat cu o varietate de normală, dar trebuie să utilizați ArrayList. Am nevoie pentru a fi capabil de a obține indicele de un anumit obiect, și de imprimare ca obiect informații. De exemplu, codul de mai jos ultimele două linii:

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?
        
    }
}

Orice ajutor sau de clarificare este foarte apreciat.

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

Ai nevoie pentru a schimba definiția listOfObj de la:

ArrayList listOfObj = new ArrayList();

a:

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

Primul va va crea un ArrayList de Object clasa de obiecte.

Cea de-a doua va crea un ArrayList de student clasa de obiecte.

Câteva mai multe probleme în cod:

  1. Din moment ce sunt numele de lectură, folosind nextLine, aveți nevoie pentru a sări peste o linie nouă după citirea anul nașterii, cum ar fi:
...
int birthYear = sc.nextInt();
sc.nextLine();  // Otherwise in the next loop iteration, it will skip reading input and throw some exception
...
  1. Selectați o opțiune pentru student pentru a afișa, dar această opțiune este 1 indexate și ArrayList magazinele 0 indexate, așa că ar trebui să schimbați linia cu sc.nextInt() - 1:
int chosenStudent = sc.nextInt() - 1; // Choose a number that correlates to a student
  1. Scanner poate arunca o excepție în cazul în care introduceți, de exemplu, un șir în loc de un întreg. Deci, asigurați-vă că sunt excepțiile de manipulare folosind în mod corespunzător try-catch blocuri.
2021-11-24 04:26:42
1
  • Ai schimba ArrayList defination și se adaugă toString() în studen clasa.
  • Și pentru a imprima toate obiect student in loc de a folosi pentru bucla folosi doar un pos.

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, poti edita răspunsul tău și se adaugă un cod la fel de bine așa că OP pot înțelege mai bine?
kiner_shah

ok doar așteptați câteva ori
Batek'S

acum vedea acest cod.
Batek'S
0

Nu se poate declara tip de ArrayList în timp ce inițializa listOfObj și names în ArrayList.

Aici este modul corect de a declara ArrayList:

ArrayList<type> list = new ArrayList();

Si alta problema este ca in timp ce te aduce date din ArrayList. variabila chosenStudent ia poziția de utilizator și a obține date de la listOfObj dar indicele se începe de la 0 nu 1.

De exemplu dvs. de intrare este 2 apoi, ArrayList obține date de la poziția a doua, dar indicele se începe de la 1 în timp ce datele de imprimare. Trebuie să puneți chosenStudent - 1 pentru a obține date corecte.

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

Aici este codul meu:

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

În alte limbi

Această pagină este în alte limbi

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