Java - 在发送到方法之前递增变量

标签 java arrays increment

情况

嗯,这个方法正在管理一个接受列表作为参数的转换,但看起来绝对不可扩展。

List<Long> array_list_data= new ArrayList<>();

public void get_Data() {
    long0 = array_list_data.get(0);
    long1= array_list_data.get(1);
    long2= array_list_data.get(2);
}

之后,它将使用 long 字段创建一个不同的类。

问题

但是,如果我们必须将此数据扩展到此列表中的 100 个参数怎么办?

到目前为止我所做的是:

List<Long> array_list_data= new ArrayList<>();

public void get_Data() {
    int k = 0;        
    long0= array_list_data.get(k);
    long1= array_list_data.get(k++);
    long2= array_list_data.get(k++);
}

为什么增加 k 不是正确的方法?

最佳答案

k++ 执行后增量。换句话说,表达式的值是k原始值,然后k递增。在调用该方法之前它仍然会递增,但作为参数传递的值是递增发生之前的值。换句话说,调用:

x = list.get(k++);

相当于:

int tmp = k;
k = k + 1;
x = list.get(tmp);

所以如果你确实有:

memory_version = array_list_data.get(k++);    // Calls with 0, then k=1
mains_voltage_min = array_list_data.get(k++); // Calls with 1, then k=2
mains_voltage_max = array_list_data.get(k++); // Calls with 2, then k=3

那就可以了,相当于你的第一个代码。您当前的问题是您实际上已经:

memory_version = array_list_data.get(k);      // Calls with 0, then k=0
mains_voltage_min = array_list_data.get(k++); // Calls with 0, then k=1
mains_voltage_max = array_list_data.get(k++); // Calls with 1, then k=2

但是,我建议,如果您使用集合作为字段对类中的数据进行建模,那么为每个值使用单独的字段可能会更好。 (当然,您可以通过从列表中提取数据来创建该类的实例,但这是另一回事。)

关于Java - 在发送到方法之前递增变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31746321/

相关文章:

java - 为什么 catalina.out 为空

java - 文件下载器中基本访问认证的问题

c++ - 为什么我的代码给我一个分段/核心转储错误?

vb.net - 如何编写 Visual Basic for 循环步长增量代码?

java - 线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : 7 for correctly indexed array

java - 从 Java 打开一个新的提示/终端窗口

c - 为什么这些构造使用前后递增的未定义行为?

mysql - 如何让mysql从上一行值开始自动递增

java - 访问私有(private)数组中对象的私有(private)变量

javascript - 为什么RxJS运算符过滤和映射大尺寸数组比Javascript数组方法更快?