【问题标题】:Java do/while loop offsetting first two questionsJava do/while 循环抵消前两个问题
【发布时间】:2013-09-25 01:10:01
【问题描述】:

我正在我的 Java 编程课程中编写一个程序。该程序是一个简单的 do/while 循环,它使用扫描程序类和一个布尔值启动读取来询问一些问题。当循环第一次迭代时,它可以正常工作,但是当它第二次迭代时,它会同时显示第一个问题和第二个问题,并且只允许我回答第二个问题。我希望这很清楚。任何人有任何见解?代码:

      /*
      * Programmed By: Cristopher Ontiveros
      * Date: 9/19/13
 * Description: Compute weekly salary and witholding for employees
 */
package project.one.cristopher.ontiveros;

import java.util.Scanner;
public class ProjectOneCristopherOntiveros {

     static Scanner sc = new Scanner(System.in);
     public static void main(String[] args) {
     String fName, lName;
     double rate=0, wPay=0, withholding=0;
     int option = 0;
     boolean badval = true;
         System.out.println("Welcome to the Pay Calculator");


     do{
        System.out.println("Enter employee first name: ");
        fName = sc.nextLine();
        System.out.println("Enter employee last name: ");
        lName = sc.nextLine();
        System.out.println("Enter employee hourly rate: ");
        rate = sc.nextDouble();
        wPay = (rate * 40);
        withholding = (wPay * .20);
        System.out.println("Employee " + fName + " " + lName + "\nHourly Rate: " + rate + "\nWeekly Pay: " + wPay + "\nWithholding Amount: " + withholding);


         System.out.println("Would you like to enter another employee? (1 = yes, 2 = no)");
     option = sc.nextInt();
     sc.nextLine()
     if(option == 1){
         badval = true;

     } else {
         badval = false;

     }
     }while(badval);


  }

}

【问题讨论】:

  • 我知道这与您的问题无关,但看在上帝的份上,请开始更好地命名您的课程:p
  • @redFIVE 班级被命名为 我可以看到教授喜欢这样,所以他可以在打印出来时知道谁的作业是谁的。
  • 将项目的根文件夹命名为类似名称,而不是类名。评论块可以为添加名称、日期等内容创造奇迹

标签: java loops boolean


【解决方案1】:

当您执行sc.nextDouble(); 时,nextDouble 仅读取double 并跳过指示新行的\n(用户按回车键),因此它将被下一个nextLine() 读取!

您应该通过添加另一个 sc.nextLine() 来“吞下”这一新行。

【讨论】:

  • 更好的是,永远不要使用nextDouble()nextInt()。只需使用 nextLine() 和 parseInt()。对于简单的解析,我通常更喜欢自己做,而不是依赖其他东西。 nextInt() 在不阅读文档的情况下并不完全清楚它的作用
  • @Cruncher 是的,我们不应该使用 nextDouble()nextInt() 方法,直到我们将输入放在一行中(用空格分隔)并且在使用它们之后我们必须调用 nextLine()
【解决方案2】:

问题出在sc.nextDouble() 方法上。它将输入的下一个标记读取为双精度并跳过剩余的。因此,当您使用next()nextInt()nextDouble() 等时,请使用nextLine() 方法方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多