Java 故障循环?还是阵列?
我目前正在尝试运行,并且在测试中遇到了问题 目前,我使用1到400之间的数字,而不是文本文档。但是,当我运行程序时,结果不是400*399…*396,这个数字低得离谱。我相信我遇到了Java 故障循环?还是阵列?,java,arrays,loops,long-integer,Java,Arrays,Loops,Long Integer,我目前正在尝试运行,并且在测试中遇到了问题 目前,我使用1到400之间的数字,而不是文本文档。但是,当我运行程序时,结果不是400*399…*396,这个数字低得离谱。我相信我遇到了int上的上限问题。但是,当我切换到您当前看到的long时,它仍然报告负数。显然,结果是出界的 非常感谢您的帮助,谢谢 public class Euler11 { public static void main(String[] args) { int[][] nums = new
int
上的上限问题。但是,当我切换到您当前看到的long
时,它仍然报告负数。显然,结果是出界的
非常感谢您的帮助,谢谢
public class Euler11
{
public static void main(String[] args)
{
int[][] nums = new int[20][20];
int v = 0;
int h = 0;
long high = 0;
for(int i = 1; i <= 400; i++ )
{
nums[h][v] = i;// replace i with reader
if(h == 19)
{
h = 0;
v++ ;
}
else
{
h++ ;
}
}
for(int y = 0; y <= 15; y++ )
{
for(int x = 0; x <= 19; x++ )
{
high = higher(high, nums[y][x], nums[y + 1][x], nums[y + 2][x],
nums[y + 3][x], nums[y + 4][x]);
}
}
System.out.print(high);
}
public static long higher(long high, int n1, int n2, int n3, int n4, int n5)
{
System.out.println(n1 + " " + n2 + " " + n3 + " " + n4 + " " + n5
+ " = " + (n1 * n2 * n3 * n4 * n5));
if(n1 * n2 * n3 * n4 * n5 > high)
{
//System.out.println(n1 + " " + n2 + " " + n3 + " " + n4 + " " + n5
//+ " = " + (n1 * n2 * n3 * n4 * n5));
return (n1 * n2 * n3 * n4 * n5);
}
else
{
return high;
}
}
}
公共类Euler11
{
公共静态void main(字符串[]args)
{
int[][]nums=新int[20][20];
int v=0;
int h=0;
长高=0;
对于(int i=1;i使用longs,而不是int。400*399*…*396太大,无法容纳32位int,因此存在整数溢出。即使您的方法返回类型是long n1*n2*n3*n4*n5是整数。您很可能在转换过程中转换为long太晚,溢出已经发生
要么一直使用long,要么确保在可能出现溢出之前已转换为long。您能裁剪代码中导致问题的部分吗?