1. Rozdzielić kod na logiczne klasy z krótszymi metodami, bo takiego czegoś nie da się czytać, tym bardziej analizować. Chyba, że komuś zapłacisz za poświęcony czas.
!ZMIENNE NIE pisze się z dużej litery e.g String Countries, Cities etc.
2.nie trzymać wszystkiego w metodach statycznych, utworzyć odpowiednie klasy opakowujące - niekoniecznie statyczne pola, ale agregujące zmienne za pośrednictwem konstruktora np. a sam obiekt będzie dostępny ( cykl życia - stan ) w trakcie trwania gry, rundy etc.
3. Wydzielić to do osobnej klasy j/w wspominałem,> skorzystać może ze wzorców np. fasady, chociaż bardziej może pełnomocnika. https://pl.wikipedia.org/wiki/Pe%C5%82nomocnik_(wzorzec_projektowy)
// Wybór pomiędzy własnym słowem a gotowymi kategoriami
System.out.println();
System.out.print("\n----------------------------------------");
System.out.print("\nDostępne akcje: ");
System.out.print("\n1. Losowa gotowa kategoria");
System.out.print("\n2. Własny wyraz (min. dwie osoby, dla lepszej zabawy)");
System.out.print("\n----------------------------------------");
System.out.print("\nPodaj swój wybór (1 / 2): ");
int choice = scanner.nextInt();
if (choice == 1){
randomCategory();
} else if (choice == 2){
ownCategory();
} else {
System.out.print("\nBłędnie wprowadzone dane.");
}
scanner.close();
4. nie trzymać stałych 'zmiennych' wewnątrz metody, to nie jest miejsce na to
Random random = new Random();
// Dostępne kategorie
String Countries [] = {"francja", "hiszpania", "holandia", "polska", "norwegia", "niemcy"};
String Cities [] = {"warszawa", "moskwa", "paryż", "berlin", "lisbona", "madryt"};
String musicGenre [] = {"jazz", "rock", "rege", "rap", "hiphop", "techno"};
String IT [] = {"klawiatura", "monitor", "myszka", "słuchawki", "touchpad", "procesor"};
String programingLanguages [] = {"java", "c++", "c#", "javascript", "python", "html"};
String Names [] = {"mariusz", "marek", "krystian", "ania", "martyna", "paweł"};
//losowanie kategorii
int randomCategory = random.nextInt(5);
int index;
String randomWord = "";
String subject = "";
switch (randomCategory){
case 0: index = random.nextInt(Countries.length); randomWord = Countries[index]; break;
case 1: index = random.nextInt(Cities.length); randomWord = Cities[index]; break;
case 2: index = random.nextInt(musicGenre.length); randomWord = musicGenre[index]; break;
case 3: index = random.nextInt(IT.length); randomWord = IT[index]; break;
case 4: index = random.nextInt(programingLanguages.length); randomWord = programingLanguages[index]; break;
case 5: index = random.nextInt(Names.length); randomWord = Names[index]; break;
}
switch (randomCategory){
case 0: subject = "Państwa"; break;
case 1: subject = "Miasta"; break;
case 2: subject = "Gatunki muzyczne"; break;
case 3: subject = "Akcesorja IT"; break;
case 4: subject = "Języki programowania"; break;
case 5: subject = "Imiona "; break;
}
skorzystać z klasy i utworzyć pola/.stałe, skorzystać może ze wzroca strategii do wybrania odpowiedniej ścieżki postępowania
Tego jest masa i kod jest widać ;świeżo pisany. Nie wiem co masz na myśli 'ulepszyć' ale w najmniejszym stopniu nie jest wyraźny i czytelny.
Po ogarnięciu podstaw w programowaniu szczególnie nacisk NA OBIEKTOWE programowanie, wtedy można myśleć o optymalizacji, trzymania rzeczy niezmiennych etc. https://javastart.pl/baza-wiedzy/programowanie-obiektowe
Dodatkowo instrukcja switch - powinna posiadać CASE -> DEFAULTOWY według dobrej praktyki.
Wszelkie 'pętle for' w których wykonujesz ;monolityczne i lub konkretnie te same operacje w celu pozyskania tej samej informacji, polecam skorzystać z nauczenia się czym są STREAMY w javie i jakie mają możliwości jeśłi chodzi o funkcje WYŻSZEGO RZĘDU https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html skorzystać z API i dostepnych metod.