2012-01-24 13 views
5

Próbowałem kilka różnych metod, takich jak print (boolean isLeapYear) i kilka innych, ale nie mogę się dowiedzieć, jak sprawić, by działał. Zawsze mówi, że mam brakującą klasę (boolean jest prymitywna, czy ona potrzebuje?) W każdym razie, jeśli instrukcje isLeapYear if-else są błędne, nie martwię się o te ... Po prostu muszę wymyślić jak wydrukować wartość wartości boolowskiej; Każda pomoc/punkt w dobrym kierunku jest bardzo ceniona =]Jak wydrukować wartość tej wartości boolowskiej? (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

usunąć "System.out.println (boolean isLeapYear);" linia powyżej tego działa. –

+0

Czy nie byłoby to "boolean isLeapYear"? – cutrightjm

+0

@OliCharlesworth ma, jako pole klasy. Pewnie się myli, ponieważ statyczna metoda główna nie może wywołać niestatycznej metody isLeapYear(). – bdares

Odpowiedz

6
System.out.println(isLeapYear); 

powinno działać dobrze.

Nawiasem mówiąc, w

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 część nigdy nie zostanie osiągnięty, ponieważ jeśli (year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0) jest prawdą, to (year % 4 == 0) && (year % 100 == 0) musi udało.

Może zamienić te dwa warunki lub byłaby im:

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

Przede wszystkim, zmienna „ISLEAPYEAR” jest taka sama jak nazwa metody. To po prostu zła praktyka.

Po drugie, nie deklarujesz "isLeapYear" jako zmiennej. Java jest silnie typowana, więc na początku metody musisz mieć boolean isLeapYear; .

To połączenie: System.out.println(boolean isLeapYear); jest po prostu złe. W wywołaniach metod nie ma deklaracji.

Po zadeklarowały ISLEAPYEAR być zmienna logiczna, można zadzwonić System.out.println(isLeapYear);

UPDATE: Właśnie widziałem to uznane jako pole. Po prostu usuń linię System.out.println(boolean isLeapYear); Powinieneś zrozumieć, że nie możesz wywołać isLeapYear z metody main(). Nie można wywołać metody niestatycznej z metody statycznej z instancją. Jeśli chcesz to nazwać, trzeba dodać

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

Naprawdę proponuję użyć Eclipse, to niech pan wie o takich błędów kompilacja na bieżąco i jej o wiele łatwiej nauczyć się w ten sposób.

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

Dla osób, które nie głosują, czy możesz mi powiedzieć, dlaczego jest to bezużyteczne? –

+0

@ekaj widziałeś ostatniego kolesia? jest napisane "return isLeapYear' –

+0

I to jest nawet drukowanie innej wartości (z' isLeapYear') w trzecim przypadku. Dlaczego nie po prostu 'System.out.println (isLeapYear);' przed powrotem? –

10

Istnieje kilka problemów.

Jeden jest w stylu; zawsze zamieniaj wielkie litery na nazwy klas. Jest to powszechnie stosowana konwencja Java. W przeciwnym razie myli innych programistów.

drugie, linia

System.out.println(boolean isLeapYear); 

jest błąd składni. Usuń to.

Po trzecie.

Nigdy nie wywołujesz funkcji z głównej procedury. Dlatego nigdy nie widzisz żadnej odpowiedzi na dane wejściowe .

+0

Istnieją również inne problemy. – ncmathsadist

+2

@ekaj Powiedział ci dokładnie, jak to zrobić. Dał ci także wskazówki, które pomogą ci na dłuższą metę. Aby dodać do tego, co mówi, należy zmienić nazwę boolowskiej lub metodę, ponieważ mają one takie same nazwy. Są to pomocne krytyki, bez zamiaru cię zniechęcić. – StartingGroovy

+0

Dziękujemy @StartingGroovy – ncmathsadist

4

powinieneś po prostu usunąć "boolean" przed swoją zmienną boolean.

Czy to tak:

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

lub

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

Inną rzeczą ist kapelusz wydaje się nie wywołać metodę w ogóle! Metoda i zmienna nie są statyczne, dlatego należy najpierw utworzyć instancję klasy. Albo po prostu dokonaj zarówno statycznego, jak i po prostu wywołaj swoją metodę bezpośrednio z metody maim.

W kodzie jest kilka błędów. Być może zaczniesz od prostszego przykładu i przerób go, aż zrobi to, co chcesz.

Przykład:

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

Istnieje kilka sposobów rozwiązania problemu, jednak jest to prawdopodobnie najbardziej prosta:

Twoja metoda main jest statyczna, więc nie ma dostępu do instancji . członkowie (isLeapYear pola i isLeapYear Jedno podejście do naprawienia tej metody jest, aby zarówno pola i metody statyczne, a także:

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

Wreszcie, w rzeczywistości nie wywołujesz metody isLeapYear (dlatego nie widzisz żadnych wyników). Dodaj tę linię po int year = kboard.nextInt();:

isLeapYear(year);

To powinno być początek. Jest kilka innych dobrych praktyk, które możesz zastosować, ale na razie skup się tylko na uruchomieniu kodu; możesz później dokonać refaktoryzacji.

Powiązane problemy