Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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_Algorithm - Fatal编程技术网

Java 将给定数字与给定数字之间的所有数字之和相加?

Java 将给定数字与给定数字之间的所有数字之和相加?,java,algorithm,Java,Algorithm,我创建了一个方法,将两个给定数字之间的所有数字相加,包括两个给定数字,但由于某些原因,它不起作用 public static int sumOfAll(int one, int two) { int bigNumber; int smallNumber; if(one < two){ bigNumber = two; smallNumber = one; } else{ bigNumber = one;

我创建了一个方法,将两个给定数字之间的所有数字相加,包括两个给定数字,但由于某些原因,它不起作用

public static int sumOfAll(int one, int two)
{
    int bigNumber;
    int smallNumber;
    if(one < two){
        bigNumber = two;
        smallNumber = one;
    }
    else{
        bigNumber = one;
        smallNumber = two;
    }

    return ((smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1);
}
由于某些原因,打印的结果是5000,而它应该是5050。我使用的算法是正确的,我在wolframalpha上进行了测试。我不知道为什么它在这里不起作用,任何帮助都会很棒

你能试试吗

return (int)(((double)(smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1));
理性存在

正如@devnull所指出的,当您执行
((smallNumber+bigname)/2)
时,小数部分会被删除,因为它们会被转换为
int
。因此,在执行乘法之前,需要显式转换为
(double)
,您能试试吗

return (int)(((double)(smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1));
理性存在


正如@devnull所指出的,当您执行
((smallNumber+bigname)/2)
时,小数部分会被删除,因为它们会被转换为
int
。因此,在执行乘法之前需要显式转换为
(double)
,为什么不使用求和公式呢

为此,只需将返回代码更改为

return (bigNumber*(bigNumber+1)-smallNumber*(smallNumber-1))/2;

你为什么不用求和公式呢

为此,只需将返回代码更改为

return (bigNumber*(bigNumber+1)-smallNumber*(smallNumber-1))/2;

您可以尝试将int更改为double

public static double sumOfAll(int one, int two)
    {
        double bigNumber;
        double smallNumber;
        if (one < two)
        {
            bigNumber = two;
            smallNumber = one;
        }
        else
        {
            bigNumber = one;
            smallNumber = two;
        }

        return ((smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1);
    }
publicstaticdoublesumofall(int-one,int-two)
{
双大数;
双倍小号;
如果(一<二)
{
bigNumber=2;
小数目=一;
}
其他的
{
bigNumber=1;
小数目=两个;
}
返回((smallNumber+bigNumber)/2)*(bigNumber-smallNumber+1);
}

您可以尝试将int更改为double

public static double sumOfAll(int one, int two)
    {
        double bigNumber;
        double smallNumber;
        if (one < two)
        {
            bigNumber = two;
            smallNumber = one;
        }
        else
        {
            bigNumber = one;
            smallNumber = two;
        }

        return ((smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1);
    }
publicstaticdoublesumofall(int-one,int-two)
{
双大数;
双倍小号;
如果(一<二)
{
bigNumber=2;
小数目=一;
}
其他的
{
bigNumber=1;
小数目=两个;
}
返回((smallNumber+bigNumber)/2)*(bigNumber-smallNumber+1);
}

首先,您不需要添加更多的代码行、更改方法的返回类型或更改算法

背景

在某些情况下,当您对数字进行除法时,结果是整数。例如,2/1=2或33/11=3。在其他情况下,结果不是像3/2=1.5或10/9=1.11这样的整数

在JAVA中,如果您尝试对所有整数进行算术运算,结果将产生和整数值。例如2+3/5=2+0.6。但由于3和5都是整数,JAVA会自动截断结果的小数部分。最后是2+0=2

这个问题是如何解决的?

由于您的方法计算“从a到b的数字的包含和”,因此已知结果将产生一个整数值。但是return语句包含可能产生双值的算术运算。在这种情况下,通过将“.0”添加到数字的末尾,强制结果暂时采用双值,在这种情况下为2和1:

return ((smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1);
这就变成了:

return ((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0);
由于方法必须返回和整型值,因此必须将返回值转换回整型值:

return (int) (((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0));
结果

public static int sumOfAll(int one, int two){
        int bigNumber;
        int smallNumber;
        if(one < two){
            bigNumber = two;
            smallNumber = one;
        }
        else{
            bigNumber = one;
            smallNumber = two;
        }

        return (int) (((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0));
    }
publicstaticintsumofall(intone,inttwo){
int-bigNumber;
整数小数;
如果(一<二){
bigNumber=2;
小数目=一;
}
否则{
bigNumber=1;
小数目=两个;
}
返回值(int)(((小数字+大数字)/2.0)*(大数字-小数字+1.0));
}
一些输入和输出
输入:sumOfAll(100,1)--------输出:5050
输入:sumOfAll(25,5)--------------------------输出:315
输入:sumOfAll(1000100)----输出:495550
输入:sumOfAll(80,3)--------------------------输出:3237

输入:sumOfAll(7795,7)--------输出:30384889

首先,您不需要添加更多的代码行、更改方法的返回类型或更改算法

背景

在某些情况下,当您对数字进行除法时,结果是整数。例如,2/1=2或33/11=3。在其他情况下,结果不是像3/2=1.5或10/9=1.11这样的整数

在JAVA中,如果您尝试对所有整数进行算术运算,结果将产生和整数值。例如2+3/5=2+0.6。但由于3和5都是整数,JAVA会自动截断结果的小数部分。最后是2+0=2

这个问题是如何解决的?

由于您的方法计算“从a到b的数字的包含和”,因此已知结果将产生一个整数值。但是return语句包含可能产生双值的算术运算。在这种情况下,通过将“.0”添加到数字的末尾,强制结果暂时采用双值,在这种情况下为2和1:

return ((smallNumber + bigNumber) / 2) * (bigNumber - smallNumber + 1);
这就变成了:

return ((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0);
由于方法必须返回和整型值,因此必须将返回值转换回整型值:

return (int) (((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0));
结果

public static int sumOfAll(int one, int two){
        int bigNumber;
        int smallNumber;
        if(one < two){
            bigNumber = two;
            smallNumber = one;
        }
        else{
            bigNumber = one;
            smallNumber = two;
        }

        return (int) (((smallNumber + bigNumber) / 2.0) * (bigNumber - smallNumber + 1.0));
    }
publicstaticintsumofall(intone,inttwo){
int-bigNumber;
整数小数;
如果(一<二){
bigNumber=2;
小数目=一;
}
否则{
bigNumber=1;
小数目=两个;
}
返回值(int)(((小数字+大数字)/2.0)*(大数字-小数字+1.0));
}
一些输入和输出
输入:sumOfAll(100,1)--------输出:5050
输入:sumOfAll(25,5)--------------------------输出:315
输入:sumOfAll(1000)