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

14

我已经尝试过几种不同的方法,比如 print(boolean isLeapYear) 等等,但是我无法弄清楚如何让它工作。 它总是说我缺少一个类(boolean 是原始类型,是否需要一个?)无论如何,如果 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);
System.out.println(boolean isLeapYear);

    return isLeapYear;
    }
}

1
删除 "System.out.println(boolean isLeapYear);" 上面的那一行是有效的。 - user800014
那不应该是“boolean isLeapYear”吗? - cutrightjm
@OliCharlesworth他已经将其作为类字段。他可能会感到困惑,因为静态main方法无法调用非静态的isLeapYear()方法。 - user684934
@OliCharlesworth 它被声明为一个字段。 - Brian Driscoll
6个回答

12

存在几个问题。

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

其次,行

System.out.println(boolean isLeapYear);

这是一个语法错误,请删除它。

第三点。

你从主程序中没有调用该函数。这就是为什么你从未看到对输入的任何回复。


还有其他问题。 - ncmathsadist
3
@ekaj他告诉了你如何使其工作。他还给了你一些有助于长期发展的建议。除此之外,你应该更改布尔值的名称或方法名称,因为它们具有相同的名称。这些是有益的批评,没有打击你的意图。 - StartingGroovy

11
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 % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)成立,则永远不会达到year % 400的部分,因为必须先满足(year % 4 == 0) && (year % 100 == 0)这个条件。

也许可以交换这两个条件或对它们进行重构:

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

7

您只需要去掉布尔变量前面的“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); 这应该是一个开始。还有一些其他的最佳实践可以遵循,但现在只需专注于让你的代码工作; 以后再进行重构。

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

对于那些给我投反对票的人,你们能否告诉我为什么这是无用的? - Adel Boutros
@ekaj,你看到最后一行了吗?它说“返回isLeapYear”。 - Adel Boutros
它甚至在第三个if语句中打印了一个不同的值(来自isLeapYear)。为什么不在返回之前加上System.out.println(isLeapYear);呢? - Ben van Gompel
@BenvanGompel 哦天啊,你听说过打字错误吗? - Adel Boutros
@mKorbel 敬请期待周六之夜的节目 ;) - Adel Boutros
1
@Adel Boutros,你说得没错,但我会在周五把我的身体分成三到六个部分,基本上需要两天时间将这些部分组合在一起。 - mKorbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接