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;
}
}
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);
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.
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;
}
}
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.
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.
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;
}