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

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;
        */
    }
}

关键修改说明

  1. 新增HotPepper类:

    • 用类属性存储peperType、growthRate等数据,用面向对象封装替代多维数组。
    • 重写toString()方法,自定义打印格式,确保调用对象的toString()能输出清晰可读的内容。
  2. 修正setUp方法逻辑:

    • 移除原代码中的死循环(for(int i = answer; i==answer;i++)),这个循环会无限执行。
    • 根据选中的索引创建对应HotPepper对象,放入数组返回;如果需要返回所有辣椒数据,可使用注释中的循环创建数组的代码。
    • 修复变量作用域问题:原peperDataTemp声明在循环内部,外部无法访问,现在调整为方法内全局变量或直接创建返回。
  3. 完善main方法:

    • 增加输入合法性判断,避免用户输入的索引超出数组范围导致异常。
    • 使用Arrays.toString(peperData)打印数组,该方法会遍历数组中的每个对象并调用其toString()方法,最终输出所有对象的字符串表示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:35:40