2016-04-25 2 views
1

Это вопрос:Добавление нескольких элементов с помощью LinkedList, JAVA

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

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

• Создание пустого Linked List (корзины) для хранения выбора клиента

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

  • Показать на экране расписан с выбором количеством
  • Определить выбор и определить, если это действительно
  • Put выбранное видео в 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()+"]"; 
    } 
} 

Я удается купить только один вещи, нужно купить несколько элементов через Linked List корзину.

ответ

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] 
+0

При попытке приобрести другой список видеорежима Repeteadly показывая больше .... дважды –

+0

@AnilShivakoti, не уверен, что вы имеете в виду. Если вы говорите, что когда вы снова заходите назад, и он показывает две копии видео, это потому, что не удалял вызов VideoList() в методе 'showVideoList()' и помещал его в метод 'main'. Вам нужно только инициализировать инвентарь за один раз, и это должно быть сделано в методе 'main'. – KevinO

+0

Спасибо за помощь, спасибо снова –

Смежные вопросы