You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()拼接内容,不同长度的姓名、数字会没有对齐,看起来就像内容堆叠在一起。

修复的核心点:

  1. 输入完浮点型数据后,用scanner.nextLine()清空缓冲区里的换行符;
  2. 用System.out.printf()做格式化输出,通过%-15s(左对齐,占15个字符宽度)、%-10.2f(左对齐,保留两位小数,占10个字符宽度)这样的格式控制符,让每一列内容整齐对齐;
  3. 在输入每个员工数据后添加换行,让输入过程的界面更清爽。

内容的提问来源于stack exchange,提问作者Jeff Furman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:28:01