Java 输入参数大小增加时输出中断

Java 输入参数大小增加时输出中断,java,arrays,conditional-statements,Java,Arrays,Conditional Statements,我正在写一个basic程序,它接受一个参数,然后根据这个参数计算奇数的乘积 如果我通过了从1到19的任何一项,它都是有效的,但在20时,我的输出是负数,在35时,它是0 我肯定算法有问题 建议: import java.util.ArrayList; import java.util.List; public class ProductOfIntegers { public static void productOfOddIntegers(int i){ int[] numbers

我正在写一个basic程序,它接受一个参数,然后根据这个参数计算奇数的乘积

如果我通过了从1到19的任何一项,它都是有效的,但在20时,我的输出是负数,在35时,它是0

我肯定算法有问题

建议:

import java.util.ArrayList;
import java.util.List;


public class ProductOfIntegers {

public static void productOfOddIntegers(int i){
    int[] numbers = new int[i];
    for(int j = 0; j < numbers.length; j++){
        numbers[j] = j + 1;
    }
    List<Integer> oddNumbers = new ArrayList<Integer>();
    for(int j = 0; j < numbers.length; j++){

        if(numbers[j] % 2 != 0){
            oddNumbers.add(numbers[j]);
        }
    }       
    int product = 1;
    for(int n: oddNumbers)
        product*=n;
    System.out.println(oddNumbers); 
    System.out.println(product);

}

public static void main(String [] args){
    productOfOddIntegers(15);
}
import java.util.ArrayList;
导入java.util.List;
公共类积函数{
公共静态无效加法器(int i){
int[]数字=新的int[i];
对于(int j=0;j
}

根据该参数计算奇数的乘积

不,您的程序计算偶数的乘积

也就是说,您的算法效率很低:您可以简单地使用单个
for
循环,而不是首先生成一个整数数组,然后进行过滤,最后计算乘积:

public static long productOfOddIntegers(int n){
    long prod = 1;
    for(int i = 3; i <= n; i += 2) {
        prod *= i;
    }
    return prod;
}


此外,在方法中执行
println
命令是一种糟糕的设计。你应该把计算和打印分开。

这不是你问题的答案,但是
如果(数字[j]%2==0)
得到的是偶数。int的最大值是多少?1*3*…*的值是多少21?@Evan Frisch-谢谢你指出这一点。我总是把这些搞混!已在编辑中修复。请使用长整数或大整数。顺便说一句,不需要存储所有的数字,只需迭代奇数,然后在需要时进行乘法need@JB如果我超过了最大值,为什么输出会变成负数?
public static BigInteger productOfOddIntegers(int n){
    BigInteger prod = BigInteger.ONE;
    BigInteger bin = new BigInteger(""+n);
    BigInteger two = BigInteger.ONE.add(BigInteger.ONE);
    for(BigInteger i = two.add(BigInteger.ONE); i.compareTo(bin) <= 0; i = i.add(two)) {
        prod = prod.multiply(i);
    }
    return prod;
}