Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 故障循环?还是阵列?_Java_Arrays_Loops_Long Integer - Fatal编程技术网

Java 故障循环?还是阵列?

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

我目前正在尝试运行,并且在测试中遇到了问题

目前,我使用1到400之间的数字,而不是文本文档。但是,当我运行程序时,结果不是400*399…*396,这个数字低得离谱。我相信我遇到了
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。

您能裁剪代码中导致问题的部分吗?