java的一维数组求矩阵

wine_god 2015-08-01 12:35:46
1.建立一个矩阵类,类型为java泛型,用一维数组来存储,要有属性、
构造方法(构造方法要写2个,一个是初始化为指定的数,如全0或者全1,一个是初始化为随机数)、
和普通方法。普通的方法有:矩阵的加法、矩阵的乘法、矩阵的输出。

2. 建立一个方针,继承上面的矩阵类,并且实现多线程的Runnable借口

3. 在可能出现异常的地方要使用try... catch, 比如矩阵相乘时,第一个矩阵的列要和第二个矩阵的行要相同,否则要提示异常
...全文
334 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
飏飏一蝶 2015-08-01
  • 打赏
  • 举报
回复
严格的说,java是没有多维数组的, 但是我还是用广义上的一维数组完成了程序 有需要改的地方自己改改

import java.util.Arrays;
import java.util.Random;

public class Matrix {
	
	public static final int ALL_ZERO = 0;
	public static final int ALL_ONE = 1;
	public static final int ALL_RANDOM = 2;
	
	private int M;
	private int N;
	private int[] data;
	
	public Matrix(int M,int N,int Way) throws ParamsError{
		this.M = M;
		this.N = N;
		data = new int[M * N];
		switch (Way) {
		case ALL_ZERO:
			Arrays.fill(data, 0);
			break;
		
        case ALL_ONE:
			Arrays.fill(data, 1);
			break;
        
        case ALL_RANDOM:
	        for (int i = 0; i < data.length; i++) {
			    //为了便于观察运算的正确性,限制范围为0 ~ 9
	        	data[i] = new Random().nextInt(10);	
			}
        	
	        break;

		default:
			throw new ParamsError("初始化矩阵的参数有误,只是能是全0,全1,随机中的一种");
		}
	}
	
	  
	 public Matrix addMatrix(Matrix matrix) throws ParamsError{
		 if (this.M != matrix.M || this.N != matrix.N) {
			throw new ParamsError("矩阵初始化错误:两矩阵大小不相等");
		}
		 
		 for (int i = 0; i < data.length; i++) {
			this.data[i] += matrix.data[i];
		}
		 return this;
	 }
	
	 public Matrix mutiMatrix(Matrix matrix) throws ParamsError{
		 if (this.N != matrix.M) {
				throw new ParamsError("矩阵乘法错误:第一举证的行和第二矩阵的列大小不相等,无法相乘 ");
		 }
		 
		 Matrix tempMatrix = new Matrix(M, matrix.N, ALL_ZERO);
		 for (int i = 0; i < M; i++) {
			for (int j = 0; j < matrix.N; j++) {
				int sum = 0;
				for (int j2 = 0; j2 < N; j2++) {
					sum += this.data[i * N + j2] * matrix.data[j2 * matrix.N + j]; 
				}
				tempMatrix.data[i * matrix.N + j] = sum;
			}
		}
		 return tempMatrix;
		 
	 }
	
	 public void publishMatrix(){
		 for (int i = 0; i < data.length; i++) {
			System.out.print(data[i]+"  ");
			if (i != 0 && i % N == (N - 1)) {
				System.out.println();
			}
		}
	 }
	
	
	 public static class ParamsError extends Exception{
		
		private static final long serialVersionUID = 1L;

		public ParamsError(String info){
			 super(info);
		 }
	 }
	 
	 public static void main(String[] args) {
		try {
			Matrix matrix1 = new Matrix(2,3,Matrix.ALL_RANDOM);
			System.out.println("矩阵1:");
			matrix1.publishMatrix();
			Matrix matrix2 = new Matrix(3,4,Matrix.ALL_RANDOM);
			System.out.println();
			System.out.println("矩阵2:");
			matrix2.publishMatrix();
			Matrix matrix = matrix1.mutiMatrix(matrix2);
			System.out.println();
			System.out.println("结果:");
		    matrix.publishMatrix();
			
		} catch (ParamsError e) {
			e.printStackTrace();
		}
		
	
		
	}
	
}


 class Square extends Matrix implements Runnable{

	public Square(int N, int Way) throws ParamsError {
		super(N, N, Way);
	}

	@Override
	public void run() {
		//真不知道你一个方阵实现多线程为了干什么!
	}
	 
	 
 }

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧