黑马程序员技术交流社区

标题: 求这题的详细分析过程,谢谢大神! [打印本页]

作者: dengxuye    时间: 2016-3-24 21:44
标题: 求这题的详细分析过程,谢谢大神!
求一个3*3矩阵对角线元素之和。
作者: yijincheng    时间: 2016-3-24 22:15
本帖最后由 yijincheng 于 2016-3-25 23:51 编辑

初学者的麻烦中,有一个就是不习惯将人类的思考方式装换为机器的思考方式。假如让你拿笔在纸上算,一定会相当容易的解答出来。
你就把你在 草纸上的演算过程和脑子里脑补的部分用代码具现化出来。
比如这道题。人是怎么知道某元素是否在对角线上?是通过该元素的横坐标和纵坐标的关系来判断的。横纵坐标符合y = x 和 y = -x + 3的元素。都在对角线上。
那么就好办了。用一个3*3的二维数组模拟这个矩阵。
用双循环结构将二维数组初始化。
在用双循环遍历数组,将横纵坐标符合y = x 和 y = -x + 1的元素全部相加。然后减去一个同时y = x 和 y = -x + 1的那个元素(交叉点)。

作者: 骓逝    时间: 2016-3-24 22:31
把这个矩阵宝义为二维数组,然后二维数组遍历,应该会吧遍历的时候加个判断当行数等于列数是加到sum变量中
作者: 骓逝    时间: 2016-3-24 22:34
是两条对角线都还要求吗,如果要求另一条的话还要再加点
作者: 唯爱唐嫣    时间: 2016-3-24 22:47
循环就可以了吧?如果对题意感觉有歧义的话,可以上网找度娘问问
作者: zhang3216858    时间: 2016-3-24 23:01
不是用for循环嵌套那个么= =,如果不是的话就不要理我了
作者: 霸道总裁爱村花    时间: 2016-3-24 23:54
随手一写,顺便混点黑马币
public class Sum {

        /**
         * @param args
         */
        public static void main(String[] args) {
                int[][] a = {{1,2,3},{4,5,6},{7,8,9}};//也可用Scanner输入,为了简便,就不写了
                int sum = 0;//用于记录和
                for(int i = 0; i < 3; ++i){
                        sum += a[i][i];
                }
                System.out.println("主对角线的和是:"+sum);
                for(int i = 0; i < 3; i++){
                        for(int j = 0; j<3; j++){
                                if((i + j) == 2){//i+i=2时,为副对角线元素,a[0][2],a[1][1],a[2][0]
                                        sum +=a[i][j];
                                }
                        }
                       
                }
                System.out.println("两条对角线的和是:"+sum);
        }

}
作者: dengxuye    时间: 2016-3-25 22:42
yijincheng 发表于 2016-3-24 22:15
初学者的麻烦中,有一个就是不习惯将人类的思考方式装换为机器的思考方式。假如让你拿笔在纸上算,一定会相 ...

分析得很详细,谢谢!
作者: dengxuye    时间: 2016-3-25 22:43
霸道总裁爱村花 发表于 2016-3-24 23:54
随手一写,顺便混点黑马币
public class Sum {

搞定了,谢谢!!




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