【问题标题】:Adding multiple items using linkedlist, JAVA使用linkedlist,JAVA添加多个项目
【发布时间】:2016-08-19 13:39:28
【问题描述】:

这是问题:

假设该卡有一个有效的 PIN 码,并且银行账户中有 100 个单位。 每个视频都有租赁“成本”。您需要扫描购物篮清单并计算 ATM 交易的总额。您可以假设银行帐户中始终有足够的单位来支付此练习的租金。 一个视频亭代码版本将包含以下步骤:

• 为视频标题创建链接列表并填写 5 项选择

• 创建一个空的链接列表(篮子)来存储客户选择

• 呈现菜单驱动的选择过程

  • 在屏幕上逐项显示选择编号
  • 识别选择并确定它是否有效
  • 将所选视频放入第二个链表(篮子)
  • 从可用的标题列表中删除之前选择的视频
  • 完整的选择过程

    将购物篮清单的内容带到ATM并付款

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();
        }


    }

视频.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()+"]";
  }
}

我成功只买了一件,需要通过Linked List Basket购买多件。

【问题讨论】:

    标签: java linked-list shopping-cart cart kiosk


    【解决方案1】:

    只有一次购买的原因是您没有循环尝试购买(或租用;命名法有点混乱)其他选择。还有一些static 类变量使过程更复杂一些。以下是一些建议。

    主要方法
    添加一个循环来收集额外的输入。此外,删除static double rentCost 并移至main 方法(另外,更改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!");
    }
    

    购买视频方法
    更改归还租金金额;不要更新实例变量

    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]
    

    【讨论】:

    • @AnilShivakoti,不确定你的意思。如果您说当您再次循环返回并显示视频的两个副本时,那是因为没有删除 showVideoList() 方法中的 VideoList() 调用并将其放置在 main 方法中。您只需要初始化一次库存,应该在main方法中完成。
    • 感谢帮助,再次感谢
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多