我编写了一种方法(程序的一部分),它接受两个 int 值(下面的代码)。
一个 int 值代表完成 java 培训的人员数量,另一个 int 值代表完成 java 培训的人员数量php 训练已完成。
我希望数组列表随着每次函数调用而增长。
示例:第一次使用值 (5,0) 调用该函数。因此,java 的 arrayList 为 [5] ,而 php 的 arrayList 为 [0] 。
下次我用值 (2,3) 调用该函数。 java 的 arrayList 现在应该是 [5][2],sum 应该是 7。php 的 arraylist 应该是 [0][3],sum 应该是 3。
我的代码的问题是,当我第二次调用该方法,它删除了 java arrayList 中的 [5](第一次调用的第一个索引的值),仅采用 [2] 的形式并给出总和 2(而不是所需的 7) )。 arrayList 永远不会增长。 (对于 php arrayList 也是如此)
我确信我在这里做了一些概念上错误的事情。请帮忙不知何故,按照我编码的方式,每个函数调用似乎都会创建一个新的 arrayList,而不是增加从前一个调用中获得的 arrayList。
public class TrainingCamp {
public static int trainedJavaGuys ;
public static int trainedPHPGuys ;
public void trainedTroopsInCamp(int java,int php){
//System.out.println("********* Current Status of Training Camp ********* ");
ArrayList<Integer> trainingListJava = new ArrayList<>();
trainingListJava.add(java);
//System.out.println("---JavaARRAYLIST----"+trainingListJava);
trainedJavaGuys = sumList(trainingListJava);
ArrayList<Integer> trainingListPHP = new ArrayList<>();
trainingListPHP.add(php);
trainedPHPGuys = sumList(trainingListPHP);
//System.out.println("---phpARRAYLIST----"+trainingListPHP);
从另一个类中这样调用它:
TrainingCamp currentTrainingCamp = new TrainingCamp();
currentTrainingCamp.trainedTroopsInCamp(2, 0);
下一次,仅更改输入参数即可执行相同的两行
最佳答案
每次调用 trainedTroopsInCamp()
时,arraylist
都会重新初始化,因为它们是在内部声明的。
您应该创建arraylist
的成员变量,以便它们仅在类的构造函数中初始化一次。
public class TrainingCamp {
public static int trainedJavaGuys ;
public static int trainedPHPGuys ;
// Declare once
ArrayList<Integer> trainingListJava;
ArrayList<Integer> trainingListPHP;
public TrainingCamp() {
// Initialize once
trainingListJava = new ArrayList<>();
trainingListPHP = new ArrayList<>();
}
public void trainedTroopsInCamp(int java,int php){
// Use everywhere
trainingListJava.add(java);
trainedJavaGuys = sumList(trainingListJava);
trainingListPHP.add(php);
trainedPHPGuys = sumList(trainingListPHP);
}
}
关于java - 每次调用方法时 ArrayList 都会重新初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34385800/