似乎是一个基本问题,但Google和SO都帮助我解决了这个问题。 我用纯粹的无聊制作了一个程序,允许用户输入一串文本,并使用游戏Minecraft的颜色代码编辑所述文本的颜色。我还添加了一个高级功能,允许用户对给定字符串中的每个字母进行着色 - 这就是出现问题的地方。在程序的高级部分结束时,我向用户提示一个菜单,询问他们想要做什么 - 返回程序的主要部分,重新启动高级部分,或完全退出程序。选项1和3都按预期工作,但是当您尝试重新启动程序的高级部分时,它会一遍又一遍地重复菜单,直到您选择其他选项。我已经重写了用户的选择如何被多次评估,以及重写了很多其他部分的程序,希望它只是一些逻辑错误,但无济于事。这是他们显示的菜单:
System.out.println("\n======= DevTest TERMINATED=======\n");
System.out.println("What would you like to do?");
System.out.println("1: Return to main program");
System.out.println("2: Run DevTest again");
System.out.println("3: Exit program");
int userOption = input.nextInt();
switch(userOption){
case 1:
System.out.println();
Start.main(null);
break;
case 2:
DevTests.rainbowTest();
break;
case 3:
System.exit(0);
default:
System.exit(0);
break;
}
当用户输入" 2"并按Enter键,程序运行高级程序的第一行(提示用户输入字符串),然后立即再次运行此菜单。我现在已经看了好几个小时了,还没有找到任何解决方案。我在本文末尾添加了整个高级程序,所以你们可以看到所有发生的事情,在你问之前,不,这个程序的主要部分不会干扰这是任何方式。
任何建议/意见都将不胜感激。
注意:我意识到某些代码还没有完成 - 请注意这仍然在进行中,并且在此问题得到解决之前,将会持续相当长的一段时间。 :P
import java.util.Scanner;
public class DevTests {
static Scanner input = new Scanner(System.in);
public static void rainbowTest(){
System.out.println();
System.out.println("Enter a string:");
String userString = input.nextLine();
int stringLength = userString.length();
System.out.println();
String rainbowString = "";
for(int i = 1; i <= stringLength; i++){
System.out.println("Enter colour #" + i + ":");
System.out.println("Black");
System.out.println("White");
System.out.println("Blue");
System.out.println("Dark Blue");
System.out.println("Green");
System.out.println("Dark Green");
System.out.println("Aqua");
System.out.println("Dark Aqua");
System.out.println("Red");
System.out.println("Dark Red");
System.out.println("Purple");
System.out.println("Dark Purple");
System.out.println("Gray");
System.out.println("Dark Gray");
System.out.println("Yellow");
System.out.println("Gold");
String userColour2 = input.nextLine();
System.out.println();
switch (userColour2){
case "black":
userColour2 = "§0";
break;
case "white":
userColour2 = "§f";
break;
case "blue":
userColour2 = "§9";
break;
case "dark blue":
userColour2 = "§1";
break;
case "green":
userColour2 = "§a";
break;
case "dark green":
userColour2 = "§2";
break;
case "aqua":
userColour2 = "§b";
break;
case "dark aqua":
userColour2 = "§3";
break;
case "red":
userColour2 = "§c";
break;
case "dark red":
userColour2 = "§4";
break;
case "purple":
userColour2 = "§d";
break;
case "dark purple":
userColour2 = "§5";
break;
case "gray":
userColour2 = "§7";
break;
case "dark gray":
userColour2 = "§8";
break;
case "yellow":
userColour2 = "§e";
break;
case "gold":
userColour2 = "§6";
break;
default:
System.out.println("Please select a colour. \n");
break;
}
rainbowString += userColour2 + userString.charAt(i - 1);
}
System.out.println(rainbowString);
System.out.println("\n======= DevTest TERMINATED=======\n");
System.out.println("What would you like to do?");
System.out.println("1: Return to main program");
System.out.println("2: Run DevTest again");
System.out.println("3: Exit program");
int userOption = input.nextInt();
switch(userOption){
case 1:
System.out.println();
Start.main(null);
break;
case 2:
DevTests.rainbowTest();
break;
case 3:
System.exit(0);
default:
System.exit(0);
break;
}
}
}
答案 0 :(得分:1)
当您使用int userOption = input.nextInt()
时,它实际上不会读取行尾符号,因此它会被下一个String userString = input.nextLine()
调用读取。因此,您将获得空userString
,因此您跳过for
循环并再次转到最后一个菜单。要解决此问题:
int userOption = input.nextInt();
input.nextLine();
答案 1 :(得分:0)
你正在调用函数rainbowTest()递归 在用户输入2的情况下。
在调用函数rainbowTest()之后 正在打印meu;)