web-dev-qa-db-fra.com

Comment puis-je imprimer la valeur de ce booléen? (Java)

J'ai essayé différentes méthodes, comme print (booléen isLeapYear) et quelques autres, mais je ne vois pas comment le faire fonctionner. Cela dit toujours que j'ai une classe manquante (le booléen est primitif, en a-t-il besoin?) Quoi qu'il en soit, si les déclarations isLeapYear if-else sont fausses, je ne m'inquiète pas pour celles-ci .. Je dois juste comprendre comment imprimer. la valeur du booléen; toute aide/point dans la bonne direction est grandement appréciée =]

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
cutrightjm
System.out.println(isLeapYear);

devrait fonctionner très bien.

Incidemment, dans

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

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

la partie year % 400 ne sera jamais atteinte car si (year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0) est vrai, alors (year % 4 == 0) && (year % 100 == 0) doit avoir réussi.

Peut-être échanger ces deux conditions ou les reformuler:

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

Il y a plusieurs problèmes.

L'un est de style; capitalise toujours les noms de classe. C'est une convention Java universellement observée. Ne pas le faire déroute les autres programmeurs.

Deuxièmement, la ligne 

System.out.println(boolean isLeapYear);

est une erreur de syntaxe. Supprime-le.

Troisièmement.

Vous n’appelez jamais la fonction à partir de votre routine principale. C'est pourquoi vous ne voyez jamais de réponse À l'entrée.

10
ncmathsadist

vous devriez juste enlever le 'booléen' devant votre variable booléenne.

Fais-le comme ça:

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

ou

boolean isLeapYear = true;
System.out.println(isLeapYear?"yes":"no");

L'autre chose est que vous semblez ne pas appeler la méthode du tout! La méthode et la variable ne sont pas toutes les deux statiques, vous devez donc d'abord créer une instance de votre classe. Ou bien vous faites simplement statique et appelez simplement votre méthode directement à partir de votre méthode de mutilation.

Il y a donc quelques erreurs dans le code. Peut-être devriez-vous commencer par un exemple plus simple et le retravailler jusqu'à ce qu'il fasse ce que vous voulez.

Exemple:

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;
    }
}
4
janosch

Il existe plusieurs façons de résoudre votre problème, mais c’est probablement la plus simple:

Votre méthode main étant statique, elle n'a donc pas accès aux membres de l'instance (champ isLeapYear et méthode isLeapYear. Une approche pour y remédier est de rendre le champ et la méthode également statiques:

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

Enfin, vous n’appelez pas réellement votre méthode isLeapYear (c’est pourquoi vous ne voyez aucun résultat). Ajoutez cette ligne après int year = kboard.nextInt();:

isLeapYear(year);

Cela devrait être un début. Il existe d’autres bonnes pratiques que vous pouvez suivre, mais pour l’instant, concentrez-vous uniquement sur l’utilisation de votre code. vous pouvez refactorer plus tard.

2
Brian Driscoll

Tout d'abord, votre variable "isLeapYear" porte le même nom que la méthode. C'est juste une mauvaise pratique.

Deuxièmement, vous ne déclarez pas "isLeapYear" en tant que variable. Java est fortement typé, vous avez donc besoin d'un boolean isLeapYear; Au début de votre méthode.

Cet appel: System.out.println(boolean isLeapYear); Est tout simplement faux. Il n'y a pas de déclarations dans les appels de méthodes.

Une fois que vous avez déclaré que isLeapYear est une variable booléenne, vous pouvez appeler System.out.println(isLeapYear);

UPDATE: Je viens de voir qu'il est déclaré comme un champ. Supprimez simplement la ligne System.out.println(boolean isLeapYear); Vous devez comprendre que vous ne pouvez pas appeler isLeapYear à partir de la méthode main (). Vous ne pouvez pas appeler une méthode non statique à partir d'une méthode statique avec une instance. Si vous voulez l'appeler, vous devez ajouter

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

Je suggère vraiment que vous utilisiez Eclipse, il vous indiquera de telles erreurs de compilation à la volée et il est beaucoup plus facile à apprendre de cette façon.

1
Enrico
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;
}
0
Adel Boutros