Java并行数组程序求助:输入数据后窗口内容堆叠
解决Java三数组工资计算程序的内容堆叠问题
我猜你说的窗口内容堆叠,应该是控制台输出的时候内容挤在一起、排版混乱的情况吧?看你给出的代码片段,应该是还没写完输入和输出的方法,而且大概率是输出时没做格式化,或者输入时没处理好换行符导致的问题。下面我给你补全并修复这个程序,完全用数组实现,满足你不能用对象的要求:
import java.util.Scanner; public class ThreeArrays { public static void main(String args[]) { // 初始化三个数组,最多存储5个员工的数据 float[] payRate = new float[5]; float[] hours = new float[5]; String[] name = new String[5]; // 获取员工数据 getPayData(name, hours, payRate); // 显示计算后的工资信息,解决堆叠问题 displayPayroll(name, hours, payRate); } // 输入员工数据的方法 private static void getPayData(String[] names, float[] hoursWorked, float[] payRates) { Scanner scanner = new Scanner(System.in); for (int i = 0; i < names.length; i++) { System.out.printf("请输入第%d位员工的姓名:", i + 1); names[i] = scanner.nextLine(); System.out.printf("请输入%s的工时:", names[i]); hoursWorked[i] = scanner.nextFloat(); System.out.printf("请输入%s的时薪:", names[i]); payRates[i] = scanner.nextFloat(); // 读取换行符,避免下一次nextLine()读取空字符串 scanner.nextLine(); System.out.println(); // 输入完一个员工后换行,分隔内容 } scanner.close(); } // 显示工资信息的方法,格式化输出避免堆叠 private static void displayPayroll(String[] names, float[] hoursWorked, float[] payRates) { System.out.println("=====================员工工资表====================="); // 打印表头,用固定宽度对齐 System.out.printf("%-15s %-10s %-10s %-15s\n", "姓名", "工时", "时薪", "总工资"); System.out.println("---------------------------------------------------"); for (int i = 0; i < names.length; i++) { float grossPay = hoursWorked[i] * payRates[i]; // 格式化每一行内容,固定宽度避免堆叠 System.out.printf("%-15s %-10.2f %-10.2f %-15.2f\n", names[i], hoursWorked[i], payRates[i], grossPay); } System.out.println("==================================================="); } }
为什么之前会出现堆叠问题?我给你拆解下:
- 输入环节的坑:当你用
nextFloat()读取工时和时薪后,控制台的换行符会留在输入缓冲区里,下一次调用nextLine()读取姓名时,会直接把这个换行符当成输入内容,导致姓名为空,后续输出时就会和其他数据挤在一起; - 输出环节的坑:如果只是用普通的
System.out.println()拼接内容,不同长度的姓名、数字会没有对齐,看起来就像内容堆叠在一起。
修复的核心点:
- 输入完浮点型数据后,用
scanner.nextLine()清空缓冲区里的换行符; - 用
System.out.printf()做格式化输出,通过%-15s(左对齐,占15个字符宽度)、%-10.2f(左对齐,保留两位小数,占10个字符宽度)这样的格式控制符,让每一列内容整齐对齐; - 在输入每个员工数据后添加换行,让输入过程的界面更清爽。
内容的提问来源于stack exchange,提问作者Jeff Furman
相关产品推荐
相关产品推荐

