Создание следующего объекта и размещение его в ArrayList

Итак, у меня такое чувство, что объяснить, что я имею в виду, может быть очень сложно, тем не менее, я попытаюсь. Итак, в основном, что я хочу сделать, это СОЗДАТЬ следующий ОБЪЕКТ и РАЗМЕСТИТЬ его в ARRAYLIST, используя < strong>ВВОД ПОЛЬЗОВАТЕЛЯ.

Можно ли добиться этого, используя количество ArrayList? Предполагая, что мой конструктор позволит передать имя для создания объекта, смогу ли я запросить у пользователя имя, а затем использовать его для этого, а затем передать его уже созданному ArrayList?

Я чувствую, что не могу правильно объяснить, что я имею в виду, английский не мой родной язык, извините. :)

public class Voter 
{ 
   private String name;
   private ArrayList<Voter> voters;

   public Voter(){
      this.name = "";
      voters = new ArrayList();
   }

   public Voter(String name)
   {
      this.name = name;
      voters = new ArrayList<>();
   }

   public void add(Voter v)
   {
      if (!this.voters.contains(v))
      {
          this.voters.add(v);
      }
   }

}



public static void main(String[] args)
{   
   Voter v1 = new Voter("Admin");

   Voter v = new Voter();
   v.add(v1);

   displayMenu();

   int option = getInt("Enter Option:", 0, 3);
   while (option != END)
   {
      if (option == 1)
      {
         doOption1();
         int count = v.countArray(v);
      }
   }
}

public static void displayMenu()
{
    System.out.println("\nSample Menu of Options");
    System.out.println("0. Exit this menu");
    System.out.println("1. Option 1");
}

public static void doOption1()
{
   System.out.println("Please, enter the below details to register for 
   voting system.");
   System.out.println("Full name");
   String name = keyboard.nextLine();
   //THIS IS WHERE I WANT TO CREATE A NEW OBJECT AND PUT IT AS AN ELEMENT OF
   //MY Voter ARRAYLIST
}

public static int getInt(String prompt, int min, int max)
{
    System.out.print(prompt);
    int value = keyboard.nextInt();
    while ((value < min) || (value > max))
    {
        System.out.println("Invalid - [" + min + "," + max + "] only");
        System.out.print(prompt);
        value = keyboard.nextInt();
    }
    keyboard.nextLine();
    return value;
}

person G. Martyna    schedule 06.04.2017    source источник
comment
Итак, вы хотите разрешить пользователю определять свойства объекта с помощью пользовательского ввода, а затем добавлять сконструированный объект в ArrayList?   -  person Ousmane D.    schedule 06.04.2017
comment
Во-первых, вам понадобится СКАНЕР для чтения ПОЛЬЗОВАТЕЛЬСКОГО ВВОДА, а затем вам нужно будет СОХРАНИТЬ ПОЛЬЗОВАТЕЛЬСКИЙ ВВОД< /b> в VARIABLE или добавить его непосредственно в ARRAYLIST.   -  person Jacob G.    schedule 06.04.2017
comment
Действительно непонятно, что вы спрашиваете. Лучшее, что можно сделать: показать свой текущий код и объяснить, где вы застряли. Сначала прочитайте, как создать минимально воспроизводимый пример.   -  person Erwin Bolwidt    schedule 06.04.2017
comment
Я хочу создать совершенно новый объект, используя пользовательский ввод (в данном случае имя) в качестве аргумента для конструктора, а затем добавить этот вновь созданный экземпляр класса в ArrayList.   -  person G. Martyna    schedule 06.04.2017
comment
@ G.Martyna, вы должны предоставить хотя бы какой-то код, чтобы люди могли вам помочь. Конечно, код не обязательно должен работать, но, по крайней мере, предоставьте то, что вы пытались сделать.   -  person Ousmane D.    schedule 06.04.2017
comment
@OusmaneMahyDiaw Я добавил часть своего кода.   -  person G. Martyna    schedule 06.04.2017
comment
@G.Martyna, хорошо, я посмотрю.   -  person Ousmane D.    schedule 06.04.2017
comment
@ Г.Мартина, посмотри мой ответ.   -  person Ousmane D.    schedule 06.04.2017


Ответы (1)


С вашим текущим алгоритмом все, что вам нужно сделать, чтобы добавить элементы в ArrayList объекта Voter, — это сначала преобразовать определение метода doOption1 в метод, описанный ниже.

public static void doOption1(Voter voter){
      System.out.println("Please, enter the below details to register for voting system.");
      System.out.println("Full name");
      String name = keyboard.nextLine();
      voter.add(new Voter(name)); // you could validate name before constructing the object if you see fit.
}

После того, как вы это сделаете, вам нужно будет изменить этот код:

while (option != END){
    if (option == 1){
       doOption1();
       int count = v.countArray(v);
    }
}

к этому:

while (option != END){
    if (option == 1){
       doOption1(v); // notice the argument
       int count = v.countArray(v);
    }
}
person Ousmane D.    schedule 06.04.2017
comment
Потрясающий! Я понимаю, откуда ты. Теперь, если бы у меня было больше полей в моем классе Voter, мне просто нужно было бы добавить больше аргументов в эту строку Voter.getVoters().add(new Voter(name)); Правильно? Как я уже сказал, это был всего лишь небольшой фрагмент моего кода, поэтому я понимаю, что в нем много недостающих битов. - person G. Martyna; 06.04.2017
comment
@ G.Martyna G.Martyna, это правильно, если у вас есть больше параметров в определении конструктора, вам придется добавить больше аргументов. - person Ousmane D.; 06.04.2017
comment
Большое спасибо! Это действительно решило мою проблему! :) - person G. Martyna; 06.04.2017
comment
У меня есть еще один вопрос (я знаю, что это было давно). Что, если я захочу сохранить этого нового избирателя и сохранить его в своем списке массивов для использования в другой раз? На данный момент он добавляет избирателя в список массивов, но всякий раз, когда я закрываю приложение и перезапускаю его, новый избиратель, которого я только что создал, исчезает. - person G. Martyna; 25.04.2017
comment
@ G.Martyna, вы захотите изучить использование баз данных для хранения данных. есть очень простая надстройка системы баз данных от mozilla который вы можете использовать, вам также потребуется загрузить драйвер JDBC для этого. Следуйте по ссылкам, которые я предоставил, и прочитайте все шаг за шагом, после чего вы сможете сохранить данные, даже если программа закрыта. Однако вам потребуется изучить SQL, чтобы выполнять запросы к базе данных. - person Ousmane D.; 25.04.2017
comment
вам нужно знать только простые методы CRUD, и вы сможете идти. когда вы нажимаете на ссылку, вы должны искать главы INSERT , SELECT , UPDATE , DELETE. удачи ^^. - person Ousmane D.; 25.04.2017
comment
если вы не хотите вникать во все эти базы данных, прочитайте следующую ссылку: сохранить изменения (навсегда) в массиве?. - person Ousmane D.; 25.04.2017
comment
Большое спасибо! У меня есть базовый опыт работы с SQL, но я думаю, что буду использовать последнее решение! Спасибо вам огромное, еще раз! :) - person G. Martyna; 27.04.2017