Список вложенных массивов в Java - PullRequest
0 голосов
/ 06 августа 2020

Я запрашиваю информацию о кандидате пользователя, затем вызываю метод addcandidate и пытаюсь сохранить информацию о кандидате в списке массивов. Кстати, если пользователь хочет добавить нового кандидата, я снова получаю его информацию и хочу добавить свой Arraylist, но он содержит только информацию о последнем кандидате

мой код метода addcandidate, например,

static  void addcandidate(String name,String surname,String adress,String talent){
    List<List<Object>>listoflist=new ArrayList<>();
    List<Object>candidatelist=new ArrayList<Object>();
    candidatelist.add(name);
    candidatelist.add(surname);
    candidatelist.add(adress);
    candidatelist.add(talent);
    listoflist.add(candidatelist);
    

    System.out.println(listoflist);

}

, а также мой код, который запрашивает такую ​​информацию о кандидате

  while (true){
        Scanner oku=new Scanner(System.in);
        System.out.println("what kind of process do you want ? 1-Add Candidate 2-Add Employee " +
                "3- add employee from candidate 4-search candidate for talent 5-print wiew");
        int processtype=oku.nextInt();

        if (processtype==1){
            System.out.println("please enter candidate name");
            String cname=oku.next();
            System.out.println("please enter candidate sname");
            String csname=oku.next();
            System.out.println("please enter candidate adress");
            String cadress=oku.next();
            System.out.println("please enter candidate talent");
            String ctalent=oku.next();
            Candidate.addcandidate(cname,csname,cadress,ctalent);
            System.out.println("do you want to continue");
            String answer=oku.next();
            if (answer=="n"){
                break;
            }


        }
    }

my ожидаемые результаты выглядят так [[tom, jhn, usa, it], [peter, parker, england, language]]

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Необходимо объявить listoflist вне метода addcandidate. Например, вот так.

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static List<List<Object>> listoflist = new ArrayList<>();

    public static void main(String[] args) {
        addcandidate("Name 1", "Surname 1", "Street 1", "Music");
        addcandidate("Name 2", "Surname 2", "Street 2", "Singing");
        addcandidate("Name 3", "Surname 3", "Street 3", "Sport");
    }

    public static void addcandidate(String name, String surname, String adress, String talent){
        List<Object> candidatelist = new ArrayList<Object>();
        candidatelist.add(name);
        candidatelist.add(surname);
        candidatelist.add(adress);
        candidatelist.add(talent);
        listoflist.add(candidatelist);


        System.out.println(listoflist);

    }
}

Результат выполнения этого кода.

[[Name 1, Surname 1, Street 1, Music]]
[[Name 1, Surname 1, Street 1, Music], [Name 2, Surname 2, Street 2, Singing]]
[[Name 1, Surname 1, Street 1, Music], [Name 2, Surname 2, Street 2, Singing], [Name 3, Surname 3, Street 3, Sport]]
1 голос
/ 06 августа 2020

Ваше объявление listoflist находится внутри метода addCandiadte, поэтому каждый раз, когда создается список массивов, и, наконец, у вас есть список, который был создан последним. Сделайте что-то вроде следующего:

// outside addCandiadte method
 List<List<Object>>listoflist=new ArrayList<>();

static  void addcandidate(String name,String surname,String adress,String talent){
   
    List<Object>candidatelist = new ArrayList<Object>();    
    
    candidatelist.add(name);
    candidatelist.add(surname);
    candidatelist.add(adress);
    candidatelist.add(talent);
    
    listoflist.add(candidatelist);
    

    System.out.println(listoflist);

}

Надеюсь, вы уловили суть. Дополнительно используйте List<String>candidatelist вместо List<Object>candidatelist для лучшей читаемости и проверки типов.

...