试图更新java中的数组元素

时间:2010-08-25 12:56:00

标签: java arrays methods class

我正在尝试用Java更新数组元素。某种数据库,如程序,但使用数组临时存储数据。

代码似乎仅适用于第一个数组元素0。 如果我尝试搜索其他记录,则无法找到它们。我不知道为什么。

boolean blnFound=false;
    String strP=getString("Input product to update: ");

    try{
        //loop through the array
        for(int a=0; a<iSl; a++){
            if(strP.compareToIgnoreCase(aProd_name[a])==0){

                //display information match is found
                Display("Product already registered..");
                Display("Product ID: ",aProd_id[a]);
                Display("Product Name: ", aProd_name[a]);
                Display("Product Description: ", aProd_desc[a]);
                Display("Product Size: ", aSize[a]);
                Display("Total Quantity: ", aTotalQty[a]);

                Display("Quantity on hand: ", aQtyonHand[a]);
                Display("Reorder Quantity: ", aReorder[a]);
                Display("Dealer Price: ", aDPrice[a]);
                Display("Selling Price: ", aSPrice[a]);
                Display("Manufacture date: ", aMDate[a]);
                Display("Expiry date: ", aEDate[a]);
                Display("Manufacturer: ", aManufacturer[a]);
                blnFound=true;

以下是更新的部分:

//Input new information
aProd_id[a]=getInteger("Input new  product id: ");

aProd_desc[a]=getString("Input new product description: ");
aSize[a]=getString("Input new size: ");
aTotalQty[a]=getDouble("Input new total quantity: ");
aQtyonHand[a]=getDouble("Input new quantity on hand: ");
aReorder[a]=getDouble("Input new reorder: ");
aDPrice[a]=getDouble("Input new dealer price: ");
aSPrice[a]=getDouble("Input new selling price: ");
aMDate[a]=getString("Input new manufactured date: ");
aEDate[a]=getString("Input new expiration date: ");
aManufacturer[a]=getString("Input new manufacturer: ");
Display("Product updated!");

4 个答案:

答案 0 :(得分:1)

在我看来,您正在使用并行数组来存储一种类型的对象。我可以推荐一个大的改变吗? (不管你说什么,我都会这样做)

我会创建一个名为Product的类或一些描述该对象的名称。

它看起来像这样:

public class Product {

    // members storing the data
    private int id;
    private String name;
    private String description;
    private String size;
    private int totalQuant;

    // the rest go here
}

然后,我会将它们存储在Map<Integer, Product>

Product someProduct;
Map<String, Product> dataBase = new HashMap<String, Product>();
dataBase.put(someProduct.getName(), someProduct);

这也是你'更新'数据库的方式。输入尚未包含在数据库中的内容时,您只需创建一个新对象并将其放入Map

然后您可以轻松搜索Map,如此:

boolean productIsRegistered = dataBase.containsKey(strP);

答案 1 :(得分:0)

无法确切地说出错误...实际上,我甚至无法看到您尝试更新阵列的位置。

但是,您可能希望使用equalsIgnoreCase而不是compareToIgnoreCase

答案 2 :(得分:0)

您可以尝试更改for in:

for(int a=0; a<aProd_name.length; a++){

但是你这里的代码不完整,很难知道你真正想要做什么。

答案 3 :(得分:0)

什么是iSl?什么时候定义?如何初始化各种数组?这是我建议你的。

创建一个Product课程。对于这个类,在这里定义与数组一样多的字段(id,name,desc,...)。从您的存储中加载产品并将其放入CollectionListSet,以满足您的需求为准。最后阅读它们。您的代码将更容易理解,因为您将只需要迭代一个数组,而不是所有这些数组(其中一个我怀疑未初始化的大小大于0)。