Comment créer un calculateur de Frais de port en Java


Je crée une calculatrice pour calculer les frais d'expédition. Le code va quelque chose comme ceci:

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.");
        }
    }
}

Tout cela est génial mais je veux créer une calculatrice qui peut calculer en fonction de valeurs déjà définies. Par exemple, quelque chose qui dit:

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 

Cela sera basé sur l'entrée de l'utilisateur, c'est pourquoi je ne veux pas déjà avoir de contraintes comme ci-dessus. Est-il possible de faire une telle calculatrice en Java que peu importe le poids, il calcule les frais d'expédition de manière appropriée et donne la réponse.

Si oui, alors comment puis-je procéder?

Author: Swift, 2012-01-26

2 answers

Tout d'Abord, vous avez besoin d'une formule ou d'un tableau pour calculer les frais d'expédition. Par exemple, "l'expédition est d'un dollar par dix livres entières de poids".

Ensuite, vous mettez le poids dans cette formule.

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

Si vous voulez la formule plus complexe, vous pouvez faire quelque chose comme ceci:

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

, Où les utilisateurs peuvent définir la valeur de la threshold1 et threshold2 les variables.

Il peut y avoir un nombre illimité de ces niveaux:

// "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]
}

Bienvenue au monde merveilleux de la programmation informatique!

 4
Author: Borealid, 2012-01-26 02:40:16

Si le poids aux coûts suit une formule, vous devez l'utiliser pour calculer le coût (un peu d'algèbre ne fait jamais de mal à personne).

Si l'affectation du poids au coût est arbitraire, vous pouvez créer un NavigableMap en utilisant weight comme clé et cost comme valeur.

Vous pouvez ensuite utiliser la NavigableMap<K, V>.lowerEntry(K) pour trouver le poids le plus élevé qui est inférieur au poids.

Exemple

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

L'avantage de l'utilisation d'une carte est si vous utilisez un TreeMap comme l' implémentation pour votre NavigableMap alors vos recherches seront en moyenne O(log n).

 1
Author: Dev, 2012-01-26 02:47:34