2013-07-02 3 views
0

Я тренируюсь из книги, самостоятельно изучая. Это дует мой разум. Если бы кто-нибудь мог мне помочь?Как использовать модульное деление?

Как вычесть сумму первого, второго и третьего мешков, а также собрать сумму номер сумки?

Проект запрашивает эти критерии> Информация о назначении Компания продает кофе только в мешках по 2 фунта. Цена каждого мешка составляет 5,50. Когда клиент делает заказ, они отправляют кофе в коробку. Ящики выпускаются в трех размерах. Большой (Содержит 20 мешков, среда (содержит 10 мешков, и малые (содержит 5 мешков).

Стоимость большого ящика составляет $ 1,80 среднего $ 1.00 малых $ 0,60 Порядок поставляется в наименее дорогой способом, Примеры: Флаг для упаковки - это заполнение больших и средних ящиков полностью, то есть коробка заполнена фазами. Только маленькие ящики могут иметь пустые места, но это не оставляет полностью заполненную третью коробку. вычисляет общую стоимость заказа. Отображается следующий формат:

Количество заказанных сумок: 52 - $ 286,00

коробки используются 2 Большой - 3,60 1 средний - 1,00 1 маленький - 0,60

Ваша общая стоимость: $ 291,20

образец кода

import javax.swing.*; 
    import java.lang.*; 
    import java.text.DecimalFormat; 
    import java.util.*; 
    import java.io.*; 
    import java.math.*; 

    public class CoffeeBags { 

    public static void main(String [] args) throws IOException 
    { 
     DecimalFormat df = new DecimalFormat ("#,##0.00"); 

     BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));     

     int numberOfBags; 
     int largeBags = 2; 
     int mediumBags = 1; 
     int smallBags = 1; 
     double costOfLargeBags = 3.60; 
     double costOfMediumBags = 1.00; 
     double costOfSmallBags = 0.60; 
     double costPerBag = 5.50; 
     double totalCost; 
     double totalCostWithBags; 

     System.out.print("Enter number of bags to order: "); 
     String numberOfBagsStr = bufReader.readLine(); 
     numberOfBags = Integer.parseInt(numberOfBagsStr); 


     totalCost = numberOfBags * costPerBag; 
     System.out.println("Number of bags ordered: " + numberOfBags + " - $" +  df.format(totalCost)); 

     System.out.println("Boxes used:"); 
     System.out.println(" " + largeBags + " Large - $" +  df.format(costOfLargeBags)); 
     System.out.println(" " + mediumBags + " Medium - $" + df.format(costOfMediumBags)); 
     System.out.println(" " + smallBags + " Small - $" + df.format(costOfSmallBags)); 
     //System.out.print("Your total cost is: $ " + (totalCostWithBags)); 
     //String numberOfUnitsStr = bufReader.readLine(); 
     //numberOfUnits = Integer.parseInt(numberOfUnitsStr); 

     System.out.println("\nPress any key to continue. . ."); 

     System.exit(0); 
    } 
} 

ответ

2

Вы недопонимание упражнения, на основе на имена переменных. У вас есть -boxes-, который может соответствовать 20/10/5 мешкам, в зависимости от размера; большие и средние ящики должны быть полными, маленьких не нужно.

Итак, вы берете целое количество мешков, разделите их на 20, положите их в большие коробки; затем возьмите остаток, разделите его на 10, затем остаток от него перейдет в маленькие ящики.

Посмотрите here для операторов; деление int на другое int всегда будет округлено.

1

Я придумал следующий код, который достигает вашей цели. Использование ints для округления очень полезно в этой ситуации. Вы также должны правильно указать свои переменные. Они помещаются в коробки, а не в мешки.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.text.DecimalFormat; 

public class CoffeeBags { 
public static void main(String [] args) throws IOException { 
    DecimalFormat df = new DecimalFormat ("#,##0.00"); 

    BufferedReader bufReader = new BufferedReader( 
         new InputStreamReader(System.in)); 

    int    numberOfBags = 0; 
    int    numberOfBoxes = 0; 
    int    numberLargeBoxes = 0; 
    int    numberMediumBoxes = 0; 
    int    numberSmallBoxes = 0; 
    double   costOfLargeBox = 1.80; 
    double   costOfMediumBox = 1.00; 
    double   costOfSmallBox = 0.60; 
    double   totalCostLargeBoxes; 
    double   totalCostMediumBoxes; 
    double   totalCostSmallBoxes; 
    double   totalBoxCost; 
    double   costPerBag = 5.50; 
    double   totalBagCost; 
    double   totalCostWithBags; 

    System.out.print("Enter number of bags to order: "); 
    String numberOfBagsStr = bufReader.readLine(); 
    try { 
     numberOfBags = Integer.parseInt(numberOfBagsStr); 
    } catch (NumberFormatException e) { 
     System.out.println("Error: Enter digits only"); 
    } 


    totalBagCost = numberOfBags * costPerBag; 
    if (numberOfBags > 20) { 
     numberLargeBoxes = numberOfBags/20; 
    } 
    if (numberOfBags - (numberLargeBoxes*20) < 20 || numberLargeBoxes == 0) { 
     numberMediumBoxes = (numberOfBags - (numberLargeBoxes*20))/10; 
    } 
    if (numberOfBags - (numberLargeBoxes*20) - (numberMediumBoxes*10) < 10 || 
      numberLargeBoxes == 0 || numberMediumBoxes == 0) { 
     numberSmallBoxes = (numberOfBags - (numberLargeBoxes*20) - (numberMediumBoxes*10))/5; 
    } 
    if (numberOfBags - (numberLargeBoxes*20) - (numberMediumBoxes*10) - 
      (numberSmallBoxes*5) < 5 && numberOfBags - (numberLargeBoxes*20) - (numberMediumBoxes*10) - 
      (numberSmallBoxes*5) > 0 || numberLargeBoxes == 0 || numberMediumBoxes == 0) { 
     numberSmallBoxes++; 
    } 

    totalCostLargeBoxes = numberLargeBoxes*costOfLargeBox; 
    totalCostMediumBoxes = numberMediumBoxes*costOfMediumBox; 
    totalCostSmallBoxes = numberSmallBoxes*costOfSmallBox; 
    totalBoxCost = totalCostLargeBoxes + totalCostMediumBoxes + totalCostSmallBoxes; 
    totalCostWithBags = totalBoxCost + totalBagCost; 



    System.out.println("Number of bags ordered: " + numberOfBags + " - $" + df.format(totalBagCost)); 

    System.out.println("Boxes used: "); 
    System.out.println(" " + numberLargeBoxes + " Large - $" +  df.format(totalCostLargeBoxes)); 
    System.out.println(" " + numberMediumBoxes + " Medium - $" + df.format(totalCostMediumBoxes)); 
    System.out.println(" " + numberSmallBoxes + " Small - $" + df.format(totalCostSmallBoxes)); 
    System.out.println("Your total cost is: $ " + df.format(totalCostWithBags)); 

} 
} 
+0

Это, безусловно, работает, но ваш код будет намного приятнее, если вы просто использовали переменную для количества мешков, которые вы изменили внутри каждого 'if'; который избавится от всех заявлений о массивном состоянии. (Также я понял, что с тех пор, как он учится, я не должен просто дать полный код ответа, это не кажется мне полезным.) – Marconius

+0

Да, достаточно. Я всегда разрабатываю свои приложения с кивком в будущее, если что-то нужно усложнять или мне нужно добавить функциональность. Вот почему я решил использовать выражения огромного состояния. Я также рассмотрел полный ответ кода, но иногда он просто помогает получить ответ там перед вами и выяснить, как добраться от вашего решения. Я нахожу, что так лучше училюсь. –