我尝试了一些不同的方法,比如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;
}
}
答案 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;
}