(Java) Nesne bir arraylist'teyken bir nesnenin bilgilerini nasıl yazdırabilirim? [çoğaltmak]

0

Soru

Main'de bir arraylist'im var ve içinde bir yapıcı olan bir sınıfım ve verileri yazdırmak için bir yöntemim var. Çağrıldığında yeni bilgilerle yeni bir nesne ekliyorum ve onu tek bir yerde tutmak için Arraylist'e ekliyorum. Zor zamanlar geçirdiğim şey bilgiyi yazdırmak için kullanılan sözdizimi. Normal bir diziyle denedim ama ArrayList kullanmam gerekiyor. Bilgi nesnesi, belirli bir nesne, indeks baskı almak mümkün olmak istiyorum. Örneğin, son birkaç satırın altındaki kod:

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

Herhangi bir yardım veya açıklama büyük beğeni topluyor.

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

Tanımınızı değiştirmeniz gerekiyor listOfObj -den:

ArrayList listOfObj = new ArrayList();

-e doğru:

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

İlk irade bir ArrayList -den Object sınıf nesneleri.

İkincisi bir tane yaratacak ArrayList -den student sınıf nesneleri.

Kodunuzda birkaç sorun daha var:

  1. Kullanarak bir isim okuduğunuzdan beri nextLine, doğum yılını okuduktan sonra yeni bir satır atlamanız gerekebilir:
...
int birthYear = sc.nextInt();
sc.nextLine();  // Otherwise in the next loop iteration, it will skip reading input and throw some exception
...
  1. Öğrencinin görüntülenmesi için bir seçenek belirlersiniz, ancak bu seçenek 1 dizine eklenir ve ArrayList 0 endeksli depolar, bu nedenle satırı şu şekilde değiştirmelisiniz: sc.nextInt() - 1:
int chosenStudent = sc.nextInt() - 1; // Choose a number that correlates to a student
  1. Scanner örneğin, int yerine bir dize girmeniz durumunda istisna atabilir. Bu nedenle, istisnaları doğru şekilde kullandığınızdan emin olun try-catch Bloklar.
2021-11-24 04:26:42
1
  • ArrayList tanımını değiştirir ve studen'inize toString() eklersiniz sınıf.
  • Ve döngü kullanımı için kullanılan tüm öğrenci nesnesini yazdırmak için sadece bir sop.

ESKİ:-

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

Merhaba, cevabınızı düzenleyebilir ve op'nin daha iyi anlayabilmesi için bazı kodlar ekleyebilir misiniz?
kiner_shah

tamam sadece birkaç kez bekle
Batek'S

şimdi şu koda bakın.
Batek'S
0

Tür bildiremezsiniz ArrayList başlatırken listOfObj ve names içinde ArrayList.

İşte Arraylist'i bildirmenin doğru yolu:

ArrayList<type> list = new ArrayList();

Ve diğer sorun, arraylist'ten veri getirirken. değişken chosenStudent kullanıcıdan pozisyon alın ve kullanıcıdan veri alın. listOfObj ama dizin başlangıcından 0 değil 1.

Örneğin, girdiniz 2 ardından, ArrayList ikinci konumdan veri alır, ancak dizininiz şu adresten başlar: 1 verileri yazdırırken. Koymalısın chosenStudent - 1 doğru verileri almak için.

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

İşte benim kodum:

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

Diğer dillerde

Bu sayfa diğer dillerde

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