私は単純な「薬局配信」プログラムをJavaで作成しようとしていますが、この論理的なエラーで終日固執しています。私はかなり確信しています。それは非常に単純なものですが、私はそれを理解していません - 誰かがこれを解決できるなら、本当に助けに感謝します。Javaでコンテナを反復処理している間に論理エラーが発生するのを避ける
私は3つのクラス、つまりドラッグ、サプライヤ、オーダーを持っています。
薬物には薬(名前と価格)に関する情報があります。 サプライヤには、(医薬品、数量)を含む地図などの他の情報があります。 オーダーは、オーダーのあるマップと(サプライヤー)のベクターを保持しています。
基本的な考え方は、Orderクラスの2つのコンテナに.txtファイルを入力することです。 1行の構文は次のようになります。 - Ordered_drugs_name Ordered_drugs_quantity(2つを注文のマップに入れます)。残りは、Suppliersオブジェクトを初期化してベクトルに入れる類似のパラメータです。
私はこれらの2つの容器を満たした後、私は注文マップから最初の薬を取る方法を持っていますし、サプライヤーのベクトルを繰り返して、そのような量のこの薬を持っている。もちろん、サプライヤの反復を開始するときには、現在のサプライヤが薬を持っているかどうかをチェックしなければならないので、サプライヤの薬局マップから反復を開始します。
問題は、2つのサプライヤと2つの注文の簡単な例では、1つのサプライヤだけが1つのサプライヤによって販売されており、必要な数量を持っているため、両方のサプライヤが印刷されます1つはこの薬を販売していない)。
ここにいくつかのコードがありますが、長い投稿は申し訳ありません。 :(
public class Supplier {
//some private members goes here
private static Map <Drug, Integer> listOfDrugs = new HashMap <Drug, Integer>();
Supplier(String n, String rep, String repPhoneNum, String drugName, double drugPrice, int stock) {
this.supplierName = n;
this.representative = rep;
this.representativesPhoneNumber = repPhoneNum;
listOfDrugs.put(new Drug(drugName, drugPrice), stock);
}
public boolean isDrugInStock(Drug drug, int quantity) {
int stock;
for (Entry<Drug, Integer> entry : listOfDrugs.entrySet())
{
if(entry.getKey().getDrugsName().equalsIgnoreCase(drug.getDrugsName())) {
stock = (int) listOfDrugs.get(entry.getKey());
if(stock >= quantity) {
return true;
}
}
}
return false;
}
とOrdersクラス:。
public class Orders {
private Map <Drug, Integer> orderedDrugs = new HashMap <Drug, Integer>();
private Vector<Supplier> suppliers = new Vector <Supplier>();
Orders(String fileName) throws IOException {
//the reading form a .txt file goes here
}
public String order() {
for (Entry<Drug, Integer> entry : orderedDrugs.entrySet()) {
int quantity = orderedDrugs.get(entry.getKey());
for(Supplier s : suppliers) {
if(s.isDrugInStock(entry.getKey(), quantity)) {
System.out.println(s.toString());
}
}
}
return "";
}
驚くべき!私はそれを見逃してしまった...それは私の問題と私の不幸を解決した。:) – Calihog