如何将可变参数数组转换为二维数组?代码实现遇阻求助
解决可变参数转二维数组的实现问题
我看你在尝试把Item...可变参数转换成float[3][4]二维数组的时候遇到了困难,代码里的register方法只写了一半就卡壳了对吧?先把你给出的代码完整贴出来方便分析:
public class GridCombinedItem extends Item { private Item[] subitems; float register[][] = new float[3][4]; public GridCombinedItem(String name, float price, Item... subitems) { super(name); this.price = price; this.subitems = subitems; } public Item[] getsubitems() { return subitems.clone(); } public float getprice() { return this.price; } public void register(Item... subitems) { int count = 0; for (int i = 0; i < 3; i++...
咱们先明确核心需求:你要把传入的可变参数(本质就是Item[]数组)里的信息,填充到固定大小的float[3][4]二维数组register中。这里的关键是要确定每个Item的哪些float类型属性对应数组的列,以及如何处理数组边界避免越界问题。
给你一个完整的实现示例,你可以根据自己的实际业务逻辑调整:
public void register(Item... subitems) { // 先校验传入的子项数量是否匹配register的行数(3行),避免数组越界 if (subitems == null || subitems.length != 3) { throw new IllegalArgumentException("需要传入3个非空的Item对象,对应register的3行数据"); } for (int i = 0; i < 3; i++) { Item currentItem = subitems[i]; // 这里要根据你的实际需求,把Item的属性填充到每一行的4列中 // 示例:假设我们用Item的价格、以及三个自定义的float值填充 register[i][0] = currentItem.getprice(); // 如果你有其他属性方法,比如getWeight()、getDiscount()、getTax(),可以替换下面的内容 register[i][1] = 0.0f; // 示例值,替换成实际属性 register[i][2] = 0.0f; // 示例值,替换成实际属性 register[i][3] = 0.0f; // 示例值,替换成实际属性 } }
再给你几个关键的注意点:
Item... subitems本质就是Item[]数组,所以完全可以像操作普通数组一样遍历、访问元素- 一定要处理边界情况:比如传入的子项数量不等于3、子项为null的情况,避免出现
ArrayIndexOutOfBoundsException或者NullPointerException - 二维数组的每一列对应Item的什么属性,这个需要你根据业务逻辑明确,示例里的占位值要替换成实际的属性获取代码
内容的提问来源于stack exchange,提问作者Havva Tecer
相关产品推荐
相关产品推荐

