Как создать калькулятор стоимости доставки на Java - PullRequest
2 голосов
/ 26 января 2012

Я создаю калькулятор для расчета стоимости доставки.Код выглядит примерно так:

class ShippingCalc {
    public static void main(String[] args) {
        int weight = 30;

        if (weight < 10) {
            System.out.println("Shipping costs $1.");
        }
        else if (weight < 20) {
            System.out.println("Shipping costs $2.");
        }
        else {
            System.out.println("Shipping costs $3.");
        }
    }
}

Это все здорово, но я хочу создать калькулятор, который будет рассчитывать на основе уже установленных значений.Например, что-то, что говорит:

if (weight < 250) {
   // print("Shipping cost is $1);
} else if (weight < 499) {
   // print("Shipping cost is $2);
} else if (weight < 749) {
   // print...etc and it keeps going 

Это будет основано на пользовательском вводе, поэтому я не хочу, чтобы уже были какие-либо ограничения, как указано выше.Можно ли сделать такой калькулятор на Java, который, независимо от его веса, рассчитывает стоимость доставки и выдает ответ.

Если да, то как мне это сделать?

Ответы [ 2 ]

4 голосов
/ 26 января 2012

Для начала вам понадобится формула или таблица для расчета стоимости доставки. Например, «доставка составляет один доллар на целые десять фунтов веса».

Затем вы помещаете вес в эту формулу.

System.out.println("Shipping cost is $" + (int)(weight/10));

Если вы хотите, чтобы формула была более сложной, вы можете сделать что-то вроде этого:

if (weight < threshold1) // price is first level
// or, if you like, you can even do a calculation here
else if (weight < threshold2) // price is second level

Где пользователи могут определить значение переменных threshold1 и threshold2 .

Может быть неограниченное количество этих уровней:

// "thresholds" is a sorted array of the weights at which prices change
int[] thresholds = new int[num_thresholds];
for (int checking = 0; checking < thresholds.length; checking++) {
    if (weight < thresholds[checking]) // price is prices[checking]
}

Добро пожаловать в удивительный мир компьютерного программирования!

1 голос
/ 26 января 2012

Если вес к затратам следует формуле, вы должны использовать ее для расчета стоимости (небольшая алгебра никогда никому не навредит).

Если присвоение веса стоимости произвольно, вы можете создать NavigableMap , используя вес в качестве ключа и стоимость в качестве значения.

Затем вы можете использовать NavigableMap<K, V>.lowerEntry(K), чтобы найти максимальный вес, который меньше заданного веса.

Пример

public static Integer findCost(Integer weight, 
        NavigableMap<Integer, Integer> costMap){
    Map.Entry<Integer, Integer> cost;
    cost = costMap.lowerEntry(weight);
    if(cost == null){
        cost = costMap.firstEntry();
    }
    return cost.getValue();
}

Преимущество использования карты в том, что если вы используете TreeMap в качестве реализации для NavigableMap, тогда ваши поиски в среднем будут O (log n).

...