多维数组的实现 (java 表示)

public class MultiDimArray {
    private static int MAX_ARRAY_DIM = 8;//数组最大维数
    int[] base;//数组元素基地址
    int dim;//数组维数
    int[] bounds; //数组维界基地址
    int[] constants;//数组映像函数 常量基址

    //初始化n维数组
    public void initArray(int dim,int... args) {
        print("dim:"+dim);
        if(dim < 1 || dim > MAX_ARRAY_DIM) {
            System.out.println("dim is illegal");
            return;
        }
        this.dim = dim;
        this.bounds = new int[dim];
        int elemtotal = 1;//求出数组元素的总数
        if(args.length != dim) {
            System.out.println("args is illegal");
            return;
        }
        for(int i = 0; i < dim; i++) {
            this.bounds[i] = args[i];
            elemtotal*= this.bounds[i];
        }
        this.base = new int[elemtotal];
        //求映像函数常数Ci
        this.constants = new int[dim];
        this.constants[dim -1] = 1;
        for(int i = dim -2; i >= 0; i--) {
            this.constants[i] = this.bounds[i+1]*this.constants[i+1];
        }
        for(int i = 0; i < this.constants.length; i++) {
            print("constants["+i+"]="+constants[i]);
        }

    }


    //销毁n维数组
    public void destroyArray() {
        this.base = null;
        this.bounds = null;
        this.constants = null;
        this.dim = 0;
    }
    //求元素在多维数组的相对地址off
    public int locate(int ...index ) {
        int off = 0;
        for(int i = 0; i < dim; i++) {
            int ind = index[i];
            off+=constants[i]*ind;
        }
        print("locate:"+off);
        return off;
    }
    //获取n维数组某个元素的值
    public int value(int ... index) {
        int result = locate(index);
        if(result <= 0) {
            return result;
        }

        return this.base[result];
    }
    //给n维数组 某个下标元素赋值
    public void assign(int value,int ... index) {
        int off = locate(index);
        if(off <= 0) {
            return ;
        }
        this.base[off] = value;
    }
    private void print(String str) {
        System.out.println(str);
    }
}


package com.gac;

public class Test {
    public static void  main(String[] args) {
        MultiDimArray dimArray = new MultiDimArray();
        dimArray.initArray(3, 4,2,3);
        dimArray.locate(1,2,1);
        dimArray.assign(15, 1,1,2);
        print("value:"+dimArray.value(1,2,2));

    }
    public static void print(String str) {
        System.out.println(str);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值