java计算两个n阶矩阵相乘

自己是个新手,研究java数据结构,看到两个n阶矩阵相乘的题目,自己就试着写了一个简单的demo,哪里有不好的地方,也希望大家多提提意见,直接上代码了:

package com.shujujiegou01;

public class JuZhenChengFa {
// 计算两个N阶矩阵相乘
public static void squareMult(int[][] a, int[][] b, int[][] c, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
c[i][j] = 0;
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
}

// 打印矩阵
public static void printArray(int a[][]) {
for (int k = 0; k < a.length; k++) {
for (int l = 0; l < a[k].length; l++) {
// 打印每一个元素及其所在坐标位置
System.out.print(a[k][l] + "-" + "(" + k + "," + l + ")" + ",");
}
System.out.println();
}
}

// 矩阵行列互换
public static void swapRowCloumn(int a[][]) {
int num = a.length;

//是为了方便自己调试,才这么定义的

int e[][] = new int[num][num];
for (int k = 0; k < num; k++) {
for (int l = 0, x = a[k].length; l < x; l++) {
// 打印每一个元素及其所在坐标位置
e[k][l] = a[l][k];
System.out.print(e[k][l] + "-" + "(" + k + "," + l + ")" + ",");
}
System.out.println();
}
}

// 主函数测试
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int b[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int c[][] = new int[3][3];

System.out.println("矩阵A:");
printArray(a);
System.out.println("互换行和列后的A矩阵:");
swapRowCloumn(a);
// printArray(a);
System.out.println("矩阵B:");
printArray(b);
System.out.println("互换行和列后的A矩阵:");
swapRowCloumn(b);
// printArray(b);
// 调用
squareMult(a, b, c, 3);
// 打印
System.out.println("矩阵C:");
printArray(c);

// 调换过后计算的结果
System.out.println("调换行和列的矩阵C:");
swapRowCloumn(c);
}

}

附上运行结果截图:

标红的部分,个人感觉有问题,调用了行列互换方法了,按理来说应该计算c矩阵是按照行列互换后的A矩阵和B矩阵来计算的,应该直接得到红框的答案;但是计算出来发现还是根据旧的A,B矩阵的乘积来计算的。感觉哪里有问题,但是说不上来!!!

原文地址:https://www.cnblogs.com/yaoruozi/p/8244606.html

时间: 2024-10-09 13:56:56

java计算两个n阶矩阵相乘的相关文章

JAVA,求m*n阶矩阵中的2*2阶矩阵和的最大值

题目:输入一个m*n阶矩阵,找出m*n阶矩阵中的二阶矩阵和的最大值 输入样例: 1 2 3 0 4;4 3 5 1 2;3 2 4 7 5 输出样例: 17 ------------------------------------------------I am a Dividing line--------------------------------------------- java代码: import java.util.Scanner; /** * m*n阶矩阵中的2*2阶矩阵和最大

java计算两日期间隔小时或分钟

public static void main(String[] args) {        try {            long min = dateDiff("2014-05-27 13:30:00","2014-05-27 13:00:00","yyyy-MM-dd HH:mm:ss");            System.out.println("---------相隔分钟数: "+min);        

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg

Java计算两个日期相差的天数

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class test16 { /** * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException { /

java计算两个日期之间相差天数和相隔天数详解

大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人,却没有发现,在大量新增统计时是差之毫厘谬以千里,我能都发现是因为一个偶然的机会,一个项目运行几年却没有人发现,我在其中还不到一年,一开始写这些这代码的人根本没分清楚什么情况就写了,怪不得统计的数据总是有那么细微的差别,在于日期"相差"和"相隔"有某些特定的情况下是相等的

Java 计算两个日期相差的天数

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class test16 { /** * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException { /

Java计算两个时间的天数差与月数差 LocalDateTime

/**  * 计算两个时间点的天数差  * @param dt1 第一个时间点  * @param dt2 第二个时间点  * @return int,即要计算的天数差  */ public static int dateDiff(LocalDateTime dt1,LocalDateTime dt2){  //获取第一个时间点的时间戳对应的秒数  long t1 = dt1.toEpochSecond(ZoneOffset.ofHours(0));  //获取第一个时间点在是1970年1月1日

java计算两个时间相差(天、小时、分钟、秒)

public static Long dateDiff(String startTime, String endTime, String format, String str) { // 按照传入的格式生成一个simpledateformate对象 SimpleDateFormat sd = new SimpleDateFormat(format); long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数 long nh = 1000 * 60 * 60;// 一小时的毫

Java 计算两个日期相差月数、天数

package com.myjava; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; public class MyCalendar { /** * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException {