Pętla nieskończona - prośba o pomoc

Pętla nieskończona - prośba o pomoc
KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0

Witam.

Mógłby mi ktoś pomóc (napisać chociażby krótki algorytm) jak powinna wyglądać funkcja zawierająca pętle nieskończoną, z której wyjście następuje tylko po osiągnięciu przez zmienną długość rzędu 17 znaków (treść zmiennej je wczytywana z pliku, natomiast wcześniej pobierana z maila -- te funkcje mi działają bez problemu, tylko nie wiem jak zaimplementować je w pętle, aby wszystko działało :( )

Pomożecie ??

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Co to znaczy, że zmienna osiąga długość?

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0

Chodzi o to, aby program cały czas sprawdzał maile i po napotkaniu maila z określoną liczbą znaków temacie pobierał treść tego tematu i kończył pętle, tylko jeśli ilość znaków w temacie będzie wynosić 17 (zwraca "od razu"), lub 13 (przed zwróceniem dodaje 4 spacje na koniec zmiennej)...

Gjorni
  • Rejestracja: dni
  • Ostatnio: dni
0
Kremius napisał(a):

Witam.

Mógłby mi ktoś pomóc (napisać chociażby krótki algorytm) jak powinna wyglądać funkcja zawierająca pętle nieskończoną, z której wyjście następuje tylko po osiągnięciu przez zmienną długość rzędu 17 znaków (treść zmiennej je wczytywana z pliku, natomiast wcześniej pobierana z maila -- te funkcje mi działają bez problemu, tylko nie wiem jak zaimplementować je w pętle, aby wszystko działało :( )

Pomożecie ??

Pobierz dane z pliku, iteruj po tematach i zachowuj się adekwatnie do ich długości:

Kopiuj
void checkEmails(File file) {
    String[] emailSubjects = getSubjectsFromFile(file);
    checkSubjectLength : for (String subject : emailSubjects) {
        switch (subject.length()) {
            case 13:
                // Add 4 spaces to the subject.
                break checkSubjectLength;
            case 17:
                // Do something.
                break checkSubjectLength;
            default:
                break;
        }
    }
}
KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0

A w funkcji zwracającej jakąś wartość String mogę użyć return w środku kodu, czy nie ??

Pytam bo krzyczy, że return na końcu (null) jest nieosiągalny mimo to kod kompiluje się i działa prawidłowo. Jak więc "zignorować" ten "błąd" ??

O1
  • Rejestracja: dni
  • Ostatnio: dni
1

Pokaż kod. Informacja o tym, że kod jest nieosiągalny to jest tylko informacja a nie żaden błąd. Po prostu obłożyłeś wszystko takimi warunkami, że program na pewno nie dojdzie do tego miejsca.

Jaca777
  • Rejestracja: dni
  • Ostatnio: dni
0

Informacja o tym, że kod jest nieosiągalny to jest tylko informacja a nie żaden błąd.

W Javie jest to błąd, który uniemożliwia kompilację. Nie uda Ci się skompilować takiego kodu:

Kopiuj
 
    int foo(int i) {
        switch (i) {
            case 2:
                return 3;
            default:
                return 8;
        }
        return 2;
    }
KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0
Kopiuj
for(;;)
        {
            try {
                Properties properties = new Properties();
                properties.put("mail.pop3.host", host);
                Session emailSession = Session.getDefaultInstance(properties);
    
                POP3Store emailStore = (POP3Store) emailSession.getStore("pop3");
                emailStore.connect(login, pass);
                
                Folder emailFolder = emailStore.getFolder("INBOX");
                emailFolder.open(Folder.READ_WRITE);
                
                Message[] messages = emailFolder.getMessages();
                for (Message message : messages) {
                    return message.getSubject();
                }
                
                emailFolder.close(false);
                emailStore.close();
            
            } catch (NoSuchProviderException e) {
            } catch (MessagingException e) {
            }
        }
        
        return null;

Po kompilacji wygląda następująco:
pętla idzie do momentu, kiedy natrafi na maila. Kiedy już pobierze temat wychodzi (return) z pętli nieskończonej. Co ciekawe wszystko działa, bo czy mail będzie od razu po uruchomieniu pętli czy po godzinie i tak wszystko działa. Natomiast kompilator cały czas krzyczy o nieosiągalnym return null; można to inaczej zrobić ?

Ważne jest dla mnie aby było to w jakiś pętli (czas kiedy mail znajdzie się na skrzynce jest nieznany tak naprawdę) ??

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0
Kremius napisał(a):
Kopiuj
for(;;)
        {
            try {
                Properties properties = new Properties();
                properties.put("mail.pop3.host", host);
                Session emailSession = Session.getDefaultInstance(properties);
    
                POP3Store emailStore = (POP3Store) emailSession.getStore("pop3");
                emailStore.connect(login, pass);
                
                Folder emailFolder = emailStore.getFolder("INBOX");
                emailFolder.open(Folder.READ_WRITE);
                
                Message[] messages = emailFolder.getMessages();
                for (Message message : messages) {
                    return message.getSubject();
                }
                
                emailFolder.close(false);
                emailStore.close();
            
            } catch (NoSuchProviderException e) {
            } catch (MessagingException e) {
            }
        }
        
        return null;

Po kompilacji wygląda następująco:
pętla idzie do momentu, kiedy natrafi na maila. Kiedy już pobierze temat wychodzi (return) z pętli nieskończonej. Co ciekawe wszystko działa, bo czy mail będzie od razu po uruchomieniu pętli czy po godzinie i tak wszystko działa. Natomiast kompilator cały czas krzyczy o nieosiągalnym return null; można to inaczej zrobić ?

Ważne jest dla mnie aby było to w jakiś pętli (czas kiedy mail znajdzie się na skrzynce jest nieznany tak naprawdę) ??

Mała poprawka: pierwszy return dałem w warunku:

Kopiuj
 
if(message.getSubject().length() == 13 || message.getSubject().length() == 17)
{
     return message.getSubject();
}

drugi wywaliłem i wszystko działa normalnie i kompilator błędu \ ostrzeżenia nie zgłasza. Znaczy, że jest OK ?

Gjorni
  • Rejestracja: dni
  • Ostatnio: dni
0

Miałeś Unreachable statement dla return null ponieważ miałeś już jedno słowo kluczowe return w bloku try. Tak, powiedzmy, że teraz jest OK.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0
Gjorni napisał(a):

Miałeś Unreachable statement dla return null ponieważ miałeś już jedno słowo kluczowe return w bloku try. Tak, powiedzmy, że teraz jest OK.

Magiczne słowo "powiedzmy", czyli jednak jest coś co powinienem poprawić ;) ??

wojciechmaciejewski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 560
0

na grzyba to w pętli for? zrób while z wrunkiem logicznym. po to został on stworzony

Gjorni
  • Rejestracja: dni
  • Ostatnio: dni
0
wojciechmaciejewski napisał(a):

na grzyba to w pętli for? zrób while z wrunkiem logicznym. po to został on stworzony

While zostal stworzony do petli nieskonczonych? o.O Bo ja myslalem, ze istnieja sobie dwa rodzaje petli, tj. for i while i to od programisty zalezy, ktorej uzyje. Szczegolnie, ze np. w przypadkufor(;;) i while(true) generowany jest nawet identyczny kod bajtowy, wiec... No ale przeciez "petla while zostala do tego stworzona" :D

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0

Teraz mam ciekawszy problem. Nie mogę się zalogować do pop :(
Mimo iż nie zmieniłem hasła i loginu (tym bardziej ;) ) cały czas mam błąd: failed to connect

Gjorni
  • Rejestracja: dni
  • Ostatnio: dni
0

Co to jest za blad? Czy odnosi sie on do linii emailStore.connect(login, pass);? Zapodaj wiecej informacji (w tym tresc bledu).

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0

Dotyczy tej linii kodu, ale więcej info o błędzie nie ma :(

Gjorni
  • Rejestracja: dni
  • Ostatnio: dni
0

A gdzie pojawia się ten błąd? Pokaż jego pełną treść.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.