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

Java如何访问类数组变量及String.repeat负数参数报错解决

问题根因

报错明确指向String.repeat()方法传入了负数参数(你当前报错的参数值为-24),核心问题来自两处逻辑错误:

  1. 原有代码仅计算了单个emp1对象的名字长度作为静态变量size的取值,切换为数组后没有遍历所有员工对象计算最长名字长度,Employee.getSize()返回值小于实际员工名字长度,导致计算空格重复数时得到负数。
  2. 原有empIDs、printEmps方法写死只能接收4个员工参数,适配数组场景时容易出现参数不匹配的问题。

修复方案

1. 先遍历数组计算全局最大名字长度

// 初始化最大长度为0
int maxNameLength = 0;
for (Employee emp : emps) {
    int currentNameLength = emp.getName().toString().length();
    if (currentNameLength > maxNameLength) {
        maxNameLength = currentNameLength;
    }
}
// 给静态size赋值正确的最大长度
Employee.setSize(maxNameLength);

2. 改造empIDs方法适配数组入参

public static void empIDs(Employee[] emps){
    for (int i = 0; i < emps.length; i++) {
        // 按数组顺序设置ID,从1开始
        emps[i].setId(i + 1); 
    }
}
// 调用方法时直接传入emps数组即可:empIDs(emps);

3. 改造printEmps方法适配数组入参,同时加负数校验

public static void printEmps(Employee[] emps){
    // Math.max兜底避免repeat入参为负数,4是"Name"本身的字符长度,可按需调整
    int spaceRepeatCount = Math.max(0, Employee.getSize() - 4);
    System.out.println("\nName" + " ".repeat(spaceRepeatCount) + "ID\tWage\tHours\tGross\tStart Date");
    // 遍历打印所有员工
    for (Employee emp : emps) {
        System.out.println(emp);
    }
}
// 调用方法时直接传入emps数组即可:printEmps(emps);

4. 兜底校验

检查Employee类的toString方法中所有调用String.repeat()的逻辑,所有重复计数参数都用Math.max(0, 计算值)包裹,彻底避免负数参数报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 10:51:11