Добавление нескольких элементов с помощью связного списка, JAVA

Это вопрос:

Предположим, что у карты есть действующий ПИН-код для запуска и что на банковском счете 100 единиц. Каждое видео имеет стоимость проката. Вам нужно будет отсканировать список корзин и рассчитать сумму транзакции через банкомат. Вы можете предположить, что на банковском счете всегда достаточно единиц, чтобы покрыть стоимость аренды для этого упражнения. Версия кода Video Kiosk будет содержать следующие шаги:

• Создайте связанный список для видео заголовков и заполните выбор из 5 пунктов

• Создать пустой Связанный список (Корзина) для хранения выбора клиента

• Представить процесс выбора по меню

  • Отображение на экране с указанием номера выбора
  • Определите выбор и определите, является ли он действительным
  • Поместить выбранное видео во 2-й связанный список (Корзина)
  • Удалить ранее выбранное видео из доступного списка заголовков
  • Полный процесс выбора

    Принесите содержимое списка корзины в банкомат и оплатите

Vkiosk.java

    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.Scanner;

    public class VKiosk {
        private static LinkedList VTable=new LinkedList();
        private static LinkedList Basket=new LinkedList();
        private static double rentCost=0;
        private static int j=1;
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
             // declaring scanner name as "typeNumber"
        Scanner typeNumber = new Scanner(System.in);    
        System.out.println("::: Welcome to My Java Program To model an ATM machine :::");

            showVideoList();
            System.out.print("Input the serial number of video to buy: ");
            buyVideo();
            System.out.println("Your total amount of Cost: "+ rentCost);

            MMachine buy = new MMachine();
            buy.Txn(rentCost);



        }
        public static double buyVideo(){
            Scanner typeNumber = new Scanner(System.in);
            String title=typeNumber.nextLine();
            String amount=null;
            for(int i=0;i<VTable.size();i++){
                String videoDetails=VTable.get(i).toString();

                if(videoDetails.toLowerCase().contains(title.toLowerCase())){
                    Basket.add(VTable.get(i));
                   for(int j=videoDetails.length()-2;j>=0;j--){
                       if(videoDetails.charAt(j)==' '){
                        break;
                       }
                        amount=videoDetails.substring(j, videoDetails.length()-1);

                   }
                    VTable.remove(i);
                }

            }
            rentCost=Double.parseDouble(amount);

            return rentCost;
        }


        public static void VideoList(){
           Video vTable1=new Video("BladeRunner", 1, 5);
           Video vTable2=new Video("Wages of Fear", 2, 4);
           Video vTable3=new Video("Grease", 3, 5);
           Video vTable4=new Video("Mama Mia", 4, 4);
           Video vTable5=new Video("L'Illusionniste", 5, 6);
           VTable.add(vTable1);
           VTable.add(vTable2);
           VTable.add(vTable3);
           VTable.add(vTable4);
           VTable.add(vTable5);
        }
        public static void showVideoList(){
                System.out.println();
                System.out.println("********************************************************************");
                System.out.println("List of the Videos are: ");
                System.out.println("********************************************************************");
                System.out.println("Serial No       Video Detetails");
                VideoList();

                for(int i=0; i<VTable.size(); i++){
                    System.out.println( j+"               "+VTable.get(i));
                    j++;
                }
                System.out.println();
        }


    }

Video.java

public class Video{
    private String  title;
    private int     serial;
    private double  cost;

    public Video(String title, int serial, double cost)
    {
        this.title  = title;
        this.serial = serial;
        this.cost   = cost;
    }

    public String getTitle()  {return title;}
    public int    getSerial() {return serial;}
    public double  getCost()   {return cost;}


    public String getVideo() {
    return "title:" + title + " Serial: " + serial + " Cost: " + cost;
  }
    //  Upgrade output of toString ()

    @Override
    public String toString() {
        return "["+getVideo()+"]";
  }
}

Мне удалось купить только один товар, мне нужно купить несколько товаров через корзину связанного списка.

1 ответ

Решение

Причина, по которой совершается только одна покупка, заключается в том, что у вас нет петли для попытки приобрести (или арендовать; номенклатура немного запутана) дополнительные выборы. Есть также некоторые static переменные класса, которые делают процедуру немного более сложной. Вот некоторые предложения.

Основной метод
Добавьте цикл для сбора дополнительных входных данных. Кроме того, удалите static double rentCost и перейдите к основному методу (также измените buyVideo для возврата стоимости вместо обновления переменной экземпляра). Добавьте метод, чтобы продолжить собирать данные.

private static boolean purchaseAnother(Scanner stdin)
{
    while (true) {
        System.out.println();
        System.out.println("Purchase another (y/n): ");
        String chk = stdin.nextLine();

        if (chk != null && chk.trim().length() > 0) {
            if (chk.toLowerCase().equals("y")) { return true; }
            if (chk.toLowerCase().equals("n")) { return false; }
        }
    }
}


/**
 * @param args
 *            the command line arguments
 */
public static void main(String[] args)
{
    // declaring scanner name as "typeNumber"
    Scanner typeNumber = new Scanner(System.in);
    System.out.println(
            "::: Welcome to My Java Program To model an ATM machine :::");

    boolean buyMore = true;

    // **ADD: initialize the video list only once
    VideoList();

    // **USE LOCAL VARIABLE FOR COST
    double rentCost = 0.0d;


    while (buyMore) {
        showVideoList();
        System.out.print("Input the serial number of video to buy: ");
        //**ACCUMULATE THE TOTAL COST
        rentCost += buyVideo();
        System.out.printf("Current total $%.2f", rentCost);

        // SEE IF WISH TO KEEP GOING IF THERE IS ANYTHING LEFT TO RENT
        buyMore = (! VTable.isEmpty() && purchaseAnother(typeNumber));
    }

    // actually make a purchase
    // ADD STATEMENT, but this might be in the MMachine class; unknown
    System.out.printf("Charging $%.2f to the Debit Card%n", rentCost);
    MMachine buy = new MMachine();
    buy.Txn(rentCost);


    System.out.println("Have a nice day!");
}

Метод BuyVideo
Изменить, чтобы вернуть сумму аренды; не обновлять переменную экземпляра

public static double buyVideo()
{
    Scanner typeNumber = new Scanner(System.in);
    String title = typeNumber.nextLine();
    String amount = null;
    for (int i = 0; i < VTable.size(); i++) {
        String videoDetails = VTable.get(i).toString();

        if (videoDetails.toLowerCase().contains(title.toLowerCase())) {
            Basket.add(VTable.get(i));
            for (int j = videoDetails.length() - 2; j >= 0; j--) {
                if (videoDetails.charAt(j) == ' ') {
                    break;
                }
                amount = videoDetails.substring(j,
                        videoDetails.length() - 1);

            }

            // ** ADD LINE TO INDICATE ACTION
            System.out.println("Purchasing: " + VTable.remove(i).getTitle());
        }

    }
    // ** CHANGE TO USE A LOCAL VARIABLE AND RETURN IT
    double videoRentCost = Double.parseDouble(amount);

    return videoRentCost;
}

метод showVideoList
Удалить VideoList() вызов - инициализируйте список аренды только один раз в main() метод. Кроме того, рассмотрите возможность очистки выходного форматирования немного.

public static void showVideoList()
{
    System.out.println();
    System.out.println(
            "********************************************************************");
    System.out.println("List of the Videos are: ");
    System.out.println(
            "********************************************************************");

    // **USE PRINTF TO GIVE BETTER FORMATTING
    System.out.printf("%10s     %53s%n","Serial No","Video Details");


    for (int i = 0; i < VTable.size(); i++) {
        // **USE SIMILAR FORMATTING OUTPUT
        System.out.printf("%10d     %53s%n", VTable.get(i).getSerial(), VTable.get(i));
    }
    System.out.println();
}

Это изменение даст представление как:

********************************************************************
List of the Videos are: 
********************************************************************
 Serial No                                             Video Details
         1                   [title:BladeRunner Serial: 1 Cost: 5.0]
         2                 [title:Wages of Fear Serial: 2 Cost: 4.0]
         3                        [title:Grease Serial: 3 Cost: 5.0]
         4                      [title:Mama Mia Serial: 4 Cost: 4.0]
         5               [title:L'Illusionniste Serial: 5 Cost: 6.0]
Другие вопросы по тегам