Добавление пользовательского ввода в ArrayList с использованием цикла do-while - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь добавить пользовательский ввод в Arraylist, используя цикл do-while, однако я продолжаю получать список, состоящий только из последнего введенного элемента, повторенного несколько раз.

public static ArrayList<Item> purchaseItems()
       {
        ArrayList<Item> toBuy = new ArrayList<Item>();

        String response;
        System.out.println("What would you like to purchase? (type \"done\" to end) ");   
        do {

             response = in.nextLine();
             if(!response.equals("done") ){

                    toBuy.add(new Item(response, randGen.nextInt(100)));
                    System.out.println(toBuy);
            }

        } while(!response.equals("done"));

        return toBuy;
    }

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Вот полностью рабочий пример

package stackoverflow;

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

public class Q53837506 {

    public static void main(String[] args) {
        ArrayList<Item> purchaseItems = purchaseItems();
        System.out.println(purchaseItems);

    }

    public static class Item {
        String r;
        int v;

        public Item(String r, int v) {
            super();
            this.r = r;
            this.v = v;
        }

        @Override
        public String toString() {
            return "Item [r=" + r + ", v=" + v + "]";
        }
    }

    static final Random randGen = new Random();

    public static ArrayList<Item> purchaseItems() {
        ArrayList<Item> toBuy = new ArrayList<Item>();

        String response;
        System.out.println("What would you like to purchase? (type \"done\" to end) ");
        Scanner in = new Scanner(System.in);
        do {

            response = in.nextLine();
            if (!response.equals("done")) {

                toBuy.add(new Item(response, randGen.nextInt(100)));
                System.out.println(toBuy);
            }
        } while (!response.equals("done"));

        return toBuy;
    }
}
0 голосов
/ 18 декабря 2018

должно работать, как указано в моем комментарии.Пожалуйста, реализуйте метод toString () в вашем классе Item, если это еще не сделано.Вы должны заменить ваш System.out.println следующим образом:

    public static ArrayList<Item> purchaseItems()
           {
            ArrayList<Item> toBuy = new ArrayList<Item>();

            String response;
            System.out.println("What would you like to purchase? (type \"done\" to end) ");   
            do {

                 response = in.nextLine();
                 if(!response.equals("done") ){

                        toBuy.add(new Item(response, randGen.nextInt(100)));
                }

            } while(!response.equals("done"));

               for (Item item : toBuy){
               System.out.println(item);
                }
            return toBuy;
        }

, если это не помогает, пожалуйста, поделитесь еще кодом.

...