如何打印出这个布尔值? (JAVA)

时间:2012-01-24 13:40:31

标签: java printing boolean

我尝试了一些不同的方法,比如print(boolean isLeapYear)和其他一些方法,但我无法弄清楚如何让它工作。它总是说我有一个缺少的类(布尔是原始的,它需要一个吗?)无论如何,如果isLeapYear if-else语句是错误的,我不担心那些..我只需要弄清楚如何打印超出布尔值;任何帮助/点在正确的方向非常感谢=]

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

6 个答案:

答案 0 :(得分:10)

有几个问题。

一个是风格;总是大写班级名称。这是一种普遍观察到的Java约定。不这样做会让其他程序员感到困惑。

其次,行

System.out.println(boolean isLeapYear);

是语法错误。删除它。

第三

您永远不会从主程序中调用该功能。这就是为什么你永远不会看到任何答复 输入。

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

这样做:

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

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

另一件事你似乎根本就没有调用这个方法! 方法和变量都不是静态的,因此,您必须首先创建类的实例。或者你只是将它们都设置为静态,而不是直接从你的maim方法调用你的方法。

因此代码中存在一些错误。可能是你从一个更简单的例子开始,而不是重做它,直到它做你想要的。

示例:

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

答案 3 :(得分:2)

有几种方法可以解决您的问题,但这可能是最简单的方法:

您的main方法是静态的,因此它无法访问实例成员(isLeapYear字段和isLeapYear方法。纠正这种情况的一种方法是同时创建字段和方法静态:

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

最后,您实际上并没有调用isLeapYear方法(这就是为什么您没有看到任何结果)。在int year = kboard.nextInt();之后添加此行:

isLeapYear(year);

这应该是一个开始。您可以遵循一些其他最佳实践,但现在只关注让您的代码工作;你以后可以重构。

答案 4 :(得分: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,它会让您及时了解这些编译错误,并且更容易学习。

答案 5 :(得分: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;
}