2012-01-24 100 views
5

我已经尝试了几种不同的方法,如print(boolean isLeapYear)和其他一些方法,但我无法弄清楚如何让它工作。它总是说我有一个缺少的类(布尔是原始的,它是否需要一个?)反正,如果isLeapYear if-else语句是错误的,我不担心这些..我只需要弄清楚如何打印取出布尔值的值;在正确的方向上的任何帮助/点是极大的赞赏=]如何打印出此布尔值的值? (Java)

import java.util.Scanner; 

public class booleanfun { 
    boolean isLeapYear; 

    public static void main(String[] args) 
    { 
     System.out.println("Enter a year to determine if it is a leap year or not: "); 
     Scanner kboard = new Scanner(System.in); 
     int year = kboard.nextInt(); 
    } 
public boolean isLeapYear(int year) 
    { 
    if (year % 4 != 0) 
     isLeapYear = false; 

    else if ((year % 4 == 0) && (year % 100 == 0)) 
     isLeapYear = false; 

    else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) 
     isLeapYear = true; 

    else 
     isLeapYear = false; 

System.out.println(isLeapYear); 

    return isLeapYear; 
    } 
} 
+1

remove“System.out.println(boolean isLeapYear);”上面这行工作。 –

+0

那不是“布尔isLeapYear”? – cutrightjm

+0

@OliCharlesworth他作为一个班级领域。他可能会感到困惑,因为静态main方法不能调用非静态isLeapYear()方法。 – bdares

回答

6
System.out.println(isLeapYear); 

应该工作得很好。

顺便说一句,在

else if ((year % 4 == 0) && (year % 100 == 0)) 
    isLeapYear = false; 

else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) 
    isLeapYear = true; 

year % 400部分永远不会达到的,因为如果(year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)是真的,那么(year % 4 == 0) && (year % 100 == 0)必须成功。

也许交换这两个条件或重构的时候:

else if ((year % 4 == 0) && (year % 100 == 0)) 
    isLeapYear = (year % 400 == 0); 
1

首先,你的变量“isLeapYear”是同名的方法。这只是不好的做法。

其次,你没有声明“isLeapYear”作为变量。 Java是强类型的,因此您需要在方法开始时使用 boolean isLeapYear;

此致电: System.out.println(boolean isLeapYear); 是错的。方法调用中没有声明。

一旦声明isLeapYear是一个布尔变量,你可以叫 System.out.println(isLeapYear);

更新: 我刚看到它的声明为一个字段。因此,只需删除行System.out.println(boolean isLeapYear); 您应该明白,您不能从main()方法调用isLeapYear。您无法使用实例从静态方法调用非静态方法。 如果你要称呼它,你需要添加

booleanfun myBoolFun = new booleanfun(); 
System.out.println(myBoolFun.isLeapYear); 

我真的建议你使用Eclipse,它会让你知道在飞行和更容易学习这种方式这样的编译错误。

0
public boolean isLeapYear(int year) 
{ 
    if (year % 4 != 0){ 
     isLeapYear = false; 
     System.out.println("false"); 
    } 
    else if ((year % 4 == 0) && (year % 100 == 0)){ 
     isLeapYear = false; 
     System.out.println("false"); 
    } 
    else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)){ 
     isLeapYear = true; 
     System.out.println("true"); 
    } 
    else{ 
     isLeapYear = false; 
     System.out.println("false"); 
    } 
    return isLeapYear; 
} 
+0

对于下来的选民,你能告诉我为什么这是无用的吗? –

+0

@ekaj你看到最后一行花花公子了吗?它说'return isLeapYear' –

+0

它甚至在第三个if中打印一个不同的值(来自'isLeapYear')。为什么不只是'System.out.println(isLeapYear);'在返回之前? –

10

有几个问题。

一个风格;总是大写类名。这是一个普遍遵守的Java约定。如果不这样做会让其他程序员感到困惑。

其次,线

System.out.println(boolean isLeapYear); 

是语法错误。删除它。

第三。

你永远不会从你的主程序调用函数。这就是为什么你从来没有看到任何回应 输入。

+0

还有其他问题。 – ncmathsadist

+2

@ekaj他告诉你如何使它工作。他还向你提供了一些能够长期帮助你的提示。要添加他说的话,你应该改变布尔的名字或方法,因为他们有相同的名字。这些是有用的批评,不打算让你失望。 – StartingGroovy

+0

谢谢@StartingGroovy – ncmathsadist

4

你应该删除布尔变量前的'boolean'。

做这样的:

boolean isLeapYear = true; 
System.out.println(isLeapYear); 

boolean isLeapYear = true; 
System.out.println(isLeapYear?"yes":"no"); 

的另一件事北京时间帽子你似乎并没有在所有调用的方法! 该方法和变量都不是静态的,因此,您必须先创建一个类的实例。或者你只需​​要使用静态方法,而不是直接从你的方法调用你的方法。

因此,代码中有几处错误。也许你应该从一个更简单的例子开始,然后重做它,直到它做到你想要的。

例子:

import java.util.Scanner; 

public class booleanfun { 
    static boolean isLeapYear; 

    public static void main(String[] args) 
    { 
     System.out.println("Enter a year to determine if it is a leap year or not: "); 
     Scanner kboard = new Scanner(System.in); 
     int year = kboard.nextInt(); 
     isLeapYear(year); 
    } 
    public static boolean isLeapYear(int year) { 
     if (year % 4 != 0) 
     isLeapYear = false; 

     else if ((year % 4 == 0) && (year % 100 == 0)) 

     isLeapYear = false; 

     else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) 
      isLeapYear = true; 

     else 
      isLeapYear = false; 

     System.out.println(isLeapYear); 

     return isLeapYear; 
    } 
} 
2

有一对夫妇的方式来解决你的问题,但是这可能是最简单的:

main方法是静态的,所以它并没有获得实例成员(isLeapYear字段和isLeapYear方法)。一种解决此问题的方法是使字段和方法都是静态的:

static boolean isLeapYear; 
/* (snip) */ 
public static boolean isLeapYear(int year) 
{ 
    /* (snip) */ 
} 

最后,你实际上并没有打电话给isLeapYear方法(这就是为什么你没有看到任何结果)。添加此行int year = kboard.nextInt();后:

isLeapYear(year);

这应该是一个开始。还有一些其他的最佳实践可以遵循,但现在只需着重让您的代码运行起来;你可以稍后重构。