Это всегда хорошая идея, чтобы разделить вещи, вместо того, чтобы делать вложенные циклы. Вот простой способ разбить программу на 3 метода, каждый из которых имеет дело с выбором.
Выбор героя: предложите оба варианта и сделайте петлю, пока не получите правильный ответ. Затем верните ответ
private static int queryHero() {
Scanner scan = new Scanner(System.in);
int hero;
while (true) {
System.out.println("Choose your hero: 1 for Warrior, 2 for Mage");
hero = scan.nextInt();
if(hero == 1 || hero == 2) {
break;
} else {
System.out.println(hero + " is not a valid choice");
}
}
return hero;
}
Выбор варианта путешествия: Предлагайте варианты в зависимости от выбранного героя и зацикливайтесь, пока не получите правильный ответ. Затем верните ответ
private static int queryTravelOptionForHero(int hero) {
Scanner scan = new Scanner(System.in);
int travelOption;
while (true) {
if (hero == 1) {
System.out.println("Choose your travel option: 1 for Horse");
travelOption = scan.nextInt();
if (travelOption == 1) {
break;
} else {
System.out.println(travelOption + " is not a valid choice");
}
} else if (hero == 2) {
System.out.println("Choose your travel option: 1 for Horse; 2 for Teleportation");
travelOption = scan.nextInt();
if (travelOption == 1 || travelOption == 2) {
break;
} else {
System.out.println(travelOption + " is not a valid choice");
}
}
}
return travelOption;
}
Выбор оружия: предлагайте варианты в зависимости от выбранного героя и петли, пока не получите правильный ответ. Затем верните ответ
private static int queryWeaponForHero(int hero) {
Scanner scan = new Scanner(System.in);
int weapon;
while (true) {
if(hero == 1) {
System.out.println("Choose your weapon: 1 for Sword; 2 for Staff");
weapon = scan.nextInt();
if (weapon == 1 || weapon == 2) {
break;
} else {
System.out.println(weapon + " is not a valid choice");
}
} else if(hero == 2) {
System.out.println("Choose your weapon: 2 for Staff");
weapon = scan.nextInt();
if(weapon == 2) {
break;
}else {
System.out.println(weapon + " is not a valid choice");
}
}
}
return weapon;
}
Тогда в своей главной:
int hero = queryHero();
int travelOption = queryTravelOptionForHero(hero);
int weapon = queryWeaponForHero(hero);
System.out.println("hero: " + hero);
System.out.println("travelOption: " + travelOption);
System.out.println("weapon: " + weapon);
Примечание: я не уверен, знаете ли вы о них, но есть способы сделать этот код лучше, используя перечисления и списки