试图更新java中的数组元素

问题描述 投票:1回答:4

我正在尝试用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!");
java arrays methods class
4个回答
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);

0
投票

无法真正说出什么错误......实际上,我甚至无法看到您尝试更新阵列的位置。

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


0
投票

您可以尝试更改以下内容:

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.