2016-04-26 6 views
-1

Ich mache gerade mein allererstes Coding-Projekt in Java. Es ist ein Bestellsystem, das dem Kunden die folgenden Dinge ermöglichen soll. Zunächst sollte der Kunde in der Lage sein, durch die Anwendung zu navigieren, sein Lieblingsrestaurant in Kopenhagen auszuwählen und Mahlzeiten aus seinen individuellen Menülisten auszuwählen. Zweitens sollte jede Bestellung in Bezug auf die Bestellmenge und den Lieferort angepasst werden können. Schließlich sollte das System den nächsten verfügbaren Biker zuweisen, um die Bestellung vom Restaurant abzuholen und die Mahlzeit zum festgelegten Zeitpunkt an das angegebene Ziel zu liefern.Sammlungsfehler für Mahlzeit Bestellsystem in Java

Nach viel Hilfe von @Theresa habe ich das Programm erneut getestet, aber ich kann nicht die letzte Meile laufen. Der Teil, wo das System den nächsten verfügbaren Biker zuweisen sollte, um die Bestellung aus dem Restaurant abzuholen, funktioniert nicht. Ich fühle mich immer noch irgendwie hoffnungslos, weil ich versucht habe, alles gewesen zu sein, was ich konnte

Alle anderen Kommentare, Hinweise oder Hilfe würde sehr geschätzt werden. Vielen Dank im Voraus.

Dies wird der aktualisierte Code: [https://www.dropbox.com/s/awvohw7vholsdrd/Cleaner_DeliveryBike.zip?dl=0][1]

private static void setDelivery() throws Exception { 

     double totalTime = 0; 

     String delivery = "Now that you have chosen what you want to order, we would like to introduce to you our MadCyklers." 
       + "All day we have 5 biker that are touring arround the city to deliver your order right to you. We only need" 
       + "to know one thing from you: where in Copenhagen are you right now?"; 

     try { 
      printString(navigationFrameTop); 
      printString(delivery); 
      printString(navigationFrameBottom); 
      printString(categoryFrame); 
      System.out.println("       *COPENHAGEN*     "); 
      System.out.println(""); 
      System.out.println(" LONG> 12.52 12.54 12.56 12.58 12.60 12.62"); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.70 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.69 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.68 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.67 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.66 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println(" ^ .  .  .  .  .  . "); 
      System.out.println(" LAT"); 
      printString(categoryFrame); 
      printString(inputFrame); 
      customer.setLongitude(0); 
      printString(inputFrame); 
      customer.setLatitude(0); 
      printString(inputFrame); 
      double min = 9999999; 
      double distance; 
      // checking if Indications are correct. 
      for(Biker biker : BIKERS) { 
       biker.setLatitude(0); 
       biker.setLongitude(0); 
       distance = biker.distanceTo(customer) + (restaurants.get(restaurantPick)).distanceTo(customer); 
       if(distance < min) { 
        min = min + distance; 
        activeBiker = biker.iD; 
       } 
      } 

      totalTime = (min/KILOMETRES_PER_HOUR) * 3600000 
        + restaurants.get(restaurantPick).getPreparationTime() * 60000; 
      deliveryTime = (long) (currentTime + totalTime); 
      String deliveryConfirmation = " Your order will be delivered to your location at: " + deliveryTime 
        + " from our MadCykler " + BIKERS.get(activeBiker).getTipFactor() + "."; 

      printString(deliveryConfirmation); 
      payment(); 
     } catch (Exception e) { 
      printString(errorFrame); 
      System.out.println("Error! Reloading Main Menu..."); 
      printString(errorFrame); 
      main(null); 
     } 
    } 

    private static void payment() throws Exception { 

     BigDecimal tip = BigDecimal.ZERO; 
     BigDecimal tipPrice = BigDecimal.ZERO; 
     int payingOption = 0; 
     String payment = "There is only one more thing left to do for you. Just initialize the payment and we will send" 
       + "you the order confirmation. Then you just have to wait for" + BIKERS.get(activeBiker).getTipFactor() 
       + "to arrive with your order."; 
     String totalCost = "The total costs are " + getTotal() + "DKK. What % tip would you like to give to the Cykler? "; 

     try { 
      printString(navigationFrameTop); 
      printString(payment); 
      printString(navigationFrameBottom); 
      printString(categoryFrame); 
      printString(totalCost); 
      printString(categoryFrame); 
      printString(inputFrame); 

      tip = BIKERS.get(activeBiker).getTipFactor(); 

      printString(inputFrame); 

      tipPrice = tip.divide(tip, 100).multiply(getTotal()); 
      deliveryCost = deliveryCost.add(getTotal()).add(tipPrice); 
      String totalDelivery = "The overall delivery cost are " + deliveryCost + "DKK. Press [1] if you would like to pay," 
        + "[2] to pick a new restaurant, or [3] to return to the Main Menu."; 
      String totalDeliveryError = "Error! Press [1] if you would like to pay,[2] to pick a new restaurant, or [3] to " 
        + "return to the Main Menu."; 

      printString(categoryFrame); 
      printString(totalDelivery); 
      printString(categoryFrame); 
      do { 
       Scanner input = new Scanner(System.in); 
       printString(inputFrame); 
       payingOption = input.nextInt(); 
       printString(inputFrame); 
       switch (payingOption) { 
       case 1: 
        wrapOrder(); 
        break; 
       case 2: 
        choiceMeal = null; 
        quantityMeal = null; 
        pickingRestaurant(); 
        break; 
       case 3: 
        choiceMeal = null; 
        quantityMeal = null; 
        main(null); 
        break; 
       default: 
        printString(errorFrame); 
        printString(totalDeliveryError); 
        printString(errorFrame); 
        break; 
       } 
      } while (payingOption != 1 && payingOption != 2 && payingOption != 3); 
     } catch (Exception e) { 
      printString(errorFrame); 
      System.out.println("Error! Reloading Main Menu..."); 
      printString(errorFrame); 
      main(null); 
     } 
    } 

    private static void wrapOrder() { 

     String s = ""; 
     UUID customerId; 
     BigDecimal currentBalance = BigDecimal.ZERO; 
     String customerDetails = customer.toString(); 
     long arrival = deliveryTime; 
     BigDecimal bill = deliveryCost; 

     currentBalance = creditAccounts.get(customerAccountLoggedIn).getBalance(); 
     if (currentBalance.compareTo(deliveryCost) > 0) { 
      printString(categoryFrame); 
      System.out.println(" Your payment was successful."); 
      printString(categoryFrame); 
      creditAccounts.get(customerAccountLoggedIn).withdraw(deliveryCost); 
      for (int i = confirmations.size(); i < confirmations.size() + 1; i++) { 
       customerId = confirmations.get(i).getOrderId(); 
       Confirmation confirmation = new Confirmation(customerId, customerDetails, arrival, bill); 
       confirmations.add(confirmation); 
       printString(navigationFrameTop); 
       confirmation.toString(); 
       printString(navigationFrameBottom); 
      } 
     } 
     else { 
      printString(errorFrame); 
      creditAccounts.get(customerAccountLoggedIn).withdraw(deliveryCost); 
      printString(errorFrame); 
      reCharging(); 
     } 
     // ending the program and clearing all content during the order 
    } 

Antwort

0

Warum Sie Ihr System haben alles codiert schwer gemacht haben? Eine bessere Option wäre, die Menüs/Restaurants aus den Konfigurationsdateien oder der Datenbank laden zu lassen. Was passiert, wenn ein Restaurant verlässt oder sich anschließt? Was ist, wenn sie ihre Speisekarte ändern? Sie müssten das Programm jedes Mal wiederholen ...

Tun Sie alles Datengesteuert und Sie können es leicht ändern.

Schauen Sie sich die Einheiten in dem System, wo könnte es ändern - was ist, wenn anstelle von Radfahrern Sie Menschen mit Autos hatten die mehr als eine Lieferung zu einem Zeitpunkt, nehmen usw.

Mein Vorschlag ist, um herauszufinden, wie um es datengesteuert zu machen, dann können Sie die Funktionalität MVC teilen und dann wird das Problem vielleicht bei Ihnen herausspringen.

Hier ist eine kleine Anregung

try { 
    System.out.println("====================================================="); 
    System.out.println("This is the menu of " + restaurants.get(restaurantPick).getName()); 
    System.out.println("====================================================="); 
    printMenu(InitialiseSystem.MENUS.get(restaurantPick)); 
    orderingMeals(); 
} catch (Exception e) { 
    System.out.println("Sorry, there is error. You will return to the Main Menu"); 
    main(null); 
} 

Also das ist, wo Sie es ordentlicheres machen kann ich den fertigen Code oben gesetzt wird, wenn ich es

private void initMenus() { 
     Map<String, Meal> tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Norwegian Lobster", new Meal("Norwegian Lobster", new BigDecimal(145.00))); 
     tempMenu.put("Pork Neck Jutland", new Meal("Pork Neck Jutland", new BigDecimal(195.00))); 
     tempMenu.put("Tenderloin", new Meal("Tenderloin", new BigDecimal(249.50))); 
     MENUS.add(tempMenu); 
     tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Kaiseki Sushi", new Meal("Kaiseki Sushi", new BigDecimal(300.00))); 
     tempMenu.put("Tempura Tokyo", new Meal("Tempura Tokyo", new BigDecimal(140.00))); 
     tempMenu.put("Tonkotsu Ramen", new Meal("Tonkotsu Ramen", new BigDecimal(140.00))); 
     MENUS.add(tempMenu); 
     tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Los Burritos", new Meal("Los Burritos", new BigDecimal(105.00))); 
     tempMenu.put("Beef Carnitas", new Meal("Beef Carnitas", new BigDecimal(145.00))); 
     tempMenu.put("Chicken Enchiladas", new Meal("Chicken Enchiladas", new BigDecimal(119.00))); 
     MENUS.add(tempMenu); 
     tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Hamburger", new Meal("Hamburger", new BigDecimal(129.00))); 
     tempMenu.put("Cheeseburger", new Meal("Cheeseburger", new BigDecimal(129.00))); 
     tempMenu.put("Portobello Burger", new Meal("Portobello Burger", new BigDecimal(149.00))); 
     MENUS.add(tempMenu); 
     tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Fried Rice", new Meal("Fried Rice", new BigDecimal(68.00))); 
     tempMenu.put("Noodle Salad", new Meal("Noodle Salad", new BigDecimal(62.00))); 
     tempMenu.put("Meatball Soup", new Meal("Meatball Soup", new BigDecimal(96.00))); 
     MENUS.add(tempMenu); 

    } 
+0

beenden Es würde, was zu tun Sie sagen, aber wir haben überhaupt nicht mit Datenbanken gearbeitet. Daher weiß ich, dass ich nur wissen kann, wie man hart codiert ...:/Das System selbst wäre effektiver und sollte einstellbar sein, aber die Sachen, die wir gelernt haben, erlauben es mir nicht, es anders zu machen. Hättest du noch andere Vorschläge, wie ich mit meinem harten Code umgehen könnte? @TheresaForster – maximal16

+0

Dann schlage ich vor, Sie hart Code an einem Ort und den Rest um ihn herum zu bauen, ich schätze, Sie tun dies als ein College-Projekt dann –

+0

Ja genau. Um ehrlich zu sein, bin ich infantil, wenn es um Codierung geht. Ich habe IT-Business-Hintergrund und wählte eine Programmier-Minor, um wirklich eine höhere Sprache zu lernen. Ich habe in den letzten 3 Wochen 90 Stunden investiert, um dieses Projekt zum Laufen zu bringen. Vielen Dank! Ich werde das jetzt implementieren und versuchen zu sehen, ob ich es aufbauen kann. Ich hoffe, es wird aufhören, Probleme zu machen. – maximal16