在一定时间间隔内,将数组元素增加一定数量。JAVA

在一定时间间隔内,将数组元素增加一定数量。JAVA,java,arrays,Java,Arrays,我有一个大小为N的数组A。我有整数S,E和I。我需要将索引S到E的所有数组元素按I递增 保证S和E的值在逻辑上是正确的 我的尝试: for(int i=S; i<=E; i++) { A[i]=A[i]+I; } for(inti=S;iNo。你的方法是正确的。你可以做A[i]+=i,但是你不能通过“数量级”来加速它。如果S或E大于N,你不能确保没有错误 我会: for (int i=S; i<=E && i<N; i++) { A[i] += I;

我有一个大小为N的数组A。我有整数S,E和I。我需要将索引S到E的所有数组元素按I递增

保证S和E的值在逻辑上是正确的

我的尝试:

for(int i=S; i<=E; i++)
{
A[i]=A[i]+I;
}

for(inti=S;iNo。你的方法是正确的。你可以做
A[i]+=i
,但是你不能通过“数量级”来加速它。

如果S或E大于N,你不能确保没有错误

我会:

for (int i=S; i<=E && i<N; i++) {
    A[i] += I;
}

for(int i=S;iI假设您正在检查
E
是否小于
A.length-1
没有,为什么您认为这种方法很慢?“有没有更快的方法来做同样的事情?”不,这差不多是最快的。(正如John3136所说,使用
A[i]+=I
可能会产生微小的差异,但您需要对其进行基准测试才能发现。)@alfasin也许JAVA中有一个内置函数,它是
a[I]+=I
a[I]=a[I]更快+我
?@ScaryWombat我不这么认为,我的猜测是,至少在很多情况下,底层字节码是相同的。@ScaryWombat可能不是。但我已经足够大了,可以记住68K汇编,其中用C编译成特定的
INC
操作码,比非
INC
版本快几个周期,所以称之为习惯;-)@TimBiegeleisen:字节码不相同(我检查过)-但JIT编译的代码是否正确则是另一回事。java编译器是否优化使用simd指令?根据OP的评论-我们是否应该假设这些检查正在进行?如果这样做,为什么不同时检查s是否大于零,或者a是否不为空。这通常不是正确的做法。如果方法s定义良好的先决条件,调用方必须尊重这些先决条件。如果调用方因不遵守这些先决条件而出现异常,则应修复调用方代码,而不是默默地接受无效的参数。在我开始回答这些注释时,这些注释还不存在:)@JBNizet我没有添加该检查作为避免开发人员bug的一种方法,它不是一种偏执的空检查。我补充说,因为不清楚N是否可以合法地低于E。它可能是运行时数据,不受用户控制,OP并没有告诉这个案例是否已经得到处理。从OP描述中,A肯定不能为null。根据OP描述,S也可以为0。