2012-01-24 29 views
5

He intentado algunos métodos diferentes, como imprimir (boolean isLeapYear) y algunos otros, pero no puedo encontrar la manera de hacerlo funcionar. Siempre dice que tengo una clase faltante (boolean es primitivo, ¿necesita uno?) De todos modos, si las declaraciones isLeapYear if-else son incorrectas, no estoy preocupado por eso ... Solo necesito descubrir cómo imprimir el valor del booleano; cualquier ayuda/punto en la dirección correcta es muy apreciada =]¿Cómo imprimo el valor de este booleano? (Java)

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; 
    } 
} 
+1

eliminar "System.out.println (boolean isLeapYear);" la línea arriba de esto funciona. –

+0

¿No sería eso "boolean isLeapYear"? – cutrightjm

+0

@OliCharlesworth tiene, como un campo de clase. Probablemente esté confundido porque el método principal estático no puede llamar al método isLeapYear() no estático. – bdares

Respuesta

6
System.out.println(isLeapYear); 

debería funcionar bien.

Por cierto, en

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

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

que nunca se alcanzará la parte year % 400 porque si (year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0) es cierto, entonces (year % 4 == 0) && (year % 100 == 0) deben haber tenido éxito.

intercambie Tal vez esas dos condiciones o refactorizar ellos:

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

En primer lugar, la variable "ESAÑOBISIESTO" es el mismo nombre que el método. Eso es solo una mala práctica.

En segundo lugar, no está declarando "isLeapYear" como una variable. Java está fuertemente tipado por lo que necesita un boolean isLeapYear; al principio de su método.

Esta llamada: System.out.println(boolean isLeapYear); es simplemente incorrecta. No hay declaraciones en llamadas a métodos.

Una vez que haya declarado ESAÑOBISIESTO ser una variable booleana, puede llamar System.out.println(isLeapYear);

ACTUALIZACIÓN: acabo de ver es declarado como un campo. Así que simplemente elimine la línea System.out.println(boolean isLeapYear); Debe comprender que no puede llamar a isLeapYear desde el método main(). No puede llamar a un método no estático desde un método estático con una instancia. Si quieres llamarlo, es necesario agregar

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

Realmente sugiero que utilice Eclipse, que le permitirá saber de tales errores de compilación sobre la marcha y es mucho más fácil de aprender de esa manera.

0
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

Para los votantes de abajo, ¿pueden decirme por qué esto es inútil? –

+0

@ekaj ¿viste la última línea amigo? dice 'return isLeapYear' –

+0

e incluso está imprimiendo un valor diferente (de' isLeapYear') en el 3er si. ¿Por qué no simplemente 'System.out.println (isLeapYear);' antes de volver? –

10

Existen varios problemas.

Uno es de estilo; siempre escribe en mayúscula los nombres de las clases. Esta es una convención de Java universalmente observada. No hacerlo confunde a otros programadores.

En segundo lugar, la línea de

System.out.println(boolean isLeapYear); 

es un error de sintaxis. Bórralo.

En tercer lugar.

Nunca llama a la función desde su rutina principal. Es por eso que nunca verá ninguna respuesta a la entrada.

+0

También hay otros problemas. – ncmathsadist

+2

@ekaj Él te dijo exactamente cómo hacer que funcione. También te dio consejos que te ayudarán en el largo plazo. Para agregar a lo que está diciendo, debe cambiar el nombre de su booleano o el método, ya que tienen el mismo nombre. Estas son críticas útiles, sin intenciones de menospreciarlo. – StartingGroovy

+0

Gracias @StartingGroovy – ncmathsadist

4

simplemente debería eliminar el 'booleano' delante de su variable booleana.

hacerlo de esta manera:

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

o

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

El otro sombrero ist cosa que parece no llamar al método en absoluto! El método y la variable no son estáticos, por lo tanto, primero debe crear una instancia de su clase. O simplemente hace que ambos sean estáticos y que simplemente llame a su método directamente desde su método de mutilación.

Por lo tanto, hay un par de errores en el código. Puede ser que comience con un ejemplo más simple y que lo reelabore hasta que haga lo que quiera.

Ejemplo:

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

Hay un par de maneras de abordar el problema, sin embargo, este es probablemente el más sencillo:

Su método main es estática, por lo que no tiene acceso a la instancia . (isLeapYear miembros de campo y método isLeapYear Un enfoque para rectificar esto es hacer que tanto el campo como el método estático, así:

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

Por último, no está llamando a su método isLeapYear (por lo que no está viendo ningún resultado). Añadir esta línea después de int year = kboard.nextInt();:

isLeapYear(year);

Eso debería ser un comienzo. Hay algunas otras mejores prácticas que podría seguir, pero por ahora solo concéntrese en hacer que su código funcione; puedes refactorizar más tarde.

Cuestiones relacionadas