带有嵌套 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 循环的主要内容,如果未能解决你的问题,请参考以下文章

Java Review (流程控制)

Java Review (流程控制)

Python流程控制语句

条件语句和while循环

Java流程控制语句

Java流程控制语句