所以我决定使用ArrayList,但现在我想把它改成Array。我试图看看这是否只适用于Array而不是ArrayList。任何人都可以采取某种方式来做到这一切既简单又好用?我想改变它,但我在互联网上搜索了一些方法,但我发现它的信息对我的情况不起作用。
public class ProductManager {
private List<Product> listOfProduct;
public ProductManager() {
this.listOfProduct= new ArrayList<>();
}
public int addProduct(Product p) {
this.listOfProduct.add(p);
return count();
}
public int count() {
return this.listOfProduct.size();
}
public Product getProduct(int index) {
if (index < 0 || index >=count()) {
return null;
}
return this.listOfProduct.get(index);
}
public boolean removeProduct(int id) {
int index = -1;
for (int i = 0, n = count(); i < n;i++) {
if(this.listOfProduct.get(i).getId() == id) {
index = i;
break;
}
}
if(index != -1) {
this.listOfProduct.remove(index);
return true;
}
return false;
}
一些建议值得赞赏:)谢谢!
答案 0 :(得分:1)
好吧,看起来你已经开始使用基本的Java了。
在审核完您的代码后,我想与您分享一些要改进的地方。
首先,看一下您的问题,Product
的数量是动态的,您并不确切知道要添加到商店中的Product
的数量,即{ {1}}。这意味着您应该使用动态数据结构,并且您的代码使用ProductManager
,这是正确的。只有在知道要分配的元素数量时才使用数组;否则,请转到List
。
要删除代码中List
Collection
的元素,最好使用List
,您可以在循环时删除元素。在这里。
Iterator
对于public Product removeProduct(int id) {
Iterator<Product> iterator = productList.iterator();
Product found = null;
while(iterator.hasNext()) {
Product product = iterator.next();
if(product.getId() == id) {
found = product;
iterator.remove(); // remove on the fly
}
}
// return pointer to removed product
// Note: it can be NULL
return found;
}
方法签名(返回值),您可以修改为根据需要返回removeProduct
值。
您可以直接使用boolean
方法,而不是将价格值作为字符串读取,然后手动解析为Float
。详细了解Scanner here。
要计算整个库存价格值,只需循环并汇总所有价格。
scanner.nextFloat()
我猜你的问题已经完成了。
如果您坚持从public float getInventoryValue() {
int total = productList.size();
float sum = 0.0f;
for(int i = 0; i < total; ++i) {
// simple, easy loop
sum += productList.get(i).getPrice();
}
return sum;
}
转换为数组,则可以:
List
初始化一个已知大小的新静态数组,然后分配元素。List.size()
最后但并非至少,你应该很好地编写问题和格式代码;否则,其他人会投票并关闭你的问题:)
你做得很好,多一点!
答案 1 :(得分:0)
我查看了一些java文档,这是一个众所周知的事情。 https://www.tutorialspoint.com/java/util/arraylist_toarray.htm
但是一个简单的for循环也可以做到。
Product[] convertArrayListToArray(ArrayList<Product> arrList){
Product[] arr = new Product[arrList.size()];
for(int i = 0; i < arrList.size(); i++){
arr[i] = arrList.get(i);
}
return arr;
}