![](/img/trans.png)
[英]System.out.println printing twice in each iteration of while loop
[英]System.out.println() printing twice during while-loop
我创建了一个while循环来为程序创建菜单,它将一直循环直到用户在控制台中键入“ Quit”为止。 我的问题是,每当我在控制台中输入“ Transfer”时,if语句就会完美运行,但是当它返回循环的开头时, System.out.println();
消息打印两次而不是一次。 其他任何选项都不会发生这种情况。
码:
int x = 0;
while(x != 1) {
System.out.println("To transfer funds, please type 'Transfer'\n" //Typical message
+ "To list recent transactions, please type 'Recent'\n"
+ "To display account details, please type 'Details'\n"
+ "To quit the application, please type 'Quit'");
String Option1 = "Transfer"; //Variables
String Option2 = "Recent";
String Option3 = "Details";
String Option4 = "Quit";
String Menu = ConsoleInput.nextLine();
if (Menu.equals(Option1)) {
//Statements
} else if(Menu.equals(Option2)){
//Statements
} else if(Menu.equals(Option3)){
//Statements
} else if(Menu.equals(Option4)){
//End statement
x++;
}
}
编辑:你们当中有些人在最后一个else语句中评论x的增量,并说应将其放在else语句之外。 在那里是因为当用户在控制台中输入'Quit'时,它将退出循环,如果将其置于else语句之外,则用户将无法访问其他选项。
编辑2(解决方案):我终于解决了问题。 原来这是if语句中的扫描程序语句。 我应该向所有人展示完整的代码,但是我认为那只是if-else语句本身。
需要注意的几件事:
Menu.equalsIgnoreCase(Option1)
等。 x
的增量。 除非键入End,否则您永远不会递增x。 我想你真的想要更多类似的东西
private static String[] options = {"Transfer","Recent","Details","Quit"};
private static int C_Transfer = 0;
private static int C_Recent = 1;
private static int C_Details = 2;
private static int C_Quit = 3;
private static int[] optionCase = {C_Transfer, C_Recent, C_Details,C_Quit);
private String menu;
private String message = "To transfer funds, please type 'Transfer'\n" //Typical message
+ "To list recent transactions, please type 'Recent'\n"
+ "To display account details, please type 'Details'\n"
+ "To quit the application, please type 'Quit'"
System.out.println(message);
menu = ConsoleInput.nextLine()
while (!menu.equalsIgnoreCase(options[C_Quit]) {
int case = -1;
for (int i=0, i < options.length; i++) {
if (menu.equalsEgnoreCase(options[i]) {
case = i;
break;
}
switch (case)
case C_Transfer: {
break;
}
case C_Transfer: {
break;
}
case C_Transfer: {
break;
}
case C_Transfer: {
break;
}
default: {
System.out.println(message);
}
Menu = ConsoleInput.nextLine();
}
}
这仅在“转移”选项上发生吗? 您可以显示转移选项的代码吗? 可能有指令在那儿打印消息,所以当循环重新开始时,您得到了两次打印消息。
添加:根据您的“转移码”。 看来问题与java.util.Scanner的滥用有关,但我自己不确定该实用工具类。 但是以下修改后的代码对我有用:
public static void main(String[] args){
java.util.Scanner ConsoleInput=new java.util.Scanner(System.in);
String Menu;
String message="To transfer funds, please type 'Transfer'\n" //Typical message
+ "To list recent transactions, please type 'Recent'\n"
+ "To display account details, please type 'Details'\n"
+ "To quit the application, please type 'Quit'";
System.out.println(message);
String Option1 = "Transfer"; //Variables
String Option2 = "Recent";
String Option3 = "Details";
String Option4 = "Quit";
while(!((Menu=ConsoleInput.nextLine()).equalsIgnoreCase(Option4))){
if(Menu.equalsIgnoreCase(Option1)){
System.out.println("You have selected transfer");
System.out.println("How much would you like to transfer?");
float deduction;
float total = 2500;
deduction = ConsoleInput.nextFloat();
total = total - deduction;
System.out.println("£" + total + " left in account. Transaction recorded.");
//Fileoutput.println(sf.format(date) + " - £" + deduction + " taken from account. £" + total + " left in account.\n");
System.out.println(message);
}else if(Menu.equalsIgnoreCase(Option2)){
System.out.println("here is your balance...blah, blah, bbla\n");
System.out.println(message);
}else if(Menu.equalsIgnoreCase(Option3)){
System.out.println("here is the details...blah, blah, bbla\n");
System.out.println(message);
}
}
System.out.println("Thanks");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.