这是该计划的问题:
编写一个Java应用程序,该程序将确定每个员工的总薪酬(使用'while','for'或'do / while'循环来输入多个员工)。公司支付"直接时间"在每个员工工作的前40个小时内付费并且花费一半时间"所有工作时间超过40小时。您的程序应该要求用户输入工作小时数和每小时费率。 将所有输出放在一个窗口中。将您的总薪酬格式化为小数点后两位。
这就是我编码的内容:
/*
* This is a program that determines the gross pay for employees of a
* company that pays "straight time" for the first 40 hours and "time
* and a half" for all hours excess. The program asks the user to
* input the hours worked and the rate per hour.
*/
// Imports.
import java.text.DecimalFormat;
import javax.swing.*;
public class SalaryCalculator
{
public static void main( String[] args )
{
// Ask for number of employees.
String num = JOptionPane.showInputDialog( "How many employees?" );
int employees = Integer.parseInt( num );
for (int counter = 0; counter != employees; counter++)
{
// Ask for employee info.
String name = JOptionPane.showInputDialog ( "Enter employee name:" );
String rate = JOptionPane.showInputDialog( "Enter standard rate per hour in $:" );
String hours = JOptionPane.showInputDialog( "Enter number of hours worked:" );
// Convert string to double.
double money = Double.parseDouble( rate );
double time = Double.parseDouble( hours );
// Create number format and text area.
DecimalFormat noDecimal = new DecimalFormat( "0.00" );
JTextArea outputArea = new JTextArea( 30, 30 );
// Format text area.
outputArea.append( "Name \t Rate \t Hours \t Total \n\n" );
// Calculations and all.
if ( time <= 40 )
{
outputArea.append( name + "\t" + "$"
+ money + "\t"
+ hours + "\t" + "$"
+ noDecimal.format( money * time ) + "\n" );
}
else if( time > 40 )
{
outputArea.append( name + "\t" + "$"
+ money + "\t"
+ hours + "\t" + "$"
+ noDecimal.format( ( money * 1.5 ) * time ) + "\n" );
}
// Output.
JOptionPane.showConfirmDialog( null,
outputArea, "Gross Pay", JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE );
}
}
}
执行代码时,会询问员工人数。比方说我输入2。然后程序继续询问员工姓名,每小时工资和工作小时数。当我输入所有这些时,它会在我想要的窗口中很好地显示输出。 Picture: Data set 1. 之后,它再次询问员工姓名,工资和工时(因为我说有2名员工)。这就是我的问题所在。当我输入第二组数据时,它将替换结果窗口中的第一组数据。 Picture: Data set 2 replaces set 1. 我希望它显示在同一窗口的第一行下面的新行中,而不是先省略。
这是我第一次发布堆栈溢出。任何帮助将不胜感激!
答案 0 :(得分:3)
您在循环的每次迭代中创建 new JTextArea。不要那样做。在循环之前创建JTextArea ,并使用相同的。