Java 乘法和移位数组元素
我研究这个算法已经有一段时间了,但我就是搞不懂。以下是需要发生的事情: 我有一个数组1(行不移位):Java 乘法和移位数组元素,java,arrays,for-loop,indexing,Java,Arrays,For Loop,Indexing,我研究这个算法已经有一段时间了,但我就是搞不懂。以下是需要发生的事情: 我有一个数组1(行不移位):.10.15.20.30 数组2(将向左移动):.25.30.28.11 我需要的算法如下 .10 .15 .20 .30 .25 .30 .28 .11 multiply .10 * .25 multiply .15 * .30 multiply .20 * .28 multiply .30 * .11 然后: 求这些乘法的总和 将底部数组索引1向左移动,并将索引1中的元素固定到数组的背面
.10.15.20.30
数组2(将向左移动):.25.30.28.11
我需要的算法如下
.10 .15 .20 .30
.25 .30 .28 .11
multiply .10 * .25
multiply .15 * .30
multiply .20 * .28
multiply .30 * .11
然后:
- 求这些乘法的总和
- 将底部数组索引1向左移动,并将索引1中的元素固定到数组的背面,这样现在乘法就可以完成了
.10 .15 .20 .30 .30 .28 .11 .25
- 重复乘法
- 重复这些乘法的和
float[] statProp = {.25 .30 .28 .11};
float[] statProperties = {.10 .15 .20 .30}
float statPropTotal=0;
for(int z=0; z<5; z++){
for(int x =0; x < 5)
statProp[z] = stat[z+1] * (float)statProperties[z];
}
for(int z=0; z<5; z++){
float statPropTotal=0;
statPropTotal += (float)statProp[x];
}
float[]statProp={.25.30.28.11};
float[]statProperties={.10.15.20.30}
float statpreptotal=0;
对于(intz=0;z,就我所知(一些性能修复):
publicstaticvoidmain(字符串[]args){
双[]arr1={.10,15,20,30};
双[]arr2={.25,30,28,11};
双和=0;
整数计数=0;
while(计数arr1.length-1){
j=0;
}
总和+=arr1[i]*arr2[j];
}
计数++;
}
系统输出打印项数(总和);
}
这里有一些伪代码来提示您使用一种工作算法(让我们使用float[]a1
和float[]a2
):
在进入代码之前,让我们想象一下,我们不是改变a2
中值的索引,而是将数组彼此滑动:
.10 .15 .20 .30
.25 .30 .28 .11
__2__↑ ↑-1-↑ ↑__2__
因此,我们可以用两个循环计算部分1
和2
double sum = 0;
//main loop, where i represents by how much you are shifting a2
for(int i = 0 ; i < a2.length ; i++) {
//loop for part #1
for(int j = i ; j < a2.length ; j++) {
sum = sum + (a1[?] * a2[j]);
}
//loop for part #2
for(int j = 0 ; j < i ; j++) {
sum = sum + (a1[j] * a2[?]);
}
}
double sum=0;
//主循环,其中我表示的是你移动a2的量
对于(int i=0;i
在这里,我留下了一些逻辑让你去弄清楚,但一切都在那里我建议你仍然向我们展示你的尝试。我可以做到。给我第二个更新的@Maljam。预先警告一下,它很糟糕。请注意我对原始方法的性能相关修复。System.arraycopy很昂贵,幸运的是我们可以使用复杂的索引I开始解决这个问题
double sum = 0;
//main loop, where i represents by how much you are shifting a2
for(int i = 0 ; i < a2.length ; i++) {
//loop for part #1
for(int j = i ; j < a2.length ; j++) {
sum = sum + (a1[?] * a2[j]);
}
//loop for part #2
for(int j = 0 ; j < i ; j++) {
sum = sum + (a1[j] * a2[?]);
}
}