Czemu metoda która zwraca wartość wyświetla tekst?

0

Mam problem z metodami . Ogólnie dzielą się na takie które coś wyświetlają (void) i na takie które zwracają wartość .
Niestety mój porządek zrozumienia zaburzył poniższy przykład.


class potwor{

    boolean strasz(int x){
        System.out.println(" czemu");
        return true;
    }

Myslałem ze w przypadku takiej metody zwrócenie ciągu znaków jest możliwe tylko poprzez zwrócenie go przy poleceniu "return" a tu taki kwiatek . Czy ktoś może mi wyłożyć działanie tej metody . Jakie znaczenie ma czy zwracamy false czy true skoro działanie metody się nie zmienia ? Ten int jako argument jest tylko bo jest ?

0

Metoda niezwracająca wartości (czyli oznaczona void) nie musi "wyświetlać".

Jeśli chodzi o ten przykład, to dobrze byłoby, byś podał jakiś kontekst – np. skąd on jest.

0

ogólnie kod wyglada tak i przy okazji nie rozumiem jeszcze czemu nie mogę zapisać w tablicy typu potwór zmiennej referencyjnej typu Wampir i Smok skoro obydwie są klasami potomnymi klasy potwor .

public class PotworTester{

    public static void main(String[]args) {
    potwor[]ptw=new potwor[3];
    ptw[0]=new Wampir();               //tu mam błąd "Type mismatch: cannot convert from Wampir to potworJava)"
    ptw[1]=new Smok();                   //tu również 
    ptw[2]=new potwor();

    for (int x=0;x<3;x++){
    ptw[x].strasz(x);

    }
}
}
class potwor{
    boolean strasz (int d){
        System.out.println("ałłłłłłłuuuuuuuu");
        return true;
    }
    class Wampir extends potwor {
        boolean strasz(int x){
            System.out.println("gryze");
            return false;
        }

    }
    class Smok extends potwor{
        boolean strasz(int stopien){
            System.out.println("zionę ogniem");
            return true;
        }
    }
}
0

Takich "kwiatków" jest sporo, np., metodą add:
https://docs.oracle.com/javas[...]a/util/LinkedList.html#add-E-

0

Już wiem czemu nie mogłem, muszą być w osobnym pliku ...

0

Już wiem czemu nie mogłem, muszą być w osobnym pliku ...

Niekoniecznie! Utworzyłeś dwie klasy wewnętrzne dla klasy potwor, zamiast każdą klasę osobno. Chyba, że to pomyłka z Twojej strony i chciałeś stworzyć ich definicje w osobnych klasach. Jeżeli nie, Twój kod w funkcji głównej programu powinien wtedy wyglądać raczej tak:

potwor potworObj = new potwor();
potwor[] potworArr = { potworObj.new Wampir(), potworObj.new Smok(), new potwor() };

Wracając do pierwotnego pytania wątku: możesz wykonywać pewne operacje, nim funkcja (o ile nie jest voidem) zwróci jakąś wartość / referencję. Nie ma narzuconego ukierunkowania na wykonywania operacji potrzebnych do zwrotu wartości lub referencji.

0

Dobrze byłoby zrobić klasę Wampir jako statyczną, wtedy możesz zrobić new potwor.Wampir(); Nie ma powodów, żeby wywalać tak malutkie klasy do oddzielnych plików

0

to była pomyłka z mojej strony nie zauważyłem ze one sa w klasie potwór . Kurcze nie zdawałem sobie sprawy ze System.out.println bedzie w stanie coś wyswietlać jezeli jest częścią metody nie bedącej typu void .

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