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

pętla while działa w nieskończoność

Object Storage Arubacloud
0 głosów
260 wizyt
pytanie zadane 31 maja 2019 w Java przez Łukasz880525 Początkujący (250 p.)
edycja 31 maja 2019 przez Łukasz880525

Witam. Program " z klawiatury " pobiera łańcuch znaków a następnie skraca go ( generuje losowy skrót). Wszystko zapisywane jest do " bazy\pamieci". Jezeli wprowadzimy łańcuch znaków który już wystepuje w bazie to program wypisuje go wraz z wygenerowanym wcześniej skrótem. Skróty nie mogą sie powtarzać.  Problem polega na tym że gdy nie ma możliwości wygenerowania nowego skrótu to pętla while wykonuje się w nieskończoność. Jak rozwiązać taki problem ? tzn. jak prawidłowo zakończyć działanie programu ? ewentualnie jak wypisać komunikat informujący o tym że coś jest nie tak z działaniem programu ?

 

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;

public class SkracaczLinkow
{

    public static Map<String, String> bazaGlowna = new HashMap<>();
    static String Url;
    static String skrot;

    public static void main(String[] args)
    {  
        do
        {
            pobierzUrl();
            
            if(!Url.contains("o"))
            {
                bazaUrli();
                wypiszBaze();
            }
        }
        while (!Url.contains("o"));
    }

    public static void pobierzUrl()
    {
        System.out.println("podaj Url:  ");
        Scanner scanner = new Scanner(System.in);
        Url = scanner.nextLine();
    }

    public static String bazaUrli()
    {
        for (String entry : bazaGlowna.keySet())
        {
            if (Url.equals(entry))
            {
                return entry;
            }
        }

        bazaGlowna.put(Url, losujSkrut());

        return Url;
    }

    public static void wypiszBaze()
    {
        System.out.println(Url + " " + bazaGlowna.get(Url));
        System.out.println(bazaGlowna);
    }

    public static String losujSkrut()
    {
            Random random = new Random();
            char tab[] = { 'a', 'b', 'c', 'd' };
            skrot = String.valueOf(tab[random.nextInt(tab.length)]);
            int i=0;

                while (bazaGlowna.containsValue(skrot))
                {

                    // W TYM MIEJSCU MAM PROBLEM
                    
                    // -  jak nie ma możliwości wygenerowania nowego skrótu
                    // to pętla while wykonuje się w nieskończoność.
                    

                        skrot = String.valueOf(tab[random.nextInt(tab.length)]);

                    
                    // problem rozwiązałem w ten sposób:
                        
                    i ++;
        
 // jezeli po 10 razie nie wylosuje innego skrotu to zakonczy program

                    if(i>10) 
                    {
                        System.exit(0);
                    }
                    
                    
                    // czy istnieje lepsze rozwiązanie ????
                    
                }

            return skrot;
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 31 maja 2019 przez Arkadiusz Fajdek Dyskutant (9,450 p.)
wybrane 1 czerwca 2019 przez Łukasz880525
 
Najlepsza

Nie wdając się bardzo w całą logikę - nie kombinujesz źle. Istnieją przypadki w których jest możliwe wykonanie tylko X prób jakiegoś zadania, jeśli się nie uda, najczęściej jest rzucany wyjątek z opisem.

W Tym ifie możesz zrobić 

throw new RuntimeException("Przekroczono maksymalną ilość prób wygenerowania Skrótu");

 

Podobne pytania

0 głosów
3 odpowiedzi 250 wizyt
pytanie zadane 24 listopada 2018 w Java przez Dudek Początkujący (370 p.)
0 głosów
1 odpowiedź 339 wizyt
pytanie zadane 20 października 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
2 odpowiedzi 589 wizyt
pytanie zadane 18 lutego 2017 w Java przez Wolfy Nowicjusz (180 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...