Java合并不同类型数组并支持toString()输出(禁用多维数组)
解决方案
首先你需要一个HotPepper实体类来封装辣椒的各项数据,并且重写toString()方法,这样才能通过对象的toString()打印出有意义的内容。然后修正setUp方法的逻辑,正确创建HotPepper对象数组返回。
完整代码实现
import java.util.Scanner; import java.util.Arrays; // 定义HotPepper类封装数据 class HotPepper { private String type; private int growthRate; private int plantMaturityRate; private int fruitMaturityRate; // 构造方法,初始化所有属性 public HotPepper(String type, int growthRate, int plantMaturityRate, int fruitMaturityRate) { this.type = type; this.growthRate = growthRate; this.plantMaturityRate = plantMaturityRate; this.fruitMaturityRate = fruitMaturityRate; } // 重写toString方法,自定义打印格式 @Override public String toString() { return "HotPepper{" + "type='" + type + '\'' + ", growthRate=" + growthRate + ", plantMaturityRate=" + plantMaturityRate + ", fruitMaturityRate=" + fruitMaturityRate + '}'; } } public class HotPepperRunner { public static void main(String[] args) { int answer; String[] peperType = {"Jalapeno","Serrano","Habanero","Poblano","Pimiento"};//Names System.out.println("Number of Peppers to simulate growth: 5"); for(int i=0; i<5;i++) { System.out.println(i +" "+ peperType[i]); } System.out.print("Select the pepper number you want to simulate growth: "); Scanner keyboard = new Scanner(System.in); answer = keyboard.nextInt(); // 处理输入合法性,防止数组越界 if (answer < 0 || answer >= peperType.length) { System.out.println("Invalid pepper number!"); return; } HotPepper[] peperData = setUp(answer, peperType); // 打印数组中所有HotPepper对象,自动调用每个对象的toString System.out.println(Arrays.toString(peperData)); // 如果只需要打印选中的单个对象,可直接调用: // System.out.println(peperData[0].toString()); } public static HotPepper[] setUp(int answer, String[] peperType) { int[] growthRate = {1,2,4,6,8};//1-8 int[] plantMaturityRate = {12,14,16,18,20};//10-20 int[] fruitMaturityRate = {1,2,3,2,1};//1-3 // 根据选中的索引创建单个HotPepper对象并放入数组返回 HotPepper selectedPepper = new HotPepper( peperType[answer], growthRate[answer], plantMaturityRate[answer], fruitMaturityRate[answer] ); return new HotPepper[]{selectedPepper}; // 若需要返回所有辣椒的完整数组,替换上面代码为: /* HotPepper[] peperDataTemp = new HotPepper[peperType.length]; for (int i = 0; i < peperType.length; i++) { peperDataTemp[i] = new HotPepper( peperType[i], growthRate[i], plantMaturityRate[i], fruitMaturityRate[i] ); } return peperDataTemp; */ } }
关键修改说明
新增
HotPepper类:- 用类属性存储
peperType、growthRate等数据,用面向对象封装替代多维数组。 - 重写
toString()方法,自定义打印格式,确保调用对象的toString()能输出清晰可读的内容。
- 用类属性存储
修正
setUp方法逻辑:- 移除原代码中的死循环(
for(int i = answer; i==answer;i++)),这个循环会无限执行。 - 根据选中的索引创建对应
HotPepper对象,放入数组返回;如果需要返回所有辣椒数据,可使用注释中的循环创建数组的代码。 - 修复变量作用域问题:原
peperDataTemp声明在循环内部,外部无法访问,现在调整为方法内全局变量或直接创建返回。
- 移除原代码中的死循环(
完善main方法:
- 增加输入合法性判断,避免用户输入的索引超出数组范围导致异常。
- 使用
Arrays.toString(peperData)打印数组,该方法会遍历数组中的每个对象并调用其toString()方法,最终输出所有对象的字符串表示。
内容的提问来源于stack exchange,提问作者nikkipat
相关产品推荐
相关产品推荐

