• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z pętlą w konstruktorze boolean

VPS Starter Arubacloud
0 głosów
469 wizyt
pytanie zadane 17 października 2017 w Java przez Morthan Początkujący (410 p.)

Witam, piszę funkcję, która sprawdza czy wprowadzony ciąg znaków zawiera litery czy cyfry. Program jednak działa tylko po części. Przedstawię to na przykładzie. Program sprawdza jedynie pierwszy znak ciągu np. gdy podam pierwszą cyfrę, to zwraca true, a gdy wpiszę literę zwraca false. Problem występuje jednak gdy podam np. 123f12, to program traktuje to jako cyfrę. Wydaje mi się, że jest coś nie tak z pętlą. IDE nie wywala żadnego błędu. Co do programu to dane pobiera on z JTextFielda, ale to nieistotne, gdyż jestem pewien, że pobrałem dane dobrze, a typy danych też są prawidłowo zdefiniowane wcześniej, czego nie pokazałem

public boolean czyIloscKmToLiczba() {
        iloscKmWStringu = tilosckm.getText();
        dlugoscWyrazenia = iloscKmWStringu.length();
        for (i = 0; i < dlugoscWyrazenia; i++)
            if (Character.isDigit(iloscKmWStringu.charAt(i)) == true)
            {
                return true;
            }
            else {
                return false;
            }

            return false;
    }

 

komentarz 17 października 2017 przez Aisekai Nałogowiec (42,190 p.)
Zwróć true, po wyjściu z fora. Jeżeli gdzieś nie będzie cyfrą, zwróć false.
komentarz 17 października 2017 przez Morthan Początkujący (410 p.)
Nie bardzo rozumiem. Możesz mi to wyjaśnić na przykładzie?

1 odpowiedź

+2 głosów
odpowiedź 17 października 2017 przez cz3ran Stary wyjadacz (13,380 p.)

Twój problem jest taki, że zawsze sprawdzisz tylko pierwszy znak tekstu, dlatego że wszędzie masz returny, co jednoznacznie kończy funkcje i zwraca wynik. Poniżej moje rozwiązanie (troche to przebudowałe, ale powinieneś wyczaić o co chodzi)

 

public class Helper {

    static public boolean isNumber(String number) {
        for (int i = 0; i < number.length(); i++) {
            if (Character.isDigit(number.charAt(i)) != true) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args)
    {

        boolean isNumber = Helper.isNumber("5a55");
        if (isNumber) {
            System.out.println("To jest cyfra");
        } else {
            System.out.println("To nie jest cyfra");
        }
    }
}

Jak bym miał na szybko przebudować Twoje rozwiązanie to zrobił bym to tak:


public boolean czyIloscKmToLiczba() {
        String iloscKmWStringu = tilosckm.getText();
        String dlugoscWyrazenia = iloscKmWStringu.length();
        for (int i = 0; i < dlugoscWyrazenia; i++) {
            if (Character.isDigit(iloscKmWStringu.charAt(i)) != true) {
                return false;
            }
        }
        return true;
    }

Podsumowując - return zawsze kończy działanie funkcji, więc w moim przykładzie sprawdzasz dla każdej litery czy jest czymś innym od cyfry - jeżeli jest to od razu zwracasz false, jeżeli nie znajdzie żadnego innego znaku niż cyfra, wtedy poza pętlą for zwracasz true.

komentarz 17 października 2017 przez Morthan Początkujący (410 p.)

Dzięki, działa. Ale ciekawi mnie jedno, a mianowicie dlaczego nie działa to w drugą stronę, czyli 

for (i = 0; i < dlugoscWyrazenia; i++)
        {
            if (Character.isDigit(iloscKmWStringu.charAt(i)) == true)
                return true;
        }
            {
                return false;
            }

 

2
komentarz 17 października 2017 przez Aisekai Nałogowiec (42,190 p.)
Bo funkcja kończy swoje działanie, wtedy kiedy coś zwróci.

Zwracasz true, wtedy gdy pierwszy znak będzie cyfrą, lub false gdy nie będzie i od razu po zwróceniu funkcja kończy swoje działanie.

Podobne pytania

0 głosów
2 odpowiedzi 182 wizyt
0 głosów
1 odpowiedź 216 wizyt
pytanie zadane 1 sierpnia 2017 w Java przez LukasHardwares Początkujący (490 p.)
0 głosów
1 odpowiedź 377 wizyt
pytanie zadane 1 sierpnia 2017 w Java przez LukasHardwares Początkujący (490 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...