2012-01-26 41 views
2

配送コストを計算するための電卓を作成しています。コードはこのような何か行く:配送コスト計算ツールをJavaで作成する方法

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でそのような電卓を作ることは可能ですか?

「はい」の場合はどうすればよいですか?

+3

はい、簡単な数式とコードを書くことで可能です。なぜあなたはそれを試してみて、あなたが何を思いつくのか見てみませんか? **常にあなたの課題を投稿する前に、物事を解決し、あなたの努力を示すことを試みる方がよいでしょう。ここでもまた、最も基本的な代数ではありません。紙に鉛筆を付けるかどうかわかります。 –

+0

その私の割り当て。私は趣味としてJavaを学ぼうとしているので、タグの趣味です。試してみると、私はそれを試しましたが、私が考えることができるのは、無限のコードをとる制限された方法です。私は人々が私のためにそれをする必要はありません、ちょうど私に正しい方向に振る舞いを与えてください。 – javacAA

+0

編集は、おそらく150ドル増えない限り、数字に論理がないので簡単ではないかもしれません。あなたはその '... etc'ビットのためにもっと多くの数字を表示しなければなりません。パターンを完全に表示してください。そして、私の推薦は宿題や家事(他のホッビストから来ている)に有効であるので、これは宿題であるという前提はありませんでした。 –

答えて

4

まず、送料を計算するための数式または表が必要です。たとえば、「出荷は10ポンドの重量あたり1ドルです」。

次に、その数式に重みを入れます。

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 

ユーザーがthreshold1threshold2変数の値を定義することができます:あなたは式はより複雑になりたい場合は

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

は、あなたがこのような何かを行うことができます。

これらのレベルの無制限の数に制限はありません。

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

は、コンピュータプログラミングの素晴らしい世界へようこそ!

+0

+1申し訳ありませんが、まだupvoteできません。歓迎と答えをありがとう。 – javacAA

+0

@Borealid、 無制限のレベル数との関係で。私はあなたの方法をよく理解していません。あなたはこれを説明してください。 [num_thresholds]を設定する必要がある場合、どのようにして無制限にすることができますか?体重に制限がない場合はどうなりますか? – xiphias

1

コストを計算するには、コストを計算するために使用する必要があります(多少の代数は誰にも害を与えません)。

コスト割り当ての重みが任意の場合は、重みとしてキーを使用し、値としてコストを使用して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(); 
} 

マップを使用してのbenifitは、あなたがあなたのNavigableMapのための実装としてTreeMapを使用する場合は、あなたのルックアップは平均でO(n個のログ)になりますです。

+1

+1申し訳ありませんが、明らかにupvoteできません。 – javacAA

関連する問題