2012-11-20 132 views
4

我有一个学校的任务,使一个程序导致真或假。这是关于一年是不是闰年。我现在的问题是我使用公共静态布尔而不是公共布尔值。 这是我的代码:更改静态布尔值

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; 
    } 
} 

年整型是2000的时刻,但规则是这样的: 闰年是一年至极可以通过4,除非今年是一个新的开始划分世纪(1700,1800,1900 .....)。所以即使你可以将1900除以4,你也不能将它除以400,所以它是错误的。 所以再次提出这个问题:我需要做什么,我可以使用公共布尔而不是公共静态布尔?

+0

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

回答

2

如果你想让你的方法是非静态的,你需要创建一个类的实例来从你的main方法调用该方法。然后你可以让你的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)); 
+0

@Downvoter ..请发表评论。我回答了OP询问的问题:''我需要做什么以便我能够使用公共布尔值而不是公共静态布尔值?'。请在downvoting之前阅读该问题?我不认为这个答案真的需要一个downvote。 –

+0

我认为这是一个很好的答案,所以我投了票。 –

+0

谢谢@BaileyS。 :) –

0

你的任务是否说它必须存储在类或实例变量中?如果没有,就没有必要对public boolean isLeapYearpublic static boolean isLeapYear,只返回计算的结果并将其存储在一个局部变量是这样的:

main方法
public static boolean isLeapYear(int year) { 
    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); 
} 

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

你不需要在任何地方存储这个结果。

用途:

public static boolean isLeapYear(int year) 
{ 
    return (((year/100)%4 == 0 && year%4 ==0) || (year % 400 == 0)); 
} 
+0

肯定这是一个很好的建议,但它并没有真正回答OP的要求。他问的是如何使用“非静态”方法而不是“静态方法”。 –

1

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

以防万一你应该存储布尔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; 
} 
} 
0

方法是static由从类这样的对骂他们访问:

Assignment.isLeapYear(1990) 

中的方法不static从类的实例访问,如下所示:

Assignment a = new Assignement(); 
a.isLeapYear(1990); 

静态方法只能访问静态实例变量。要使用非静态实例变量,您需要将您的函数转换为常规实例并实例化该类。