Java 中数组的抽象维数

2023-11-26

在Java中,不同维度的数组有不同的类型。所以一个方法需要int[]作为参数不能采用int[][] or 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));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中数组的抽象维数 的相关文章

  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • 我们可以在不使用 main 方法、静态变量和静态方法的情况下在控制台上打印 java 消息吗?

    public class Test param args 1st way public static void main String args TODO Auto generated method stub System out prin
  • 初始堆大小无效。无法创建Java虚拟机

    我遇到了下一个问题 我尝试通过startup bat手动启动Tomcat 但似乎没有显示任何结果 然后我尝试运行shutdown bat 控制台显示如下 D apache tomcat 7 0 35 bin gt startup bat U
  • MediaPlayer.create() 始终返回 null

    我以前用过媒体播放器 从来没有遇到过这个问题 每当我尝试使用 MediaPlayer create 时 该方法都会给我 null 并且我无法播放声音 我有什么遗漏的吗 public class Game extends Activity p
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • Matlab中反转一位逻辑位

    是否存在更好的方法来反转 X 的元素 gt gt X dec2bin 10 X 1010 我这样做了 x i num2str 1 str2num x i 如果我理解正确的话 你想将一位设置为 1 使用bitset bitset x bitN
  • spring mvc 跟踪引用页面

    在基于注释的弹簧控制器中 如果用户正在url com first page并点击一个链接或提交一份表格指出url com second page 如何制作second page知道url of first page所以这样second pa
  • 如何在Java中打印保留2位小数的浮点数?

    我可以用System out print 您可以使用printf http java sun com j2se 1 5 0 docs api java io PrintStream html printf 28java lang Strin
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • 反应式 Spring Webflux REST 控制器内部重定向

    我正在为 spring 反应项目创建简单的控制器服务器 在设置重定向到另一个位置时 我在调用时发现错误http localhost 8080 There was an unexpected error type Internal Serve
  • Perl 中令人困惑的文件句柄

    一直在使用以下脚本 但仍然无法理解两种不同 类型 的文件句柄形式背后的含义 任何见解将不胜感激 usr bin perl use warnings use strict open FH example txt or die while
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • JFrame Glasspane 也优于 JDialog,但不应该

    我有一个带有 Glasspane 的 JFrame 未装饰 该框架打开一个 JDialog 也未装饰 也有一个 glassPane 并隐藏自身 setVisible false Glasspanes 通过 setGlassPane 设置 对
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • bufferedinputstream 中标记读取限制有什么用

    我是Java流的新手 我想读取特定的文件内容 然后需要从头开始读取 我创建了一个 BufferedInputStream 但我对 BufferedInputStream mark int markLimit 的文档感到困惑 文档说 publ
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • 如何使 JScrollPane 与嵌套 JPanel 一起正常工作?

    我正在使用 NetBeans 在 Java 中构建 Swing 应用程序 但我遇到布局问题 我的主框架包含一个JScrollPane其中包含一个JPanel called contentPanel其中又包含一个JPanel called l
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • 构造函数参数和属性一起出现在 bean 定义中

  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • 在 Sympy print 上强制执行自定义排序

    SymPy跟踪我对符号表达式所做的所有操作做得非常出色 但是在打印乳胶输出结果时 我想强制执行该术语的某种顺序 这只是为了约定 不幸的是 该约定不是按符号名称的字母顺序排列的 合理地sympy does import sympy as sp
  • 如何使用 xarray 选择年间期间?

    背景 我有一个包含 30 年 每日 数据的 netCDF 我想选择特定月份的跨年数据 例如每年五月至三月期间 我可以使用单独的选择函数来完成此操作 但我希望有一种简单的方法可以使用 xarray 来完成此操作 我安装的版本是0 9 6 如果
  • 如何使用 Sympy 导出矩阵元素

    给定矩阵和向量的乘积 A v 对于形状为 m n 的 A 和暗淡 n 的 v 其中 m 和 n 是符号 我需要计算关于矩阵元素的导数 我还没有找到使用合适向量的方法 所以我从 2 开始MatrixSymbol n m symbols n m
  • 在 intellij 13 中存储有关方法参数的信息(可通过反射使用)

    有谁知道 Intellij Idea 13 或更早版本 但我怀疑它是否可用 中 Eclipse 4 4 的存储有关方法参数的信息 可通过反射使用 编译器属性的等效项 编辑 这个链接展示了如何使用maven来做到这一点 但我仍然想知道它是如何
  • Haskell 中的列表输出格式?

    我在尝试在 Haskell 中格式化我自己类型的列表的输出时遇到问题 我想要这样的东西 Make Model Years this is a list lt this would be the headers if you like Ite
  • 运行时 Opencv HighGui 错误 - “HIGHGUI 错误:V4L/V4L2:VIDIOC_S_CROP”。 Opencv交叉编译。主机=64位Ubuntu 12.04。目标=ARM-Cortex-A9

    我是 OpenCV 的初学者 并尽力在嵌入式平台上运行一个简单的应用程序 我交叉编译了 OpenCV 2 4 4 并根据相机和 GUI 支持的需要构建了WITH GTK ON WITH UNICAP ON WITH V4L ON 以下示例代
  • 使用 mvc-mini-profiler 降低 EF 分析性能

    当我使用以下函数创建上下文时 分析器显示比标准 EF 版本 4 上下文创建方法增加了大约 300 毫秒 是否有另一种方法可以实现更好的性能 它违背了性能分析的目的 public static Models MyEntities GetCon
  • 抽屉式导航速度慢且视图复杂

    在我的应用程序中 我使用导航抽屉 它工作得很好 但是 如果要显示的片段包含很多 TextView ImageView 和 Layout 当我单击该项目时 视图会出现故障 我会改善这种滞后 我的 Galaxy Nexus 和 Nexus 4
  • 我可以创建一个 List> 吗?

    我有课 public class Setting
  • 如何通过 Axios 解压缩 Gzip Json 响应

    我正在使用 Axios 从 Web 服务器获取 JSON 响应 响应采用压缩的 gzip 格式 如何解压响应并获取 Json 数据 axios 有一个解压缩选项 无需手动解压 const data await axios get url r
  • axios transformRequest - 如何更改 JSON 有效负载

    我在用axios在我的 Express API 中 我想在将有效负载发送到另一个 API 之前对其进行转换 axios 正好有这个功能transformRequest 但这就是我遇到问题的地方 我的代码如下所示 const instance
  • 如何首先返回具有特定值的行?

    我希望我的查询首先返回表中某列包含特定值的行 然后按字母顺序返回其余行 如果我有一个类似这个例子的表 Table Users id name city 1 George Seattle 2 Sam Miami 3 John New York
  • docx 表格单元格中的文本居中

    所以我开始使用pythondocx图书馆 现在 我创建一个包含多行 只有 2 列的表 如下所示 现在 我希望这些单元格中的文本水平居中 我怎样才能做到这一点 我已经搜索过docxAPI文档 但我只看到有关对齐段落的信息 有一段代码可以通过在
  • 如何在树莓派上安装支持JPEG的PIL?

    我尝试安装PIL在我的树莓派上读取 JPEG 文件 然而 它并不能开箱即用 当我运行以下命令时 sudo pip install pil 我在尝试打开图像时收到以下错误 decoder jpeg not available 在尝试安装所有需
  • Class.getResource 中奇怪的区分大小写错误?

    我正在使用以下代码加载图像资源 它在我的开发环境 netbeans 中工作正常 但一旦从桌面运行就抛出异常 new ImageIcon Images class getResource images highlighter24 gif 我追
  • 如何在 Visual C++ 编译期间输出编译时数值常量?

    Visual C 有 pragma message that 将字符串输出到编译器输出中 现在我有一个工厂 template
  • 将非可选 Any 与 nil 进行比较总是 false?

    我正在遍历字典 String Any 寻找nils 所以我可以将它们替换为NSNull用于 JSON 写入 我的预编译器警告告诉我比较Any to a nil永远是假的 但我知道它至少包含两个从未找到的零 有没有办法检查是否Any是零吗 可
  • 在 angularjs 中使用 ng-repeat 访问嵌套数组

    JSFiddle 我无法访问嵌套集合中的数组图像 为什么我看不到任何输出 该模型 var obj id 7 date 1 Jan images 507f42c682882 507e24b47ffdb 507e2aeca02d5 507e2b
  • 如何在我的反应测试中模拟状态和数据的值

    我正在为我的反应页面编写测试 但我的页面在其状态下使用 isLoading 加载页面时呈现 正在加载 加载但没有数据 来自获取请求 呈现 未找到数据 并且加载时呈现 未找到数据 数据 来自获取请求 加载欢迎页面 我想编写一个测试来检查在以下
  • Java 中数组的抽象维数

    在Java中 不同维度的数组有不同的类型 所以一个方法需要int 作为参数不能采用int or int 我有很多代码 其中创建的方法非常相似 但针对数组的维数 有没有一种方法可以处理任意维度的数组 从而抽象出这个常见的功能 如果您愿意放弃类