我正在尝试用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!");
答案 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,...)。从您的存储中加载产品并将其放入Collection
(List
,Set
,以满足您的需求为准。最后阅读它们。您的代码将更容易理解,因为您将只需要迭代一个数组,而不是所有这些数组(其中一个我怀疑未初始化的大小大于0)。