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)