已经加载了大量的数千个整数,我想找到我在下面创建的4个连续整数的最大乘积。现在我想找到7,3,1,6的产品并存储产品是126,我希望能够在下一行之前打印出每个产品。有什么帮助吗?
我不确定在每个子列表之后使用什么来查找产品,因为它遍历for循环,我如何找到子列表的产品?我确实尝试了一些东西,但它只给了我一遍又一遍
for (int z = 0; z < 1000; z++) {
System.out.println(list.subList(z, z + 4));
int prod = 1;
for (int i = 0; i < list.subList(z, z + 4).size(); i++) { // i indexes each
// element
// successively.
prod = prod * list.get(i);
}
System.out.println(prod);
[7, 3, 1, 6]
126
[3, 1, 6, 7]
126
[1, 6, 7, 1]
126
{6, 7, 1, 7]
126
[7, 1, 7, 6]
答案 0 :(得分:2)
如果我理解你想要的东西,你可以用Java 8:
来做到这一点for (int z = 0; z < list.size() - 4; z++)
System.out.println(list.subList(z, z + 4).stream().reduce((i,j) -> i*j));
编辑:
由于您无法使用Java 8,因此不能使用lambdas:
List<Integer> list = Arrays.asList(1,2,3,6,9,4,2,9,7,2,8);
for (int z = 0; z < list.size() - 4; z++) {
List<Integer> sublist = list.subList(z, z + 4);
int prod = 1;
for (int i : sublist)
prod *= i;
System.out.println(prod);
}
答案 1 :(得分:0)
正如其他人已经说过的那样,这是非常基本的东西,功能性编程更有趣,循环肯定。
无论如何(假设子列表必须有四个元素):
import java.util.*;
class SO_25107869
{
public static void main(String[] args)
{
try {
final List<Integer> list = Arrays.asList( 1, 2, 3, 4, 10,10,10,10, 3, 2, 1 );
List<Integer> max_window = new ArrayList<Integer> ();
if (list.size() < 4) {
System.err.println("list too small");
System.exit(1);
}
long max_sum =Long.MIN_VALUE;
for (int z=0; z<list.size(); z++) {
if (z <= (list.size()-4)) {
final List<Integer> window = list.subList(z,z+4);
long sum = 0L;
for ( int x : window ) { sum += x; }
if (sum > max_sum) {
max_sum = sum;
max_window = window;
}
}
}
System.out.println(max_window+" sum:"+max_sum);
System.exit(0);
}
catch (Exception e)
{
e.printStackTrace();
System.exit(1);
}
}
}