当前位置: 首页 > 面试题库 >

用Java抽象数组的维数

楚勇
2023-03-14
问题内容

在Java中,不同维度的数组具有不同的类型。因此,采用int[]作为参数的方法不能采用int[][]int[][][]。我有很多代码,在这些代码中,我创建了非常相似的方法,但是要保证数组的维数。有没有一种方法可以处理任意维数的数组,从而抽象出这种通用功能?


问题答案:

如果您愿意放弃类型安全性,则可以稍作递归(这里没有惊喜,对吗?)和反思。

想法是按照递归的方式编写方法,直到数组只有一个维为止。进入单维度级别后,请执行工作;否则,请递归调用自己,并在必要时汇总来自先前级别的发现。

这是一个快速演示:

import java.util.*;
import java.lang.*;
import java.lang.reflect.Array;

class Main {
    public static int sumArray(Object array) {
            Class type = array.getClass();
            if (!type.isArray()) {
                    throw new IllegalArgumentException("array");
            }
            Class ct = type.getComponentType();
            int res = 0;
            int len = Array.getLength(array);
            if (ct.isArray()) {
                    for (int i = 0 ; i != len ; i++) {
                            res += sumArray(Array.get(array, i));
                    }
            } else {
                    for (int i = 0 ; i != len ; i++) {
                            res += Array.getInt(array, i);
                    }
            }
            return res;
    }
    public static void main (String[] args) throws java.lang.Exception
    {
            int[] a = new int[] {1,2,3,4,5,6,7,8,9,10};
            int aa[][] = new int[][] {{1,2},{3,4},{5,6}};
            int aaa[][][] = new int[][][]{{{1,2},{3,4},{5,6}},{{7,8},{9,10},{11,12}}};
            System.out.println(sumArray(a));
            System.out.println(sumArray(aa));
            System.out.println(sumArray(aaa));
    }
}


 类似资料:
  • 问题内容: 为什么我不能实例化一个抽象类,但要使一个抽象类数组组成? 问题答案: 实例化意味着创建一个类的实例。在上述情况下,您刚刚声明了一个类型为size 的类型(只是引用,没有其他内容)。这就是为什么它不会引发任何错误。 当您尝试做时,您会得到错误 但是做一个抽象类的数组? 稍后,您可以执行以下操作 这是非常允许的,这就是为什么您首先要参加抽象类的原因。

  • 问题内容: 例如: 一个) 与 b) 最初以为我会为了简化而选择a)。 我知道Java不会像C那样在内存中线性存储数组,但是这对我的程序有什么影响? 问题答案: 通常,在搜索答案时,最好的办法是查看如何将选择编译到JVM字节码中: 这被翻译成: 因此,如您所见,JVM已经知道我们在谈论多维数组。 进一步说明: 这被转换为(跳过循环): 因此,如您所见,多维数组在VM内部进行处理,无用指令不会产生开

  • 所以我有了这个类,我想要一个接受int的方法,并创建一个这个大小的新数组。如果我声明 这将创建一个大小为10的数组。 我试过做

  • 问题内容: 我是一名 Java 开发人员,对Object Orientation概念有很好的了解( 或者也许我这样认为 )。现在我正在学习设计模式(从头开始设计模式)。我一直在阅读有关OOPS概念抽象的文章,以简要地理解它,而阅读更多有关它的内容,使我比以前更加困惑。 据我了解,抽象是指隐藏程序的内部细节,同时将接口暴露给其他程序员,而无需担心内部细节。但是我不明白 抽象类如何适应这种抽象概念,其

  • 问题内容: 我需要有一个n维字段,其中n基于构造函数的输入。但是我什至不确定这是否可行。是吗? 问题答案: 快速的解决方案:你可以用非通用近似它的的…要深,因为你需要。但是,使用快速可能会很尴尬。 另一种需要更多工作的选择可能是使用基础平面数组表示形式来实现您自己的类型,在其中您内部计算索引,并为访问器方法提供vararg参数。我不确定它是否完全可行,但可能值得一试… 粗略的示例(未经测试,没有溢

  • 除了一维数组和二维数组外, Java 中还支持更多维的数组,如三维数组、四维数组和五维数组等,它们都属于多维数组。经过前面一维,二维的练习后不难发现,想要提高数组的维数,只要在声明数组时将索引与中括号再加一组即可,所以三维数组的声明为 int score[][][],而四维数组为 int score[][][][],以此类推。 通常也将二维数组看作是多维数组。本文以三维数组为例来介绍多维数组。 三