java - 这个java后增量运算符在做什么?

标签 java

因此,有一段基数排序实现的 Java 代码,如下所示:

aux[count[a[i]]++] = a[i];

为什么要使用后增量运算符?为什么不aux[count[a[i]]+1]?后增量是否只是将 count[a[i]] 中的值增加 1 并将其存储在那里?

基数排序.java

int N = a.length;
int[] count = new int[R+1];
for (int i = 0; i < N; i++)
  count[a[i]+1]++;
for (int r = 0; r < R; r++)
  count[r+1] += count[r];

for (int i = 0; i < N; i++)
  aux[count[a[i]]++] = a[i];
for (int i = 0; i < N; i++)
  a[i] = aux[i];

最佳答案

Is the post increment simply to increment the value in count[a[i]] by 1 and store it there?

是的,完全正确。该语句有两个副作用:其一是对 aux 的元素进行修改。 ,另一个是对 count 中元素的修改.

就我个人而言,我会避免这样写 - 我可能会写:

// We don't use i other than to index into a, so use an
// enhanced for loop instead
for (int value : a)
{
    aux[count[value]] = value;
    count[value]++;
}

注意,即使更改为count不需要,aux[count[a[i]]+1]不会做同样的事情 - 因为 aux[count[a[i]]++]引用 aux 中的元素索引 count[a[i]]增量之前,因为 ++此处用作后增量。

关于java - 这个java后增量运算符在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37097240/

相关文章:

java - 如何获取 server.log 文件中的日志条目以在 jsf 页面上打印出来

java - 在 Spring 中将字符串数组注入(inject) bean

java - 如何将 Javascript 中的数组打乱为与 Java 中的 Collections.shuffle(array, seeds) 相同的顺序

java - 如何将firebase crashlytics添加到android项目中

java - 关于正则表达式中字符的恰好 n 次出现

java - 集群重启后 Namenode 卡在 SAFEMODE

java - IBM Worklight 版本 6.1.0,在 Win 7 上带有嵌入式 WL 开发服务器,一致的 Android 构建错误

java - 即使步骤仍在运行,如何计算 ItemReader 中的 stepReads 以使中间结果可用?

java - 多线程总是比单线程产生更好的性能吗?

java - 找不到包裹