新聞中心
如何用java編寫一個矩陣的轉(zhuǎn)置?
int a[][] = {{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}};
創(chuàng)新互聯(lián)建站服務(wù)緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過10余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進行網(wǎng)站制作、成都網(wǎng)站建設(shè)、建設(shè)、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
int b[][] = new int [4][7];
for (int i = 0; i 4; i++) {
for (int j = 0; j 7; j++) {
b[i][j] = a[j][i];
}
}
System.out.println("矩陣a:");
for (int i = 0; i 7; i++) {
for (int j = 0; j 4; j++) {
if (j 3) {
System.out.print(a[i][j] + " ");
} else {
System.out.println(a[i][j] + " ");
}
}
}
System.out.println("矩陣a轉(zhuǎn)置:");
for (int i = 0; i 4; i++) {
for (int j = 0; j 7; j++) {
if (j 6) {
System.out.print(b[i][j] + " ");
} else {
System.out.println(b[i][j] + " ");
}
}
}
代碼寫得爛不要噴我,我想解決思路就是這樣吧!
用Java編程實現(xiàn)矩陣連續(xù)相乘問題
代碼如下:
//按照步驟查找矩陣相乘結(jié)果,i=1表示第一次結(jié)果,i=2表示第二次結(jié)果,以此類推,如果i不合法則返回null
private static int[][] getMatrixsMultiByStep(int i, int[][]... matrixs) {
MapString, int[][] result = getMatrixsMultiResult(matrixs);
if(i=0 || iresult.size()) {
return null;
}
return result.get("" + i);
}
//對個矩陣相乘,臨時結(jié)果和最終結(jié)果保存在Map中
private static MapString, int[][] getMatrixsMultiResult(int[][]... matrixs) {
MapString, int[][] result = new HashMapString, int[][]();
int[][] param = matrixs[0];
for(int i=1; imatrixs.length; i++) {
int[][] matrix = matrixs[i];
param = getMatrixMultiResult(param, matrix);
if(param == null) {
return null;
}
result.put("" + i, param);
}
return result;
}
//兩個矩陣相乘,結(jié)果為一個矩陣,返回值為空表示兩個矩陣不能相乘
private static int[][] getMatrixMultiResult(int[][] matrix1, int[][] matrix2) {
if(matrix2.length = 0) {
return matrix1;
}
if(matrix1.length=0 || matrix1[0].length!=matrix2.length) {
return null;
}
int[][] result = new int[matrix1.length][matrix2[0].length];
for(int i=0; imatrix1.length; i++) {
for(int j=0; jmatrix2[0].length; j++) {
result[i][j] = 0;
for(int k=0; kmatrix1[0].length; k++) {
result[i][j] += matrix1[i][k]*matrix2[k][j];
}
}
}
return result;
}
測試程序:
public static void main(String[] args) {
int[][] p1 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p2 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p3 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p4 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] value = getMatrixsMultiByStep(2, p1, p2, p3, p4);
if(value != null) {
for(int i=0; ivalue.length; i++) {
for(int j=0; jvalue[0].length; j++) {
System.out.print(value[i][j] + " ");
}
System.out.println();
}
} else {
System.out.println("矩陣無法相乘!");
}
}
輸出結(jié)果:
218 293 368
412 553 694
509 683 857
PS:JDK要5.0以上,二維數(shù)組模擬矩陣,兼容普通矩陣相乘哦
用java:利用二維數(shù)組,任意給出一個矩陣,編寫實現(xiàn)矩陣轉(zhuǎn)置的代碼
借花獻佛
/**
*?實現(xiàn)二維數(shù)組的轉(zhuǎn)置
*?@author?HAN
*
*/
public?class?transposition_Arrays2D_ch6_4?{
final?static?double?PI=3.1415;
public?static?void?main(String[]?args)?{
/*StaticTest?st1=new?StaticTest();
StaticTest?st2=new?StaticTest();
st1.method2("HAN");*/
/*****定義要用于轉(zhuǎn)置的二維數(shù)組*******/
int?arr2D[][]={{1,2,3},{4,5,6},{7,8,9}};
/*****構(gòu)造結(jié)果新二維數(shù)組用于存放轉(zhuǎn)置結(jié)果*******/
/*定義結(jié)果數(shù)組變量,注意?一定要先開辟一個內(nèi)存,
否則只是地址傳遞,也就是說兩個數(shù)組名實際上指向的是同一塊內(nèi)存*/
//而構(gòu)造二維數(shù)組可以為維度來進行,不一定是一個矩陣,即每一行的長度不一定相同
int?result_arr[][]=new?int[arr2D.length][];//先實現(xiàn)第一維
for(int?i=0?;?iarr2D.length;i++){?//再實現(xiàn)第二維
result_arr[i]=new?int[arr2D[i].length];
}
// int?result_arr[][]=Arrays.copyOf(arr2D,?arr2D.length);
//上面這個命令行行不通!
/*****輸出用于轉(zhuǎn)置的二維數(shù)組*******/
for?(int?x[]:arr2D){
for(int?e:x){
System.out.print(e+"?");
}
System.out.println();
}
System.out.println();
/*******進行元素倒置******/
for(int?i=0?;?iarr2D.length;i++){
for(int?j=0;?jarr2D[i].length;j++){
result_arr[j][i]=arr2D[i][j];?//轉(zhuǎn)置核心
}
}
/*****show?the?result?in?the?result?matrix*******/
for?(int?x[]:result_arr){
for(int?e:x){
System.out.print(e+"?");
}
System.out.println();
}
}
}
//import?java.util.Arrays;
//public?class?transposition_Arrays2D?{
//
// public?static?void?main(String[]?args)?{
// int?arr2D[][]={{1,2,3},{4,5,6},{7,8,9}};
// /*定義結(jié)果數(shù)組變量,注意?一定要先開辟一個內(nèi)存,
// 否則只是地址傳遞,也就是說兩個數(shù)組名實際上指向的是同一塊內(nèi)存*/
// int?result_arr[][]=new?int[arr2D.length][];
// for(int?i=0?;?iarr2D.length;i++){
// result_arr[i]=new?int[arr2D[i].length];
// }
//
//????????//?進行元素倒置
//????????for(int?i=0?;?iarr2D.length;i++){
//???????? for(int?j=0;?jarr2D[i].length;j++){
//???????? result_arr[j][i]=arr2D[i][j];
//???????? }
//????????}
//????????
//????????//?show?the?result?in?matrix
//????????for?(int?x[]:result_arr){
//???????? for(int?e:x){
//???????? System.out.print(e);
//???????? }
//???????? System.out.println();
//????????}
//????????
// }
//
//}
用JAVA編寫矩陣
public static void main(String[] args) throws Exception {
print(create(getNum()));
}
private static int getNum() {
Scanner scanner = new Scanner(System.in);
int n = 0;
do {
System.out.println("請輸入要生成的階數(shù):");
String input = scanner.next();
if (isDigital(input)) {
n = Integer.parseInt(input);
if (n = 0) {
System.out.println("階數(shù)必須大于0");
}
}
} while (n == 0);
return n;
}
private static int[][] create(int n) {
int[][] num = new int[n][n];
int ax = 1, ay = 0, x = 0, y = 0;
for (int m = 1; m = n * n; m++) {
num[x][y] = m;
int tmpx = x + ax;
int tmpy = y + ay;
if (tmpx = n || tmpx 0 || tmpy = n || tmpy 0 || num[tmpx][tmpy] != 0) {
if (ax == 0) {
ax = -ay;
ay = 0;
} else if (ay == 0) {
ay = ax;
ax = 0;
}
}
x += ax;
y += ay;
}
return num;
}
private static void print(int[][] num) {
int length = String.valueOf(num.length * num.length).length();
for (int i = 0; i num.length; i++) {
for (int j = 0; j num[i].length; j++) {
String tmp = String.valueOf(num[i][j]);
while (tmp.length() length) {
tmp = " " + tmp;
}
System.out.print(tmp + " ");
}
System.out.println();
}
}
private static boolean isDigital(String input) {
if (input == null || input.length() == 0) return false;
for (int i = 0; i input.length(); i++) {
char ch = input.charAt(i);
if (!Character.isDigit(ch)) {
System.out.println("輸入的階數(shù)必須為數(shù)字");
return false;
}
}
return true;
}
運行時輸入要生成的階數(shù)就可以了,比如生成問題上的矩陣輸入4就可以了。
用java怎么寫矩陣乘法?
import?java.util.Scanner;?
public class Matrix {?
public double[][] create() {?
Scanner sc = new Scanner(System.in) ;?
System.out.print("請輸入矩陣的行高:");?
int a = sc.nextInt() ;?
System.out.print("請輸入矩陣的列寬:");?
int b = sc.nextInt() ;?
double[][] x = new double[a][b] ;?
for(int i=0;ilt;a;i++){?
for(int j=0;jlt;b;j++){?
System.out.print("請輸入元素x["+i+"]["+j+"]的值:" );?
x[i][j] = sc.nextDouble() ;?
}?
}?
return x ;?
}?
public double[][] multiply(double[][] x,double[][] y){?
double[][] result = null ;?
int a = x[0].length ;?
int b = y.length ;?
if(a != b){?
System.out.println("輸入的維數(shù)不匹配,不能進行運算");?
}else{?
int c = x.length ;?
int d = y[0].length ;?
result = new double[c][d] ;?
for(int i=0;ilt;c;i++){?
for(int j=0;jlt;d;j++){?
double sum = 0 ;?
for(int k=0;klt;a;k++){?
sum += x[i][k]*y[k][j] ;?
}?
result[i][j] = sum ;?
}?
}?
}?
return result ;?
}?
public void print(double[][] x){?
System.out.println("矩陣為:");?
for(int i=0;ilt;x.length;i++){?
for(int j=0;jlt;x[i].length;j++){?
System.out.print(x[i][j] + " ") ;?
}?
System.out.println();?
}?
}?
}?
測試類:?
public class TestMatrix {?
public static void main(String[] args) {?
Matrix m = new Matrix() ;?
//double[][] x = {{1,2},{3,2}} ;?
//double[][] y = {{1,2,1},{2,3,3}} ;?
System.out.println("創(chuàng)建第一個數(shù)組:") ;?
double[][] x = m.create() ;?
m.print(x) ; //用來驗證輸入的是否和你一樣的,沒啥作用?
System.out.println("創(chuàng)建第二個數(shù)組:");?
double[][] y = m.create() ;?
m.print(y) ; //用來驗證輸入的是否和你一樣的,沒啥作用?
double[][] result = m.multiply(x, y) ;?
if(result == null){?
return ; //如果輸入的矩陣不能運算就不輸出結(jié)果了。?
}?
m.print(result) ;?
}?
}
Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進行復(fù)雜的編程。 Java具有簡單性、面向?qū)ο蟆⒎植际?、健壯性、安全性、平臺獨立與可移植性、多線程、動態(tài)性等特點。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
Java編寫一個程序?qū)崿F(xiàn)矩陣的運算加減乘除,(并對其中的異常進行處理)
/**
*?矩陣:由?m?×?n?個數(shù)Aij排成的m行n列的數(shù)表稱為m行n列的矩陣,簡稱m?×?n矩陣
*?說白了就是一個二維數(shù)組,下面的程序用整形作為數(shù)據(jù)類型,其他類型運算大同小異
*?
*/
public?class?MatrixUtils?{
/**
*?矩陣運算:加(減法與之類似)
*/
public?static?int[][]?matrixAdd(int[][]?addend,?int[][]?summand)?{
if?(addend?==?null?||?addend.length?==?0)?{
throw?new?IllegalArgumentException("addend?matrix?is?empty!");
}
if?(summand?==?null?||?summand.length?==?0)?{
throw?new?IllegalArgumentException("summand?matrix?is?empty!");
}
//矩陣加減要求兩個矩陣類型一致,即行列數(shù)相同
int?row?=?addend.length;
int?col?=?addend[0].length;
if?(row?!=?summand.length?||?col?!=?summand[0].length)?{
throw?new?IllegalArgumentException("summand?and?summand?not?the?same?type!");
}
int[][]?sum?=?new?int[row][col];
for?(int?i?=?0;?i??row;?i++)?{
for?(int?j?=?0;?j??col;?j++)?{
sum[i][j]?=?addend[i][j]?+?summand[i][j];
//?sum[i][j]?=?addend[i][j]?-?summand[i][j];?//減法
}
}
return?sum;
}
/**
*?矩陣運算:乘法,沒找到除法的運算規(guī)則
*/
public?static?int[][]?matrixMultiply(int[][]?addend,?int[][]?summand)?{
if?(addend?==?null?||?addend.length?==?0)?{
throw?new?IllegalArgumentException("addend?matrix?is?empty!");
}
if?(summand?==?null?||?summand.length?==?0)?{
throw?new?IllegalArgumentException("summand?matrix?is?empty!");
}
//兩個矩陣的乘法僅當(dāng)?shù)谝粋€矩陣A的列數(shù)和另一個矩陣B的行數(shù)相等時才能定義。如A是m×n矩陣和B是n×p矩陣,它們的乘積C是一個m×p矩陣?
int?row?=?addend.length;
int?col?=?summand[0].length;
if?(addend[0].length?!=?summand.length)?{
throw?new?IllegalArgumentException("summand?and?summand?not?the?same?type!");
}?
int[][]?sum?=?new?int[row][col];
for?(int?i?=?0;?i??row;?i++)?{
for?(int?j?=?0;?j??col;?j++)?{
for?(int?z?=?0;?z??addend[0].length;?z++)?{
sum[i][j]?+=?addend[i][z]?*?summand[z][j];
System.out.println("sum["?+?i+??"]["+?j+"]=?"?+?sum[i][j]);
}
}
}
return?sum;
}
}
當(dāng)前文章:矩陣用java代碼實現(xiàn) 矩陣乘法java代碼
文章URL:http://www.dlmjj.cn/article/dodgijc.html