0
// Week 3 Checkpoint1: Payroll Program Part 2
// Due May 04, 2012
// Created by: Kennith Adkins

import java.util.Scanner;

public class Assignment1
 {
    public static void main ( String[] args )
    {
        Scanner input = new Scanner(System.in);

        // Variables
        String employeeName = null;
        int hours;
        double rate;
        double pay;

        while ( employeeName != "stop")
        {
        // Request information from user
        System.out.print ( "Employee Name: ");
        employeeName = input.nextLine();
        System.out.print ( "Hourly Rate: ");
        rate = input.nextDouble();
        System.out.print ( "Number of Hours worked this week: ");
        hours = input.nextInt();

        // Calculate pay
        pay = rate * hours;

        // Display information
        System.out.printf ("%s will get paid $%.2f this week.\n", employeeName, pay);


        }
    }
}

当我运行程序时,它运行良好。当它进入循环并重复时,Employee Name: 和 Hourly Rate 似乎聚集在一起。另外,在输入 stop 作为员工姓名后,我如何让它立即停止?

4

1 回答 1

0

由于这似乎是一个家庭作业问题,我将为您指明学习方向。

因此,对于员工姓名问题,我会将您重定向到如何比较 Java 中的字符串?

问题在于,当您重新进入循环并调用scanner(input).nextLine 时,它​​实际上会读取它尚未看到的输入文本。因此,一种选择是切换到其他东西来舔 BufferedReader 或将扫描仪减速向下移动到循环中。

更多研究

我在扫描仪类上工作不多,看到这个后我有点困惑。问题实际上是 nextInt 和 nextDouble。他们不要求退货包机,因此当您下次拨打下一行时,它会拾取剩余的退货字符。

因此,我在重新输入时重置扫描仪的选项在这种特定情况下有效,但您应该使用 2 个扫描仪或离开扫描仪。

Scanner txtinput = new Scanner(System.in);
Scanner numberinput = new Scanner(System.in);
于 2012-05-05T03:35:18.743 回答