Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用linkedlist、JAVA添加多个项目_Java_Linked List_Shopping Cart_Cart_Kiosk - Fatal编程技术网

使用linkedlist、JAVA添加多个项目

使用linkedlist、JAVA添加多个项目,java,linked-list,shopping-cart,cart,kiosk,Java,Linked List,Shopping Cart,Cart,Kiosk,问题是: 假设卡有一个有效的PIN码开始,并且银行账户中有100个单位。 每个视频都有一个租赁“成本”。您需要扫描篮子列表并计算ATM交易的总额。您可以假设银行账户中始终有足够的单位来支付此练习的租金成本。 视频亭代码的版本将包含以下步骤: •创建视频标题的链接列表,并填写5项选项 •创建一个空链表(篮子)来存储客户选择 •呈现菜单驱动的选择过程 在屏幕上以选择编号逐项显示 识别所选内容并确定其是否有效 将所选视频放入第二个链接列表(篮) 从可用标题列表中删除以前选择的视频 完整的选择过程 将

问题是:

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

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

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

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

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

    将购物篮清单的内容带到自动取款机并付款

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


    }

我成功地只购买了一个项目,需要通过链表购物篮购买多个项目。

只有一次购买的原因是您没有尝试购买(或租赁;术语有点混乱)其他选择的循环。还有一些静态类变量使过程更复杂。这里有一些建议

主要方法
添加一个循环以收集其他输入。此外,删除
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;
}
此更改将提供如下演示:

********************************************************************
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,不知道你的意思。如果您是说,当您再次循环go并显示视频的两个副本时,这是因为您没有删除
showVideoList()
方法中的VideoList()调用并将其放置在
main
方法中。您只需要初始化清单一次,并且应该在
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]