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

Java 什么';这段代码有什么错,每次都不加除数求和?

Java 什么';这段代码有什么错,每次都不加除数求和?,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 =

我一直在尝试为一个实验室编写一个程序,我相信我几乎成功了,但它不会将除数(代码中的div)相加到总和,如果它是一个完美的数字,则返回true,否则返回false。我的代码编译并运行良好,但只返回false,可能是因为sum保持在1(它初始化为1,因为1是每个数字的除数)。number是从构造函数和set语句引入的私有int

  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
中添加一个条件;-)