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;
}
}