黑马程序员技术交流社区

标题: 练习十八:奇数阶矩阵对角线求和 [打印本页]

作者: maxwell247    时间: 2015-9-26 22:04
标题: 练习十八:奇数阶矩阵对角线求和

从网上找到一份编程练习题,我决定将里面的题目全都做一遍。


/*
        题目:求一个3*3矩阵对角线元素之和  
*/

/*
        分析:题目没有给定 3*3矩阵的数据,那么我们就还是使用Random生成一组1~100之内的数据。
        矩阵,用二维数组表示。矩阵有两条对角线,都要计算。
        这里我写了一个duiJiaoXianQiuHe()用于计算奇数阶矩阵对角线元素之和。
*/
import java.util.Random;

class JuZhenDuiJiaoXianQiuHe {
        public static void main(String[] args) {
                int[][] arr=new int[3][3];
                Random random=new Random();
                //随机生成二维数据中数据,数据范围 1~100
                for (int i=0; i<arr.length; i++){
                        for (int j=0; j<arr.length; j++){
                                arr[j]=random.nextInt(100)+1;
                        }
                }
                System.out.println("---------------生成的3*3的数组-------------");
                printArray(arr);
                System.out.println("------------该矩阵两对角线之和为-----------");
                int sum = duiJiaoXianQiuHe(arr);
                System.out.println(sum);
        }
       
        //输出二维数组
        public static void printArray(int[][] arr){
                for (int i=0; i<arr.length; i++){
                        for (int j=0; j<arr.length; j++){
                                System.out.print(arr[j]+"\t");
                                if (j == arr.length-1){
                                        System.out.println();
                                }
                        }
                       
                }
        }
       
        // 求奇数阶矩阵对角线之和
        public static int duiJiaoXianQiuHe(int[][] arr){
                int sum_1=0; //一条对角线的和
                int sum_2=0; //另一条对角线的和
                int sum=0; //两条对角线之和
                for (int i=0; i<arr.length; i++){
                        for (int j=0; j<arr.length; j++){
                                if (i==j){
                                        sum_1=sum_1+arr[j]; //第一条对角线之和
                                }
                                if((i+j)== arr.length-1){
                                        sum_2=sum_2+arr[j]; //第二条对角线之和
                                }
                                sum=sum_1+sum_2-arr[(arr.length-1)/2][(arr.length-1)/2]; //减去两条对角线交叉的元素和
                        }
                }
                return sum;
        }
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2