重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
借花献佛
成都创新互联公司是专业的平泉网站建设公司,平泉接单;提供网站制作、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行平泉网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
/**
* 实现二维数组的转置
* @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");*/
/*****定义要用于转置的二维数组*******/
int arr2D[][]={{1,2,3},{4,5,6},{7,8,9}};
/*****构造结果新二维数组用于存放转置结果*******/
/*定义结果数组变量,注意 一定要先开辟一个内存,
否则只是地址传递,也就是说两个数组名实际上指向的是同一块内存*/
//而构造二维数组可以为维度来进行,不一定是一个矩阵,即每一行的长度不一定相同
int result_arr[][]=new int[arr2D.length][];//先实现第一维
for(int i=0 ; iarr2D.length;i++){ //再实现第二维
result_arr[i]=new int[arr2D[i].length];
}
// int result_arr[][]=Arrays.copyOf(arr2D, arr2D.length);
//上面这个命令行行不通!
/*****输出用于转置的二维数组*******/
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]; //转置核心
}
}
/*****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}};
// /*定义结果数组变量,注意 一定要先开辟一个内存,
// 否则只是地址传递,也就是说两个数组名实际上指向的是同一块内存*/
// 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();
// }
//
// }
//
//}
昨天刚帮一个网友改编的,输出矩阵并且在矩阵求幂后输出矩阵的一个类,直接可以运行。
注释都有的。希望你用的得到。import java.util.Scanner;
public class JuZhen {
//定义计算方法
public static int calc(int x, int y,int score){
if(x==0 y==0){
score = 0;
}else {
score = 1;
}
return score;
}
//输入矩阵
public static void shuru(){
Scanner input = new Scanner(System.in);//Scanner是用来接纳系统控制台输的字符串的
System.out.print("请输入矩阵的阶数:");
int n = input.nextInt(); //取一个输入的字符赋值给n
int M[][] = new int[n][n]; //定义数组维数.初始化数组,定义了一个双向的长度为
//n的
System.out.print("请输入矩阵的的值(0-1):");
for(int i=0;iM.length ;i++){ //不能以0开始
for(int j=0 ;jM[i].length ; j++){
M[i][j] = input.nextInt();
}
}
System.out.println("你输入的矩阵为:");
for(int i=0;iM.length ;i++){ //显示矩阵
System.out.print("\n");
for(int j=0 ;jM[i].length ; j++){
System.out .print(M[i][j] + "\t") ;
}
}
}
//仅仅是一个求幂的递归。
int myPow(int x, int y) {
int pow = 0;
if (y 0) {
pow = x * myPow(x, y - 1);// 2,3//2*2,3-1
}
if (y 0) {
pow = 1 / x * myPow(x, y + 1);
}
if (y == 0) {
pow = 1;
}
return pow;
}
//程序入口
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("请输入矩阵的阶数:");
int n = input.nextInt();//这个相当于确定行数。
int M[][] = new int[n][n];
//定义数组维数
System.out.print("请输入矩阵的的值(0-1):");
for(int i=0;iM.length ;i++){ //外循环表示行,在外循环已知的情况下去填内循环,内循环表示列
for(int j=0 ;jM[i].length ; j++){
M[i][j] = input.nextInt();
}
}
int temp[][] =new int[n][n];
int m[][] =new int[n][n];
System.out.println("你输入的矩阵为:");
for(int i=0;iM.length ;i++){ //显示矩阵
System.out.print("\n"); //执行完外循环也就是打印出一行后换行
for(int j=0 ;jM[i].length ; j++){
temp[i][j] = M[i][j] ; //赋给矩阵temp
System.out .print(M[i][j] + "\t") ;//执行完内循环也就是一列时空两格。\t为tab键起退格作用
}
}
System.out.print("\n\n你想求几次方:");
int c =input.nextInt(); //获得幂次
for (int k=0; kc;k++){ //最外层的循环和里边的两层循环也就是二维数组里的每个都有交集,也就是每个都要求幂
for(int i=0 ; iM.length; i++){
for(int j=0; jM[i].length ;j++){
m[i][j]= new JuZhen().myPow(temp[i][j],c);
}
}
}//for k
for(int i=0;im.length ;i++){ //显示矩阵
System.out.print("\n");
for(int j=0 ;jm[i].length ; j++){
System.out .print(m[i][j] + "\t") ;
}
}
}//main
}//class JuZhen
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("请输入要生成的阶数:");
String input = scanner.next();
if (isDigital(input)) {
n = Integer.parseInt(input);
if (n = 0) {
System.out.println("阶数必须大于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("输入的阶数必须为数字");
return false;
}
}
return true;
}
运行时输入要生成的阶数就可以了,比如生成问题上的矩阵输入4就可以了。
1、矩阵类
public class Matrix {
/* 矩阵相乘 */
public static double[][] multiplyMatrix(double[][] a,double[][] b){
if(a[0].length != b.length) {
return null;
}
double[][] c=new double[a.length][b[0].length];
for(int i=0;ia.length;i++) {
for(int j=0;jb[0].length;j++) {
for(int k=0;ka[0].length;k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
return c;
}
2、测试函数(main函数)
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int m = n = k = 6;
double [][]a=new double[m][n]; //定义一个m*n的矩阵
double [][]b=new double[n][k]; //定义一个n*k的矩阵
System.out.println("输入连续的数构成数组a:");
for(int i=0;im;i++)
for(int j=0;jn;j++)
a[i][j]=1.0;
System.out.println("输入连续的数构成数组b:");
for(int i=0;in;i++)
for(int j=0;jk;j++)
b[i][j]=1.0;
double [][]c=multiplyMatrix(a, b);
System.out.println("Matrix a:");
printMatrix(a); //打印a
System.out.println("Matrix b:");
printMatrix(b); //打印b
System.out.println("Matrix c:");
printMatrix(c); //打印c
input.close();
}
}
3、打印函数(可以放到main函数所在类中)
public static void printMatrix(double[][] c) {
if (c!=null) {
for(int i=0;ic.length;i++) {
for(int j=0;jc[0].length;j++) {
System.out.printf("%-8.1f",c[i][j]); //保留1位小数;
}
System.out.println();
}
} else {
System.out.println("无效");
}
System.out.println();
}
public class Matrix {
// 表示行和列
private int mRow, mColumn;
// 构造方法
public Matrix(int row, int column) {
mRow = row;
mColumn = column;
}
// 获取0-20随机数
private int random() {
double random1 = Math.random();// 这个Math类的方法可以获取0.0-1.0之间的随机数
double random2 = random1 * 20; // 0.0 - 20.0
return (int) random2;
}
// 创建矩阵
private void createMatrix() {
int totalCount = mRow * mColumn; // 总共有那么多
for (int count = 1; count = totalCount; count++) {
int number = random();// 上面的方法
System.out.print(number 10 ? "0" + number : number); // 输出数字,如果数字小于10,前面加0补全两位
System.out.print(" "); // 分隔符,随便填
if (count % mRow == 0) {
System.out.println(); // 换行
}
}
}
public static void main(String[] args) {
Matrix matrix = new Matrix(3, 5); // 几行几列传进去
matrix.createMatrix();
}
}
为了经验我也是蛮拼的了