Java创建N维数组类(版本0.1)

执行代码:

public static void main(String[] args) throws Exception {
        
        jp.initData(new DebugInfoJava());               
        //创建三维数组
        NDimensionalArray_  nda = new NDimensionalArray_(2,3,5);
        //给三维数组赋值
        for(int i= 0; i<2;i++) {
            for(int j= 0; j < 3; j++) {
                for(int k =0; k < 5; k++){
                    nda.setValue("i=" + i + ",j=" + j + ",k=" + k, i,j,k);
                }
            }
        }
        
        jp.p("以下是三维数据元素值");
        //读取三维数组的值
        for(int i= 0; i< 2; i++) {
            for(int j= 0; j < 3; j++) {
                for(int k =0; k < 5; k++){
                    jp.p(nda.getValue(i,j,k).toString());
                }
            }
        }        
        
    }

结果:

 

/***************************************************************************  
 * 文件名		: NDimensionalArray.java   
 * 包名			:JavaPlatform   
 * 作用  		: N维数组操作   
 * 作者			: 李锋   
 * Email		: ruizhilf@139.com
 * 手机       	:13828778863
 * 创建日期		: 2022年9月14日            最后一次修改日期:2022年9月14日  

 ***************************************************************************/
package JavaPlatform;

import JavaPlatform.System.DebugInfoJava;

public class NDimensionalArray_ {
	/**
	 * 最大元数个数10亿
	 */
	public final int  MaxElementCount = 1000000000;  
	
	/**
	 * 保存元素的一维数组,任何维度数组都可以用一维数组表示。
	 */
	private Object[]  m_DataArray = null ;  
	
	
	/**
	 * 维度信息,数组长度就是维度数,数组中的值就是维度长度。
	 */
	private int[] m_DimensionMax = null;
	
		

	public NDimensionalArray_(int... DimensionaArgs) throws Exception{
	 
		m_DimensionMax = DimensionaArgs;
		
		if(m_DimensionMax == null) {
			throw new java.lang.NullPointerException();
			}
		
	    int nLength = 1;
	    
	    for(int i = 0; i < DimensionaArgs.length; ++i) {
	    	if( DimensionaArgs[i] <= 0) {
	    		throw new Exception("错误,维度长度不能小于等于0!");
	    	}	    	
	    	nLength *= DimensionaArgs[i];
	    }
	    
	    if( nLength > MaxElementCount) {
	    	throw new Exception("错误,维度元素个数大于最大元素个数 " + MaxElementCount + "!");
	    }
	    
	    m_DataArray = new Object[nLength]; 		
	}
 
	
	/**
	 * 功能: 返回维度长度
	 * @return  
	 * @return int
	 * @since 创建日期:2022年9月14日,最后一次修改日期:2022年9月14日  
	 * @author 李锋
	 */
	public int getDimensionLegnth() {
		return m_DimensionMax.length;
	}
	
	/**
	 * 功能: 返回某一维度的长度
	 * @param N
	 * @return  
	 * @return int
	 * @since 创建日期:2022年9月14日,最后一次修改日期:2022年9月14日  
	 * @author 李锋
	 * @throws Exception 
	 */
	public int getDimensionLength(int N) throws Exception{
		if( N - 1 >= this.m_DataArray.length || N - 1 <= 0) {
			
			throw new Exception(new java.lang.ArrayIndexOutOfBoundsException());
		}
		
		return m_DimensionMax[N -1];
	}
	
	
	/**
	 * 功能: 获取用一维数组表示的任意N维数组的定位 
	 * @param argiDimensionValue  
	 * @return void
	 * @since 创建日期:2022年9月14日,最后一次修改日期:2022年9月14日  
	 * @author 李锋
	 */
	public int  getPsition(int... dimensionValueArgi)
	{
		/*
		三维数组 a[3][2][5] => 用一维数字 m_DataArray[3*2*5] 表示。
	 
		假设三维数组  a[3][2][5]    3行2列5面数组  用 a[x_max][y_max][z_max] 代替,
		那么 x_max = 3, y_max = 2, z_max = 5,那么
		数组 m_DimensionMax = {x_max,y_max,z_max}
		即:
		dimensionValueArgi[0] = x_max = 3
		dimensionValueArgi[1] = y_max = 2
		dimensionValueArgi[1] = z_max = 5
			
		所有元素可以看作 三个数列相加,数列名为 a[0],a[1],a[2]
		
		a[0]  总数 10个
		a[1]  总数 10个
		a[2]  总数 10个
		
		例子:getFixedPsition(0,1,2)  x,y,z
		
		第一列第一个无素是: a[0][0][0]  => (y+1) * (z+1)  => m_DataArray[ (x * y_max * z_max) +  (y+1) * (z+1) - 1] =>  m_DataArray[0]
		
		第二列第一个元素是: a[1][0][0]  => m_DataArray[ (x * y_max * z_max) +  (y+1) * (z+1) - 1] 
		
							=> a[ ( 1 * 2 * 5) + (0+1) * (0+1) ] => m_DataArray[10];
							
	    第二列第二个元素是: a[1][1][0] => m_DataArray[ ( x * y_max * z_max) + (y+1) * (z+1) - 1]
		
	 					=> a[ ( 1 * 2 * 5) + (1+1) * (0+1) - 1] => m_DataArray[11];
	 					
	 	最后:		
		   a[x][y][z] => m_DataArray[ (x * y_max * z_max) +  (y+1) * (z+1) - 1]
		   
		   => m_DataArray[ (dimensionValueArgi[0] * y_max * z_max) +  ( dimensionValueArgi[1] + 1) * (dimensionValueArgi[2] + 1) - 1]
		 
		*/
		
		
		//时间问题,太晚了,这一版本暂时不进行异常处理
		
		int i数列总数 = 1;
		
		for(int i = 1; i < m_DimensionMax.length; ++i) {
			i数列总数 *=  m_DimensionMax[i];
		}
		 
		
		int sum1 = dimensionValueArgi[0] * i数列总数;
		
		
		
		int sum2 = 1;
		
		for(int i = 1; i < dimensionValueArgi.length; ++i) {			
			sum2  *= (1 + dimensionValueArgi[i]);
		}
		
		return sum1 + sum2 - 1;		
	}
	
	
	/**
	 * 功能: 描述
	 * @param value
	 * @param dimensionValueArgi  
	 * @return void
	 * @since 创建日期:2022年9月14日,最后一次修改日期:2022年9月14日  
	 * @author 李锋
	 */
	public void setValue(Object value,int... dimensionValueArgi) {
		
		//时间问题,太晚了,这一版本暂时不进行异常处理
		m_DataArray[getPsition(dimensionValueArgi)] =  value;
		
	}
	
	
	/**
	 * 功能: 描述
	 * @param dimensionValueArgi
	 * @return  
	 * @return Object
	 * @since 创建日期:2022年9月14日,最后一次修改日期:2022年9月14日  
	 * @author 李锋
	 */
	public Object getValue(int... dimensionValueArgi) {
		
		return m_DataArray[getPsition(dimensionValueArgi)];
		
	} 
 
	
	public static void main(String[] args) throws Exception {
		
		jp.initData(new DebugInfoJava());	
		
		//创建一维数组
		NDimensionalArray_ nda = new NDimensionalArray_(2);
		//给一维数组赋值
		for(int i= 0; i<2;i++) {
			 nda.setValue("i=" + i, i);
			
		}
		
		jp.p("以下是一维数据元素值");
		
		//读取二维数组的值
		for(int i= 0; i< 2; i++) {	
				jp.p(nda.getValue(i).toString());			
		}
		
		
		//创建二维数组
		nda = new NDimensionalArray_(2,3);
		
		//给二维数组赋值
		for(int i= 0; i<2;i++) {
			for(int j= 0; j < 3; j++) {
				nda.setValue("i=" + i + ",j=" + j, i,j);
			}
		}
		
		jp.p("以下是二维数据元素值");
		
		//读取二维数组的值
		for(int i= 0; i< 2; i++) {
			for(int j= 0; j < 3; j++) {
				jp.p(nda.getValue(i,j).toString());
			}
		}
		
		//创建三维数组
		nda = new NDimensionalArray_(2,3,5);
		//给三维数组赋值
		for(int i= 0; i<2;i++) {
			for(int j= 0; j < 3; j++) {
				for(int k =0; k < 5; k++){
					nda.setValue("i=" + i + ",j=" + j + ",k=" + k, i,j,k);
				}
			}
		}
		
		jp.p("以下是三维数据元素值");
		//读取三维数组的值
		for(int i= 0; i< 2; i++) {
			for(int j= 0; j < 3; j++) {
				for(int k =0; k < 5; k++){
					jp.p(nda.getValue(i,j,k).toString());
				}
			}
		}		
		
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值