当前位置:  开发笔记 > 编程语言 > 正文

在运行时设置数组的等级

如何解决《在运行时设置数组的等级》经验,为你挑选了1个好方法。

我想知道最简单的方法是实现一个在运行时指定排名的数组.

我正在处理的示例存储了格点的布尔值数组,我希望用户能够选择模型在运行时使用的空间维数.

我查看了Array.newInstance()方法:

dimensionOfSpace = userInputValue;  // this value comes from GUI or whatever
int latticeLength = 5;  // square lattice for simplicity

int[] dimensions = new int[dimensionOfSpace];
for(int i = 0; i < l.length; i++) l[i] = length; 
Object lattice = Array.newInstance(boolean.class, dimensions);

但是以任何方式访问这些值似乎需要非常慢的方法,例如递归使用Array.get,直到返回的值不再是数组,即使用isArray().

我在这里错过了一个明显的解决方案 我希望能够以类似于foo [i] [j] [k]的方式访问这些值.



1> MAK..:

看起来你正在寻找的是某种方式来声明一个数组在运行时有多少维度.我不知道如何使用多维ArrayList或任何多维结构来完成此操作,您必须在编译时指定维度.

我看到的唯一答案是使用一个包含在类中的简单线性数组,该类将多维坐标转换为其在底层数组中的位置.这基本上是C语言如何通过使用一个连续的内存块来存储多维数组.

代码看起来像这样:

import java.util.*;

class MultiArray{
    private int[] dimensions;
    private Object[] array;

    public MultiArray(int ... dimensions){
        this.dimensions=dimensions;
        //Utils.product returns the product of the ints in an array
        array=new Object[Utils.product(dimensions)];
    }

    public void set(T value, int ... coords){
        int pos=computePos(coords); 
        array[pos]=value;
    }

    public T get(int ... coords){
        int pos=computePos(coords);
        return (T)(array[pos]);
    }

    private int computePos(int[] coords){
        int pos=0;
        int factor=1;
        for (int i=0;i m=new MultiArray(new int[]{5,4,3}); 
        Random r=new Random();

        for(int i=0;i<5;i++)
            for(int j=0;j<4;j++)
                for(int k=0;k<3;k++)
                    m.set(r.nextInt(),i,j,k);
        for(int i=0;i<5;i++){
            for(int j=0;j<4;j++){
                for(int k=0;k<3;k++)
                    System.out.print(m.get(i,j,k)+" ");     
                System.out.println("");
            }
            System.out.println("\n");
        }
    }
}

class Utils{
    public static int product(int...a){
        int ret=1;
        for (int x:a) ret*=x;
        return ret;
    } 
}

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有