【问题标题】: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,所以这是错误的。 那么问题又来了:我需要做什么才能使用公共布尔值而不是公共静态布尔值?

【问题讨论】:

  • 要使用公共布尔值,您需要创建一个对象。

标签: java static boolean public


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 2015-02-08
      • 2011-04-18
      • 2023-04-10
      • 2023-04-05
      • 2014-06-08
      • 2020-09-17
      相关资源
      最近更新 更多