Java 布尔条件总是求值为真

Java 布尔条件总是求值为真,java,boolean,Java,Boolean,我正在为一个intro Java类做一个家庭作业项目,我的任务是创建一个类和方法来测试输入年份是否是闰年。我在一个程序中看到了很多这样做的例子,但是我们需要构建类,然后运行我教授的测试文件。我终于把所有要编译的东西都编译好了,但每次我运行这个文件,我都会被告知今年是闰年。我尝试了很多不同的方法,但我不明白为什么at的布尔条件总是求值为true(或者我做错了什么) 我的代码如下: public class Year { // declare variable private int

我正在为一个intro Java类做一个家庭作业项目,我的任务是创建一个类和方法来测试输入年份是否是闰年。我在一个程序中看到了很多这样做的例子,但是我们需要构建类,然后运行我教授的测试文件。我终于把所有要编译的东西都编译好了,但每次我运行这个文件,我都会被告知今年是闰年。我尝试了很多不同的方法,但我不明白为什么at的布尔条件总是求值为true(或者我做错了什么)

我的代码如下:

public class Year
{
   // declare variable
    private int y;
    private String year;

    // declare constructor
    public Year(String theYear, int year_input)
    {
        y=year_input;
        theYear=year;
    }    

    // ensure y has a value
    public Year(int y)
    {
        y=0;
    } 

    // test if y is a leap year
    public boolean isLeapYear()
    {
             if (y%4==0 && (y/100!=0 || y%400==0))
             { 
                 return true;
             } 
                return false;

    }
} 
我教授的代码如下:

import java.util.Scanner;

public class LeapYearTester{

public static void main(String[] args){

    Scanner input = new Scanner(System.in);
    System.out.println("Please enter a year");
    int year_input = input.nextInt();

    // now make a Year object

    Year theYear = new Year(year_input);

    // now check to see if it's a leap year

    if (theYear.isLeapYear())
        System.out.println("That's a leap year!");
    else
        System.out.println("That's not a leap year!");
    }
}

在单参数构造函数中,总是将年份初始化为0

改变

public Year(int y)
{
    y = 0;
} 


在单参数构造函数中,总是将年份初始化为0

改变

public Year(int y)
{
    y = 0;
} 


问题出在构造函数中

您总是将年份初始化为0,而不是从输入中获得的值


还要学会调试:)

问题在构造函数中

您总是将年份初始化为0,而不是从输入中获得的值


还要学习调试:)

在第二个构造函数中,您总是将0指定给输入参数。这毫无意义。相反,您必须将参数分配给您的成员变量。

在第二个构造函数中,您总是将0分配给您的输入参数。这毫无意义。相反,您必须将参数分配给您的成员变量。

创建您的构造函数

public Year (int y)
{
    this.y = y;
}
不要总是将其初始化为0。

让您的构造函数

public Year (int y)
{
    this.y = y;
}

而不是总是将其初始化为0。

您的年份(int)构造函数有问题 正确的定义应该是

public Year(int y){ this.y = y ;}

前面所做的是每次在构造函数中传递整数值时将成员变量y初始化为0

您的年份(int)构造函数有问题 正确的定义应该是

public Year(int y){ this.y = y ;}

前面所做的是每次在构造函数中传递整数值时将成员变量y初始化为0

//确保y有一个值该构造函数将做什么?同时将y/100更改为y%100在第一个构造函数中没有人注意到这一行
theYear=year
)//确保y有一个值,这个构造函数将做什么?同时将y/100更改为y%100在第一个构造函数
theYear=year中没有人注意到这一行)是的,调试确实很好:)在这种情况下,当你看不出它为什么不工作时,你想做的就是什么都不做。您也可以使用println:)以后可以随时删除它们。测试你的假设并添加你自己的if语句来证明它们。是的,调试绝对是好的:)在这样的情况下,当你看不出它为什么不起作用时,你想做的就是什么都不假设。您也可以使用println:)以后可以随时删除它们。测试你的假设,并添加你自己的if语句来证明它们。