为啥这个 if 语句不返回布尔值?

Posted

技术标签:

【中文标题】为啥这个 if 语句不返回布尔值?【英文标题】:Why isn't this if statement returning the boolean value?为什么这个 if 语句不返回布尔值? 【发布时间】:2019-10-04 08:24:51 【问题描述】:

我正在尝试制作一个程序,该程序将显示输入是否为完美数字,这意味着因素(不包括数字)加起来与该数字相同。 除了返回值之外,我还让它工作。 如果因素的总和等于输入的数字,我想返回 true,但它不会这样做。

我尝试在整个代码中移动 if 语句,但它在任何地方都不起作用。

public class Main 

public static void main(String[] args) 
    isPerfectNumber(28);


public static boolean isPerfectNumber(int number) 
    if (number < 1) 
        return false;
    
    int numberToTest = 1;
    int sumOfFactors = 0;

    while (numberToTest < number) 
        if (number % numberToTest == 0) 
            sumOfFactors += numberToTest;
        
        numberToTest++;
    

    if (sumOfFactors == number) 
        return true;
    else
        return false;
    

我希望当代码看到 sumOfFactors 将 sum= 与输入的数字相匹配时,我就会得到正确的语句,但是当这种情况发生时它不会返回 true。实际上,它没有返回任何内容,并声明没有使用返回的方法。

【问题讨论】:

能否将整个函数粘贴到问题中? 你怎么称呼它。 整个功能已经到位。 【参考方案1】:

它“不起作用”,因为您没有打印结果。

public static void main(String[] args) 
    isPerfectNumber(28);

应该是

public static void main(String[] args) 
    System.out.println(isPerfectNumber(28));

这是“真实的”。还有,

if (sumOfFactors == number) 
    return true;
 else 
    return false;

写的路很长

return sumOfFactors == number;

而且,如果您使用的是 Java 8+,您的 isPerfectNumber 方法可以编写为带有 IntStream 和类似 lambda 过滤器的单行器

public static boolean isPerfectNumber(int number) 
    return number >= 1 && IntStream //
            .range(1, number) //
            .filter(i -> number % i == 0) //
            .sum() == number;

【讨论】:

我不敢相信我错过了这个我很抱歉我还在第一周编码只是一个愚蠢的错误。非常感谢您的回复。 写成 one-liner 和 4 行代码? ;-) --- 另外,那些// 是有原因的吗? @Andreas 我认为他指的是它是 Java 中的一条语句,只需要一个分号。 @penguin359 我知道,但是单个 statement 和单个 line 不是一回事。 a = 1; b = 2; 可以是单行的,即使它是两个语句。一个巨大的 30 行流方法链是一条语句,但几乎不是一条线。 这是一个单行语句,为了便于阅读,我在这里拆分了它;我使用 cmets 打破界限的事实很大程度上是artifact of my IDE。

以上是关于为啥这个 if 语句不返回布尔值?的主要内容,如果未能解决你的问题,请参考以下文章

Lua,if语句成语无法返回正确的布尔值

布尔值不适用于 If 语句(Javascript)

带有布尔返回的方法

如何在 if 语句中使用这个布尔值?

java if 语句默认

布尔值,如果不是0或1,运行时错误