Как распечатать значение этого логического значения? (Джава) - PullRequest
6 голосов
/ 24 января 2012

Я пробовал несколько разных методов, таких как 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;
    }
}

Ответы [ 6 ]

10 голосов
/ 24 января 2012

Есть несколько проблем.

Одна из них стиля;всегда используйте заглавные буквыЭто общепризнанное соглашение Java.Невыполнение этого требования приводит в замешательство других программистов.

Во-вторых, строка

System.out.println(boolean isLeapYear);

является синтаксической ошибкой.Удалите его.

В-третьих.

Вы никогда не вызываете функцию из своей основной процедуры.Вот почему вы никогда не видите никакого ответа на вход.

7 голосов
/ 24 января 2012
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);
4 голосов
/ 24 января 2012

Вы должны просто удалить '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;
    }
}
2 голосов
/ 24 января 2012

Существует несколько способов решения вашей проблемы, однако это, вероятно, самый простой способ:

Ваш main метод является статическим, поэтому он не имеет доступа к членам экземпляра (поле isLeapYear)и метод * 1005. * Один из способов исправить это состоит в том, чтобы сделать поле и метод также статичными:

static boolean isLeapYear;
/* (snip) */
public static boolean isLeapYear(int year)
{
  /* (snip) */
}

Наконец, вы на самом деле не вызываете свой метод isLeapYear (вот почемувы не видите никаких результатов.) Добавьте эту строку после int year = kboard.nextInt();:

isLeapYear(year);

Это должно быть началом. Существуют и другие лучшие практики, которым вы могли бы следовать, но покапросто сосредоточьтесь на том, чтобы заставить ваш код работать, вы можете выполнить рефакторинг позже.

1 голос
/ 24 января 2012

Прежде всего, ваша переменная "isLeapYear" имеет то же имя, что и метод. Это просто плохая практика.

Во-вторых, вы не объявляете "isLeapYear" как переменную. Java строго типизирован, поэтому вам нужно boolean isLeapYear; в начале вашего метода.

Этот звонок: System.out.println(boolean isLeapYear); это просто неправильно. В вызовах методов нет объявлений.

Как только вы объявили isLeapYear в качестве логической переменной, вы можете вызвать System.out.println(isLeapYear);

UPDATE: Я только что увидел, что он объявлен как поле. Так что просто удалите строку System.out.println(boolean isLeapYear); Вы должны понимать, что нельзя вызывать isLeapYear из метода main (). Нельзя вызывать нестатический метод из статического метода с экземпляром. Если вы хотите позвонить, вам нужно добавить

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

Я действительно предлагаю вам использовать Eclipse, он сообщит вам о таких ошибках компиляции на лету, и его намного легче учить таким образом.

0 голосов
/ 24 января 2012
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;
}
...