2017-07-18 14 views
-1

私は靴用のインベントリプログラムを実装しようとしています。私がしようとしているのは、各靴にid(productId)と靴の在庫量(ammountToPick)を与えることです。私は、プログラムを実行しているユーザーに靴IDを入力して、在庫に残っている靴の種類(ammountToPick)を取得するようにしたいと考えています。私のプログラムの私の現在の問題は何も返されておらず、単に「無効な製品ID」を印刷し続けているということです。私は以下の私のコードを提供してきたJavaでShoe Inventoryプログラムを実装する際に問題が発生する

:最初の行で

public class Product { 
    private String productId = ""; 
    private int ammountToPick = 0; 
    private int ammountToRestock = 0; 

    public Product (String productId, int ammountToPick){ 

    this.productId = productId; 
    this.ammountToPick = ammountToPick; 

    } 

    public String getProductId() { 
    return productId; 
    } 

    public int getAmmountToPick() { 
    return ammountToPick; 
    } 

} 

public class Shoes extends Product{ 
    public Shoes(String productId, int ammountToPick){ 
    super(productId, ammountToPick); 

    } 


} 

import java.util.Scanner; 
public class Inventory 
{ 
    private static String productId = ""; 
    private int ammountToPick = 0; 
    private int ammountToRestock = 0; 
    public static final int MAX_ITEMS = 999999; 
    private static Product product [] = new Shoes[MAX_ITEMS]; 

    public static void main (String args[]){ 

    buildInventory(); 
    getInventory(); 
} 

public static void buildInventory(){ 

product[1] = new Shoes("shoe101", 19); 
product[2] = new Shoes("shoe200", 1); 
product[3] = new Shoes("shoe420", 9); 
} 

public static void getInventory() { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter the product id of the product you would like to pick: "); 
    String userinput = input.nextLine(); 
    if(userinput.equals(productId)) { 
    System.out.println("there are" + product[1].getAmmountToPick() +"left"); 
    } 
    else { 

    System.out.println("invalid product id "); 
    } 
} 
} 
+1

productIdを空の文字列以外のものに初期化することはありません。したがって、常に空の文字列です。 – Malphrush

+0

私は自分の答えを更新しました – ControlAltDel

答えて

1
if(userinput.equals(productId)) { 
    System.out.println("there are" + product[1].getAmmountToPick() +"left"); 
    } 
else { 

、あなたの問題は、商品コードは、クラスの先頭に空の文字列に設定されていることです。実際のproductIdを入力せずにEnterキーを押すだけで、実際に動作するはずです。ユーザー入力は ""です。ユーザ入力は、あなたの配列に

の項目のいずれかの商品コードに一致した場合でも、この作品にあなたが望む方法を作るためにあなたのProductID変数を取り除くとチェックあなたはProductどちら

userinput = ...; //this part is fine 
for (Product p : products) { 
    if (userinput.equals(p.getProductId())) { 
    System.out.println('there are ' + p.getAmmountToPick() + " left"); 
    } 
} 
+0

すごくありがとう! – chris2656

0

を行う必要があるとInventoryクラスにはメンバ変数productIdがあります。 userInputをクラスのprivate staticproductIdと比較しています。これは空の文字列です。

ProductproductIdに一致するものを探して在庫配列を繰り返す必要があると思います。ここで

が強化ループなし新しい方法でそれを行うための一つの方法です:

boolean found = false; 
for (final Product aProduct: product) { 
    if(userInput.equals(aProduct.getProductId())) { 
     System.out.println("there are" + aProduct.getAmmountToPick() +"left"); 
     found = true; 
     break; 
    } 
} 
if(!found) { 
    System.out.println("invalid product id "); 
} 

私はその意図が明確であるproductsproductメンバ変数の名前を変更したいです。それはコードをより明確にするでしょう。

Inventory、それを使用している方法では、productIdは必要ありません。削除する必要があります。

+0

インベントリ配列を反復処理するにはどうすればよいですか? – chris2656

+0

これは何か? public static void getInventory(){ スキャナ入力=新しいScanner(System.in); for(int i = 0; i chris2656

+0

解決策は、否定的な結果を考慮しません。 – user6629913

関連する問題