"Dobry" program, lecz nie kompiluje

0

Prosze o przyjrzenie sie poniższemu kodowi, gdyz powinnien sie kompilowac tym bardziej ze przyklad pochodzi z ksiazki. Moze tutaj rzeczywiscie jest jakis blad? Zamiast tego otrzymuje informacje, ze:

Error: Main method not found in class zgadywanka.Zgadywanka, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
C:\Users\HP\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

package Zgadywanka;

public class Zgadywanka {
    Gracz p1;
    Gracz p2;
    Gracz p3;

public void rozpocznijGre() {
    p1 = new Gracz();
    p2 = new Gracz();
    p3 = new Gracz();

    int typp1 = 0;
    int typp2 = 0;
    int typp3 = 0;

    boolean p1odgadl = false;
    boolean p2odgadl = false;
    boolean p3odgadl = false;

    int liczbaOdgadywana = (int) (Math.random() * 10);
        System.out.println("Mysle o liczbie z zakresu od 0 do 9...");

    while(true) {
        System.out.println("Należy wytypowac liczbe: " + liczbaOdgadywana );

        p1.zgaduj();
        p2.zgaduj();
        p3.zgaduj();

    typp1 = p1.liczba;
        System.out.println("Gracz pierwszy wytypowal liczbę: " + typp1);

    typp2 = p1.liczba;
        System.out.println("Gracz drugi wytypowal liczbę: " + typp2);

    typp3 = p1.liczba;
        System.out.println("Gracz trzeci wytypowal liczbę: " + typp3);

    if (typp1 == liczbaOdgadywana) {
        p1odgadl = true;
    }
    if (typp2 == liczbaOdgadywana) {
        p2odgadl = true;
    }
    if (typp3 == liczbaOdgadywana) {
        p3odgadl = true;
    }

    if (p1odgadl || p2odgadl || p3odgadl) {

        System.out.println("Mamy zwyciezce!");
        System.out.println("Czy gracz pierwszy wytypowal poprawnie? " + p1odgadl);
        System.out.println("Czy gracz drugi wytypowal poprawnie? " + p2odgadl);
        System.out.println("Czy gracz trzeci wytypowal poprawnie? " + p3odgadl);
        System.out.println("Koniec gry.");
        break; //gra skonczona zatem wychodzimy z petli while

    } else {
        System.out.println("Gracze beda musieli sprobowac jeszcze raz");
                }
             }
        }
    }

class Gracz {
    int liczba = 0;
    public void zgaduj() {
        liczba = (int) (Math.random() * 10);
        System.out.println("Typuję liczbę: " + liczba);
    }
}

class StarterGry {
    public static void main(String[] args) {
        Zgadywanka gra = new Zgadywanka();
        gra.rozpocznijGre();
    }
}
0

Komunikat o błędzie dotyczy uruchamiania, a nie kompilacji. Jak uruchamiasz program?
Przyłóż się do formatowania zamieszczanego kodu.

0

Problem wynika z tego ze metoda main powinna być w publicznej klasie w tym pliku, a u ciebie nie jest. Albo zrób osobny plik StarterGry z publiczną klasą o tej nazwie i tam daj ten main, albo przenieś go do klasy Zgadywanka.

0

Hej,

niestety to co napisaliście Panowie mi nie działa. W konsoli CMD wpisałem java Zgadywnka.StarterGry, ale pojawił się komunikat Error could not find or load main class Zgadywanka.StarterGry. Z kolei w Netbeansie nawet po dopisaniu public do "public class StarterGry {" to nie uruchamia programu.

Mam obecnie zainstalowana jave 1.8.0_191 wczesniej na samym poczatku zainstalowalem Jave11 i wciaz Netbeans pyta czy uruchomic w defaulcie bo nie widzi juz javy 11 gdyz ja odinstalowalem. Czy to moze byc problem?

Dodam jeszcze ze zdefiniowalem w CMD sciezke dostepu do katalogu bin i classpath do lib.

0

Prosze o przyjrzenie sie poniższemu kodowi, gdyz powinnien sie kompilowac tym bardziej ze przyklad pochodzi z ksiazki.

abstrahując od tego czy działa, czy nie - to nie jest to zbyt dobry kod i aż się prosi o zrobienie tablicy zamiast ręcznej żonglerki na 3 zmiennych ;)

1

Moja propozycja java zgadywanka.StarterGry znajdowała się w komentarzu i była skierowana do @Shalom'a więc nie zawierała pełnej informacji. Teraz wersja dla Ciebie: po otwarciu konsoli przejdź do katalogu nadrzędnego w stosunku do katalogu zgadywanka ( w tym katalogu nie ma żadnych klas) i wtedy wpisz java zgadywanka.StarterGry. Pomocne obrazki:
screenshot-20181208223754.png
screenshot-20181208223817.png

0

Dziękuję bogdans,

wlasciwie to w Netbeans to nie dzialalo, poniewaz wszystkie klasy mialem wpisane w jednym pliku ale z komenda package. Powinno to zadzialac? Bo jakos StarterGry, ktory umiescilem na samym dole nie chcial zadzialac. Postanowilem wykonac inne podejscie i odseparowalem wszystkie 3 klasy od siebie w folderze Package Netbeansa tj. katalogu projektu. I dopiero to zechcialo ruszyc. Oczywiscie inspirowalem sie Twoim zrzutem z ekranu gdzie wszystkie 3 klasy masz w jednym folderze i to mi w sposob swiadomie nieswiadomy pomoglo :)

Oto rezultat.

titlescreenshot-20181209113938.png
titlescreenshot-20181209114006.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0