我正在尝试用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!");
在我看来,你使用并行数组来存储一种类型的对象。我可以推荐一个大的改变吗? (不管你说什么,我都会)
我会创建一个名为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);
无法真正说出什么错误......实际上,我甚至无法看到您尝试更新阵列的位置。
但是,您可能希望使用equalsIgnoreCase
而不是compareToIgnoreCase
。
您可以尝试更改以下内容:
for(int a=0; a<aProd_name.length; a++){
但是你在这里的代码是不完整的,很难知道你真正想做什么。
什么是iSl
?什么时候定义?如何初始化各种数组?这是我建议你的。
创建一个Product
类。对于这个类,在这里定义与数组一样多的字段(id,name,desc,...)。从您的存储中加载产品并将它们放入Collection
(List
,Set
,以满足您的需求为准)。最后阅读它们。您的代码将更容易理解,因为您只需迭代一个数组,而不是所有这些数组(其中一个我怀疑没有初始化大小大于0)。