想要在Java中找到子列表的产品

时间:2014-08-03 18:41:32

标签: java

已经加载了大量的数千个整数,我想找到我在下面创建的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]

2 个答案:

答案 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);
      }
   }
}