Булево условие всегда оценивается как истинное - PullRequest
0 голосов
/ 23 сентября 2018

Я работаю над проектом домашней работы для вводного Java-класса, в котором мне поручено создать класс и метод для проверки того, является ли год ввода високосным или нет.Я видел множество примеров людей, делающих это в одной программе, но мы должны создать класс и затем запустить файл Tester моего профессора.Я наконец-то получил все для компиляции без ошибок, но каждый раз, когда я запускаю файл, мне говорят, что это високосный год.Я пробовал кучу разных вещей, и я не могу понять, почему логическое условие 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!");
    }
}

Ответы [ 5 ]

0 голосов
/ 23 сентября 2018

Что-то не так с вашим конструктором year (int). Правильное определение должно выглядеть следующим образом:

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

То, что вы делали ранее, это инициализация переменной-члена y в 0 Каждый раз, когда вы передаете целочисленное значение в конструкторе,

0 голосов
/ 23 сентября 2018

Сделайте ваш конструктор

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

вместо того, чтобы всегда инициализировать его как 0.

0 голосов
/ 23 сентября 2018

Проблема в вашем конструкторе.

Вы всегда инициализируете год как 0, а не как получаемый из ввода.

Также учитесь отлаживать:)

0 голосов
/ 23 сентября 2018

Во втором конструкторе вы всегда присваиваете 0 своему входному параметру.Это бессмысленно.Вместо этого вы должны присвоить параметр своей переменной-члену.

0 голосов
/ 23 сентября 2018

В вашем конструкторе с одним аргументом вы всегда инициализируете год как 0.

Измените

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

на

public Year(int y)
{
    this.y = y;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...