带有嵌套 if/else 语句的 While 循环
Posted
技术标签:
【中文标题】带有嵌套 if/else 语句的 While 循环【英文标题】:While loop with nested if/else statements 【发布时间】:2012-03-12 04:43:03 【问题描述】:您好,我无法让我的程序正常运行。我能够清除任何语法错误,但现在我已经发布了我的输出。
首先,在第一个IF语句中,提示人同时输入姓名和部门,这样在输出的时候名字为空,只有部门有输入。我认为这与整个 IF 语句有关,因为如果我将“字符串名称”更改为 input.next,那么名称会正确提示,但 dept 和 totalHrsWkd 会合并在一起。
另外,在测试我的程序时,当我为 totalHrsWkd 输入负数时它会崩溃。它将两个打印语句全部显示在一行上,然后使 JCreator 崩溃。
感谢您对此事的任何帮助,谢谢!
public static void main(String[] args)
// TODO code application logic here
int attempt = 1, employeeID = 0;
double hoursWorked = 0.0;
double overtimeHrs = 0.0;
double totalHrsWkd = 0.0;
Scanner input = new Scanner(System.in);
while( attempt < 4 )
System.out.println( "Enter your employee ID: " );
employeeID = input.nextInt();
if( employeeID == 12345678 )
System.out.printf( "Enter your name: " );
String name = input.nextLine();
System.out.printf( "Enter your department: " );
String dept = input.nextLine();
System.out.printf( "Enter your hours worked including overtime: " );
totalHrsWkd = input.nextDouble();
while( totalHrsWkd < 0 )
System.out.printf( "Try again! Hours worked cannot be negative.");
System.out.printf( "Enter your hours worked including overtime: ");
overtimeHrs = totalHrsWkd - 40;
hoursWorked = totalHrsWkd - overtimeHrs;
if( overtimeHrs <= 0 )
else if( overtimeHrs == 0 )
else if( hoursWorked == totalHrsWkd )
else if( hoursWorked == 40 )
System.out.printf( "Name: %s\n" + "Dept: %s\n" +
"Hours Worked: %.2f\n" + "Overtime Hours: %.2f\n"
+ "Total Hours Worked: %.2f\n", name, dept,
hoursWorked, overtimeHrs, totalHrsWkd);
attempt = 3;
else
if(attempt < 3)
System.out.println( "Invalid ID! Try again." );
else
System.out.println( "Invalid ID! 0 attempts left. Exiting program!" );
++attempt;
System.exit(0);
【问题讨论】:
totalHrsWkd = input.nextDouble();
应该放在 while 循环中。否则你只是在无限循环中运行,没有任何改变totalHrsWkd
为什么选择使用Scanner
?这几乎不适合交互式程序(并会导致您在此处看到的问题)。相反,请使用BufferedReader.readLine
。
是的,这是我的 Java 1 课程的编程作业。本质上,老师为我们提供了伪代码,我们需要编写程序。到目前为止,我们只处理了 Scanner 类。在我们的书中,我什至还没有遇到过 BufferedReader.readLine。
@GregHewgill 我猜这是因为 Scanner 是你在大学里学习处理用户输入的第一件事。
这仍然不适合交互式程序。
【参考方案1】:
问题是
employeeID = input.nextInt();
only 从输入流中读取下一个数字序列。但是,为了实际输入员工 ID,您也必须按 Enter。 Enter 按键仍在等待输入,因此当您下次调用时
String name = input.nextLine();
Scanner
类变为“哦,这是一个 Enter 键,我猜用户想要一个空名称。”您甚至没有机会输入姓名,这就是为什么您的程序似乎同时提出了两个问题(姓名和部门)。
如果您希望继续使用Scanner
类,我建议您避免使用nextInt()
等方法,而始终使用nextLine()
。当然,您必须使用类似的方法将用户输入的数字转换为 Java 整数
parseInt()
.
【讨论】:
那么我需要先将其转换为字符串吗?如:String ID = System.out.println("请输入您的员工ID:"); intemployeeID = Int.parseInt(ID);如果是这样,我会收到不兼容的类型错误以及找不到符号变量 Int。 不完全是,您正在尝试将println()
的返回值分配给String
。尝试:String employeeIDStr = input.nextLine(); int employeeID = Integer.parseInt(employeeIDStr);
还要注意使用Integer
类而不是Int
。
终于!真的很抱歉用初学者的问题打扰你,但我基本上只能自生自灭,因为她在课堂上花时间在讲幻灯片。我现在必须从头开始编写一个程序,所以我想首先完成这个程序以帮助作为模板。再次感谢!【参考方案2】:
attempt = 3; // Seems suspicious
attempt++; // I think it's more appropriate in loops of this kind than ++attempt
【讨论】:
【参考方案3】:totalHrsWkd
小于0时你的程序不工作的原因是因为下面的代码创建了一个无限循环。
while ( totalHrsWkd < 0 )
System.out.printf( "Try again! Hours worked cannot be negative.");
System.out.printf( "Enter your hours worked including overtime: ");
您还应该阅读在此循环中工作的小时数。
【讨论】:
现在我明白了上面的意思,缺少 totalHrsWkd = input.nextDouble();我需要把它放在我的第二个提示下。这解决了我的无限循环问题,但仍在解决其他问题,谢谢!以上是关于带有嵌套 if/else 语句的 While 循环的主要内容,如果未能解决你的问题,请参考以下文章