Java 输入参数大小增加时输出中断
我正在写一个basic程序,它接受一个参数,然后根据这个参数计算奇数的乘积 如果我通过了从1到19的任何一项,它都是有效的,但在20时,我的输出是负数,在35时,它是0 我肯定算法有问题 建议: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
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;
}