Java 如何打印此布尔值?(爪哇)

Java 如何打印此布尔值?(爪哇),java,printing,boolean,Java,Printing,Boolean,我尝试了一些不同的方法,比如print(booleanisleapyear)和其他一些方法,但我不知道如何让它工作。它总是说我缺少一个类(boolean是基本类,它需要一个吗?)。。我只需要弄清楚如何打印出布尔值;非常感谢您向正确方向提供的任何帮助 import java.util.Scanner; public class booleanfun { boolean isLeapYear; public static void main(String[] args)

我尝试了一些不同的方法,比如print(booleanisleapyear)和其他一些方法,但我不知道如何让它工作。它总是说我缺少一个类(boolean是基本类,它需要一个吗?)。。我只需要弄清楚如何打印出布尔值;非常感谢您向正确方向提供的任何帮助

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;
    }
}
应该很好用

顺便说一下,在

年份%400
部分将永远不会到达,因为如果
(年份%4==0)和&(年份%100==0)和&(年份%400==0)
为真,则
(年份%4==0)和&(年份%100==0)
必须已成功

可以交换这两个条件或重构它们:

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

首先,变量“isLeapYear”与方法的名称相同。那只是坏习惯

其次,您没有将“isLeapYear”声明为变量。 Java是强类型的,所以您需要
boolean一年
在你的方法的开头

此电话:
System.out.println(布尔值为一年)
这完全是错误的。方法调用中没有声明

将isLeapYear声明为布尔变量后,可以调用
System.out.println(每年一次)

更新: 我刚看到它被声明为一个字段。所以只需删除行
System.out.println(booleanisleapyear)
您应该了解,不能从main()方法调用isLeapYear。不能从具有实例的静态方法调用非静态方法。
如果您想调用它,您需要添加

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

我真的建议您使用Eclipse,它会让您随时了解此类编译错误,而且这样更容易了解。

有几个问题

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;
}
一是风格;始终将类名大写。这是一个普遍遵守的Java约定。不这样做会让其他程序员感到困惑

第二,线路

System.out.println(boolean isLeapYear);
是一个语法错误。删除它

第三

您从不从主例程调用该函数。这就是为什么你从来没有看到任何回复
到输入。

只需删除布尔变量前面的“boolean”

这样做:

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

另一件事是,您似乎根本不调用该方法! 方法和变量都不是静态的,因此,必须首先创建类的实例。或者,您只需要进行静态和静态操作,而不是直接从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;
    }
}

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

您的
main
方法是静态的,因此它无法访问实例成员(
isLeapYear
字段和
isLeapYear
方法)。纠正此问题的一种方法是将字段和方法同时设为静态:

static boolean isLeapYear;
/* (snip) */
public static boolean isLeapYear(int year)
{
  /* (snip) */
}
最后,您实际上没有调用您的
isLeapYear
方法(这就是您没有看到任何结果的原因)。请在
int year=kboard.nextInt()之后添加此行;

isLeapYear(年);


这应该是一个开始。您可以遵循其他一些最佳实践,但目前只需关注代码的运行;您可以稍后重构。

删除“System.out.println(boolean isLeapYear);”上面的行。这不是“boolean isLeapYear”吗?@OliCharlesworth,作为类字段。他可能会感到困惑,因为静态main方法无法调用非静态isLeapYear()方法。@OliCharlesworth它被声明为一个字段。还有其他问题。@ekaj他确切地告诉了你如何使它工作。他也给了你一些从长远来看对你有帮助的提示。要补充他的话,你应该更改布尔值的名称或方法,因为它们有相同的名称。这些都是有用的批评,没有意图为了让你失望,你能告诉我为什么这没用吗?@ekaj你看到最后一行了吗?上面写着
return isLeapYear
,它甚至在第三个if中打印了一个不同的值(来自
isLeapYear
)。为什么不只是
System.out.println(isLeapYear)
回来之前?@BenvanGompel哦,天哪,你听说打字错误了吗?@Adel Boutros是的,但我会在周五把我的身体分成3-6块,基本上我需要两天时间把这些部分拼在一起
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;
    }
}
static boolean isLeapYear;
/* (snip) */
public static boolean isLeapYear(int year)
{
  /* (snip) */
}