Java如何访问类数组变量及String.repeat负数参数报错解决
问题根因
报错明确指向String.repeat()方法传入了负数参数(你当前报错的参数值为-24),核心问题来自两处逻辑错误:
- 原有代码仅计算了单个
emp1对象的名字长度作为静态变量size的取值,切换为数组后没有遍历所有员工对象计算最长名字长度,Employee.getSize()返回值小于实际员工名字长度,导致计算空格重复数时得到负数。 - 原有
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
相关产品推荐
相关产品推荐

