weixin_42309929
2009-05-17 21:07 阅读 320
已采纳

二维数组的初始化!

int num[3][4];
  for(i=0;i <3;i++)
        for(t=0;t <4;t++)
    num[i][t] = (i*4)+t+1;

上面代码初始化1到12的二维矩阵,由于数据很规律,很容易得到(i*4)+t+1赋值语句,
一般二维数组的初始化也都是根据实际情况来判断,

比如


1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
该矩阵中的数字很规则,在实际解决该问题时,只需要把数值的规律描述出来即可。
实现思路:声明一个变量n,代表矩阵的阶,声明和初始化一个nXn的数组,根据数据的规律,则对应的数值为(行号 + 列号 + 1),当数值比n大时,取和n的余数


根据判断都可以得到赋值语句,可是假如我们的数据很复杂,但从判断很难得到这个初始化赋值语句,那该怎么办,有没有规律可循?

换句话说,对应一个矩阵怎么样用数学归纳法证明矩阵的i行j列的数据等于(i*4)+t+1,或者是(行号 + 列号 + 1)或者是其他的什么东西?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    wang_jian_bo wang_jian_bo 2009-05-17 21:07

    我比较懒不愿意写脚本解释程序,看看高手们如何解决
    [code="java"]package com.saturday;

    import java.lang.reflect.Array;

    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;

    public class TestReflax {
    private static ScriptEngineManager scriptMgr=new ScriptEngineManager();
    private static ScriptEngine scriptEng=scriptMgr.getEngineByName("javascript");

    public static void main(String[] args){
        double[][] matrix=new double[4][4];
        String sValExpres="($row+$col+1)<=4?($row+$col+1):($row+$col+1)%4";
        setMatrix(matrix,sValExpres);
        outputMatrix(matrix);
    }
    
    public static void outputMatrix(double matrix[][]){
        int nRowC=matrix.length;
        int nColC=matrix[0].length;
        for(int i=0;i<nRowC;i++){           
            for(int j=0;j<nColC;j++){
                System.out.print(matrix[i][j]+" ");
            }
            System.out.print("\n");
        }   
    }
    
    public static void setMatrix(double matrix[][],String sValExpres){
        int nRowC=matrix.length;
        int nColC=matrix[0].length;
        for(int i=0;i<nRowC;i++){           
            for(int j=0;j<nColC;j++){
                matrix[i][j]=getExpressVal(i,j,sValExpres);
            }
        }
    }
    
    public static double getExpressVal(int nRow,int nCol,String sValExpres){
        double nValue=0;        
        try{
            sValExpres=sValExpres.replaceAll("\\$row",nRow+"")
                                 .replaceAll("\\$col",nCol+"");
            nValue=(Double)scriptEng.eval(sValExpres);
        }catch(Exception ex){           
        }
    
        return nValue;
    }
    

    }[/code]

    点赞 评论 复制链接分享
  • wang_jian_bo wang_jian_bo 2009-05-18 09:19

    果然被移动了,javaeye的规矩还真是蛮严格的

    点赞 评论 复制链接分享

相关推荐