Java 什么';这段代码有什么错,每次都不加除数求和?
我一直在尝试为一个实验室编写一个程序,我相信我几乎成功了,但它不会将除数(代码中的div)相加到总和,如果它是一个完美的数字,则返回true,否则返回false。我的代码编译并运行良好,但只返回false,可能是因为sum保持在1(它初始化为1,因为1是每个数字的除数)。number是从构造函数和set语句引入的私有intJava 什么';这段代码有什么错,每次都不加除数求和?,java,numbers,Java,Numbers,我一直在尝试为一个实验室编写一个程序,我相信我几乎成功了,但它不会将除数(代码中的div)相加到总和,如果它是一个完美的数字,则返回true,否则返回false。我的代码编译并运行良好,但只返回false,可能是因为sum保持在1(它初始化为1,因为1是每个数字的除数)。number是从构造函数和set语句引入的私有int public boolean isPerfect() { int x = number -1 ; int div = 0; int sum =
public boolean isPerfect()
{
int x = number -1 ;
int div = 0;
int sum = 1;
while(x> 1)
{
if(number % x == 0)
{
div = x;
sum=+ div;
}
x--;
}
if(sum == number)
{
return true;
}
else
{
return false;
}
}
这是倒退<代码>总和=+div代码>应该是
sum+=div代码>
你所拥有的基本上是sum=(+div)
,换句话说是正的div
你可以有sum=sum+div;或sum+=div
另外,数字变量的定义在哪里?我猜它类似于公共布尔值isPerfect(int number)以及+=
/=+
问题,您的代码还说1是一个,这是不正确的(6是第一个完全数)。这是因为从1开始,循环根本不会执行,sum
,然后比较sum
和number
,它们等于1。您可以只为这种特殊情况添加一张支票,例如
if(sum == number && number > 1)...
附加提示-而不是:
if(sum == number)
{
return true;
}
else
{
return false;
}
您只需使用:
return (sum == number);
获取调试器并进行调试。提示方法签名应该是isPerfect(int number)
您究竟从哪里获得number
变量?@Xymostech可能是静态
类变量。颤栗我的number
是类范围内的私有int:public-class-Perfect{private-int-number;public-Perfect(){}
public-Perfect(int-num){number=num;}
public-void-setNum(int-num){number=num;}
@jlordo不总是,但它是在这个上下文中。什么时候不一样?我想不出一个反例。@grampage,即当它导致一个单独的=
不会的隐式强制转换时?仍然想不出这种情况。=+
如果右侧不是一个原始数,难道不是一个语法错误吗?这个答案是正确的,b但是代码中还有一个问题——也请参见我的答案……它是:public class Perfect{private int number;public Perfect(){}public Perfect(int num){number=num;}public void setNum(int num){number=num;}
我在写这篇文章的时候,考虑了你在答案的第一行中的建议,但我想用sum+=div;
来避免它在我的脑海中显得多余。如果你也考虑一下,你可以用return(sum==number);而不是if-else组合if(sum==number)
我甚至从未想过,尽管我确信我的老师告诉我它同样有用。下面是我如何设置runner类:public类Lab09h{public static void main(String args[]){Perfect test=new Perfect(496);out.println(test);test.setNum(45);out.println(test);test.setNum(6);out.println(测试);test.setNum(14);out.println(测试);test.setNum(8128);out.println(测试);test.setNum(1245);out.println(测试);test.setNum(33);out.println(测试);test.setNum(28);out.println(测试);test.setNum(27);out.println(测试);test.setNum(33550336);out.println(测试); } }
我刚刚更改了int sum=0;
,正如您所提到的,它不是一个完美的数字。然而,它改变了我所有的其他结果,说它们不完美是的,这不是解决方案-请参阅我的答案以获得建议。是的,它是……但是,您的建议使用了if/else,这些实验室的主题是utilize while loops实际上,我建议从您的答案中删除一个if/else
,并在已经存在的if
中添加一个条件;-)