改变静态布尔值

Posted

技术标签:

【中文标题】改变静态布尔值【英文标题】:Changing static boolean 【发布时间】:2012-11-08 23:48:17 【问题描述】:

我有一个任务让学校制作一个程序,结果要么是对的,要么是错的。一年是否是闰年。我目前遇到的问题是我使用的是公共静态布尔值而不是公共布尔值。 这是我的代码:

public class Assignment 

    static boolean isLeapYear;

    public static void main(String[] args)
            
        int year = 2000;
        isLeapYear(year);
    
    public static boolean isLeapYear(int year) 
        if (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0))
            isLeapYear = true;

        else
            isLeapYear = false;

        System.out.println(isLeapYear);

        return isLeapYear;
    

此时 int 年份为 2000,但规则如下: 闰年是可以除以 4 的年份,除非该年份是新世纪的开始(1700、1800、1900 ......)。因此,即使您可以将 1900 除以 4,您也不能将其除以 400,所以这是错误的。 那么问题又来了:我需要做什么才能使用公共布尔值而不是公共静态布尔值?

【问题讨论】:

要使用公共布尔值,您需要创建一个对象。 【参考方案1】:

如果你想让你的方法不是静态的,你需要创建你的类的一个实例来从你的主方法调用那个方法。然后你可以让你的 isLeapYear 变量非静态:-

boolean isLeapYear;
public static void main(String[] args)
        
    int year = 2000;
    new Assigment().isLeapYear(year);

public boolean isLeapYear(int year) 
    // access isLeapYear as `this.isLeapYear` or just `isLeapYear`

但是,确切地说,您不需要将结果存储在布尔变量中。如果你想返回某个表达式的布尔值,那么你可以直接返回那个表达式。

因此,只要在您的方法中包含此代码也可以正常工作,并且更具可读性,并且让该方法是静态的:-

return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0))

从你的主要通话中:-

System.out.println("Year : " + year + ", is leap year: " + isLeapYear(year));

【讨论】:

@Downvoter.. 请发表评论。我已经回答了 OP 提出的问题:-What do I need to do so i'm able to use a public boolean instead of a public static boolean?。请在投票前阅读问题?而且我认为这个答案真的不需要反对。【参考方案2】:

您无需将此结果存储在任何地方。

用途:

public static boolean isLeapYear(int year) 

   return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0));

【讨论】:

当然这是一个很好的建议,但它并不能真正回答 OP 的要求。他在问如何使用non-static 方法而不是static method【参考方案3】:

静态方法只能访问静态变量,只有实例方法可以访问实例方法,如果你认为是面向对象的可以推断。

以防万一您应该存储布尔 isLeapYear

public class Testing 
boolean isLeapYear;

public static void main(String[] args)
        
    int year = 2000;
    new Testing().isLeapYear(year);

public boolean isLeapYear(int year) 
    if (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0))
        isLeapYear = true;

    else
        isLeapYear = false;

    System.out.println(isLeapYear);

    return isLeapYear;


【讨论】:

【参考方案4】:

您的作业是否说它必须存储在类或实例变量中?如果没有,则不需要public boolean isLeapYearpublic static boolean isLeapYear,只需返回计算的结果 并将其存储在这样的局部变量中:

public static boolean isLeapYear(int year) 
    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); 

main方法中:

int year = 2000;
boolean isLeap = isLeapYear(year);
System.out.println(isLeap);

【讨论】:

以上是关于改变静态布尔值的主要内容,如果未能解决你的问题,请参考以下文章

最终布尔值正在改变值

从 void 和 boolean 方法返回多个值

Flutter - cubit - 改变cubit内的布尔值

java布尔值在被调用方法中没有改变[重复]

IDE和命令行的结果不同,布尔值似乎改变了值

为什么布尔表达式的值不会改变? (JAVA)