我只在Java的第8周,所以我很新。
我有一个具有ArrayList对象的类列表。我有另一个名为TransactionCalc的类。我希望TransactionCalc有自己的ArrayList对象,名为arr3。我需要和列表一样大。我知道如何声明一个大小不是10的ArrayList,但如果你还不知道确切的大小,你怎么做?有可能吗?
public class TransactionCalc extends CalculateAbstract{
private int count = 0;
private ArrayList <ItemAttribute> arr3 = new ArrayList <ItemAttribute> (1);
//the 1 needs to be list.size() ??
我假设在另一个类中我需要做public static final int = list.size(),但是可以将这个常量传递给TransactionCalc类,以便它可以在声明中吗? / p>
我忘了添加这个...因为不需要arrayList的功能,我也可以做list.toArray(arr3)
但是仍然不允许它成为TransactionCalc类的对象。有可能吗?我想避免一遍又一遍地向同一个类中的多个方法发送相同的arr3。
另外,我如何将其作为构造函数?
在amaleemur的帮助下编辑____________
我已将代码更新为:
public class FindItemInfo implements InterfacePrint{
ArrayList <ItemAttribute> list = new ArrayList<ItemAttribute>();
//load arraylist and do something with it
//sort arraylist
public void printPriority(){
TransactionCalc finish = new TransactionCalc();
for (int i = 0; i < list.size(); i++){
for (int x = 0; x < list.size(); x++){
if(arr2.get(i) == list.get(x).getPriority()){
finish.cashOut(list.get(x), bankAccount, list.size());
} //send sorted arr2 to TransactionCalc class
}
}
public static int getListSize(){
return list.size();
}
}
public class TransactionCalc {//extends CalculateAbstract{
private int count = 0;
//private ArrayList <ItemAttribute> arr3 = new ArrayList <ItemAttribute> (FindItemInfo.getListSize());
private ItemAttribute[] arr3 = new ItemAttribute[FindItemInfo.getListSize()];
public void cashOut (ItemAttribute item, double bankAccount, int size) {
//ItemAttribute[] arr3 = new ItemAttribute[size];
double runningTotal = 0;
if((runningTotal + (item.getQuantity()*item.getPrice()))<= bankAccount){
runningTotal += item.getQuantity()*item.getPrice();
bankAccount -= runningTotal;
System.out.format("You will spend $%.2f on " + item.getQuantity() + " of "+ item.getDescription(), runningTotal);
System.out.format(" and have $%.2f left to spend\n", bankAccount);
}
else{
arr3[count] = item;
count++;
}
}
我将arr3作为TransactionCalc类的一个对象,因为它用于一些方法。数组/ arraylist的目的是收集未打印的项目。我可以使用数组或arraylist。我最初使用的是阵列,但后来却不知道它的大小。
我现在收到静态和非静态错误。当我尝试解决这个问题时,它会导致更多问题。
答案 0 :(得分:1)
使用ArrayList的好处是你不必声明一个大小。
所以这就足够了,您可以将项添加到数组列表中。
private ArrayList <ItemAttribute> arr3 = new ArrayList <ItemAttribute>();
为了获得列表的大小,我建议这样做:
在包含ArrayList列表的类中,创建一个方法
public int getListSize(){
return list.size();
}
现在您可以安全地访问列表的大小。这有帮助吗?
所以现在你要做到这一点:
private ArrayList <ItemAttribute> arr3 =
new ArrayList <ItemAttribute>(otherClass.getListSize());
其中otherClass是具有ArrayList列表的其他类名称的占位符。
答案 1 :(得分:0)
ArrayList是一种可变的集合类型。这意味着(在这种情况下)ArrayList的实例可以托管任意数量的元素,特别是,ArrayList的给定实例的包含元素可能在运行时更改。所以你不必声明元素的数量。在典型情况下,您很可能希望使用默认的c(=未指定元素的初始数量)。如果元素可能是一个好主意(性能方面),则指定初始量,如果您知道在运行时将插入大量对象。在这种情况下,初始化ArrayList的实例可以保护一些内存分配和memcopy操作。