java - Java 中的矩阵操作 OOP

标签 java

嘿。所以我的任务是读取文本文件以形成矩阵,然后对矩阵执行各种函数,例如加法和乘法。我修复了一些错误,但编译器由于某种原因拒绝接受 .get 和 .set 方法。

import java.io.*;
import java.util.*;
import java.util.Scanner;

 class Matrix {
  double [][] element;
  int rows, cols ;

 Matrix(int rows, int cols){
    this.rows = rows;
    this.cols = cols;
    element = new double [rows][cols];
 }

public double getValue (int row, int col){
return element[row][col];
}

public void setValue (int row, int col, double value){
element[row][col] = value;
}

 public int getNoRows(){  // returns the total number of rows
  return rows;
}

 public int getNoCols(){ // returns the total number of cols
  return cols;
}

// The methods for the main calculations

  public Matrix AddMatrix(Matrix m2){
  int row1 = getNoRows();
  int col1 = getNoCols();
  Matrix result = new Matrix(row1, col1);

  for (int i=0; i<row1; i++){
      for (int j=0; j<col1; j++) {
          result.setValue(i,j, (getValue(i,j) + m2.getValue(i,j)));
     }
}
  return result;
 }

  public Matrix  MultiplyMatrix(Matrix m2){
  if (this.getNoCols != m2.getNoRows)
      throw new IllegalArgumentException ("matrices can't be multiplied");
 int row2 = this.getNoRows();
 int col2 = m2.getNoCols();
  Matrix result = new Matrix(row2, col2);
  for (int i=0; i<row2; i++){
      for (int j=0; j<col2; j++){
             result.setValue(i,j,(this.getValue(i,j)*m2.getValue(i,j)));
     }
 }
 return result;

 }

public Matrix TransposeMatrix(){
  int row3 = this.getNoCols();
  int col3 = this.getNoRows();
  matrix result = new Matrix (row3, col3);
  for (int i=0; i<row3 ; i++){
     for (int j=0; j<col3; j++){
        result.setValue(i,j, (this.getValue(j,i)));
     }
  }
 return result;

}

  public void DisplayMatrix(){
  for (int i = 0; i < this.getNoRows; i++) {
  for (int j = 0; j < this.getNoCols; j++) {
    System.out.print((this.getValue(i,j)) + " ");
}
System.out.print("\n");
  }  
}




  public class Lab1 {
  public static void main(String args[]) {
 //      Matrix  m1 = new Matrix();
//          Matrix  m2 = new Matrix();
   //         Matrix  m3 = new Matrix();

      System.out.println("1. Add two matrices \n");
      System.out.println("2. Multiply two matrices \n");
      System.out.println("3. Take transpose of a matrix \n");
      System.out.println("4. Display a matrix \n");
      System.out.println("5. Exit \n");

      int choice;
      Scanner in = new Scanner (System.in);
      System.printout.ln("Enter your choice /n");
      choice = in.nextInt();

       Matrix m1 =  MatrixReader();
       m1.DisplayMatrix();
       Matrix m2 =  MatrixReader();
       m2.DisplayMatrix();


       if (choice==1){
       Matrix m3 = new Matrix(m1.getNoRows, m1.getNoCols);
       m3 = m1.AddMatrix(m2);
       m3.DisplayMatrix();
    }

       if (choice==2){
       Matrix m3 = new Matrix(m1.getNoRows, m2.getNoCols);
       m3 = m1.MultiplyMatrix(m2);
       m3.DisplayMatrix();
      }



    if (choice==3){
    Matrix m1 = DisplayMatrix();
    Matrix m3 = new Matrix (m1.getNoRows, m1.getNoCols);
    m3=m1.TransposeMatrix();
    m3.DisplayMatrix();
    }

    if (choice ==4){
    System.out.println("Will need to call the DisplyMatrix method for the object /n");
    }

 else {
    System.out.println("Incorrect input. Kindly enter again / n");
 }
}

public static Matrix MatrixReader() throws FileNotFoundException {
System.out.println("Give the filename for the matrix");
Scanner filescanner = new Scanner(System.in);
Scanner scanner = new Scanner(new File(filescanner.nextLine()));
scanner.nextLine(); // removes the first line in the input file
String rowLine = scanner.nextLine();
String[] arr = rowLine.split("=");
int rows = Integer.parseInt(arr[1].trim());

String colLine = scanner.nextLine();
String[] arr2 = colLine.split("=");
int cols = Integer.parseInt(arr2[1].trim());
Matrix test  = new Matrix(rows, cols);

 for (int i=0; i<rows;i++){
     for (int j=0; j<cols;j++) {
         test[i][j]= scanner.nextDouble();
        }
}


 return test;

}

}
                                                                     167,1         Bot

最佳答案

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication3;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;



/**
 *
 * @author asterisk
 */
class Matrix {

    double[][] element;
    int rows, cols;

    Matrix(int rows, int cols) {
        this.rows = rows;
        this.cols = cols;
        element = new double[rows][cols];
    }

    public double getValue(int row, int col) {
        return element[row][col];
    }

    public void setValue(int row, int col, double value) {
        element[row][col] = value;
    }

    public int getNoRows() {  // returns the total number of rows
        return rows;
    }

    public int getNoCols() { // returns the total number of cols
        return cols;
    }

// The methods for the main calculations
    public Matrix AddMatrix(Matrix m2) {
        int row1 = getNoRows();
        int col1 = getNoCols();
        Matrix result = new Matrix(row1, col1);

        for (int i = 0; i < row1; i++) {
            for (int j = 0; j < col1; j++) {
                result.setValue(i, j, this.getValue(i, j) + m2.getValue(i, j));
            }
        }
        return result;
    }

    public Matrix MultiplyMatrix(Matrix m2) {
        if (this.getNoCols() != m2.getNoRows()) {
            throw new IllegalArgumentException("matrices can't be multiplied");
        }
        int row2 = this.getNoRows();
        int col2 = m2.getNoCols();
        Matrix result = new Matrix(row2, col2);
        for (int i = 0; i < row2; i++) {
            for (int j = 0; j < col2; j++) {
                result.setValue(i, j, result.getValue(i, j) + this.getValue(i, j) * m2.getValue(i, j));
            }
        }
        return result;

    }

    public Matrix TransposeMatrix() {
        int row3 = this.getNoCols();
        int col3 = this.getNoRows();
        Matrix result = new Matrix(row3, col3);
        for (int i = 0; i < row3; i++) {
            for (int j = 0; j < col3; j++) {
                result.setValue(i, j, this.getValue(j, i));
            }
        }
        return result;

    }

    public void DisplayMatrix() {
        for (int i = 0; i < this.getNoRows(); i++) {
            for (int j = 0; j < this.getNoCols();
                    j++) {
                System.out.print((this.getValue(i, j)) + " ");
            }
            System.out.print("\n");
        }
    }
}



public class Lab1 {

    public static void main(String args[]) throws FileNotFoundException {
        //      Matrix  m1 = new Matrix();
//          Matrix  m2 = new Matrix();
        //         Matrix  m3 = new Matrix();

        System.out.println("1. Add two matrices \n");
        System.out.println("2. Subtract two matrices \n");
        System.out.println("3. Take transpose of a matrix \n");
        System.out.println("4. Display a matrix \n");
        System.out.println("5. Exit \n");

        int choice;
        Scanner in = new Scanner(System.in);
        System.out.println("Enter your choice /n");
        choice = in.nextInt();

        Matrix m1 = MatrixReader();
        m1.DisplayMatrix();
        Matrix m2 = MatrixReader();
        m2.DisplayMatrix();


        if (choice == 1) {
            Matrix m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
            m3 = m1.AddMatrix(m2);
            m3.DisplayMatrix();
        }

        if (choice == 2) {
            Matrix m3 = new Matrix(m1.getNoRows(), m2.getNoCols());
            m3 = m1.MultiplyMatrix(m2);
            m3.DisplayMatrix();
        }



        if (choice == 3) {
            Matrix m1 = DisplayMatrix(); //? DisplayMatrix is a method of class
                                         // so it should be called like matrix.DisplayMatrix()
            Matrix m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
            m3 = m1.TransposeMatrix();
            m3.DisplayMatrix();
        }

        if (choice == 4) {
            System.out.println("Will need to call the DisplyMatrix method for the object /n");
        } else {
            System.out.println("Incorrect input. Kindly enter again / n");
        }
    }

    public static Matrix MatrixReader() throws FileNotFoundException {
        System.out.println("Give the filename for the matrix");
        Scanner filescanner = new Scanner(System.in);
        Scanner scanner = new Scanner(new File(filescanner.nextLine()));
        scanner.nextLine(); // removes the first line in the input file
        String rowLine = scanner.nextLine();
        String[] arr = rowLine.split("=");
        int rows = Integer.parseInt(arr[1].trim());

        String colLine = scanner.nextLine();
        String[] arr2 = colLine.split("=");
        int cols = Integer.parseInt(arr2[1].trim());
        Matrix test = new Matrix(rows, cols);

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                test.setValue(i, j, scanner.nextDouble());
            }
        }


        return test;

    }
}

一些修复:)

关于java - Java 中的矩阵操作 OOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5062310/

相关文章:

java - 连接生产者和两个消费者的最小方式都点对点并在 HornetQ 上广播

Java关键字在eclipse中不改变颜色

java - 为 toString() 格式的输出重载或覆盖 int method() ?

java - 在 IntelliJ 中将 "new"设置为后缀完成

java - 如何使用 <sec :authorize access ="hasRole(' ROLES)"> for checking multiple Roles?

java - java中文件结尾的正则表达式?

java - 如何在android java中使用intent切换到同一 Activity 的两个 fragment

java - Listview圆角选择器问题

java - Hibernate Javax持久性: object is not an instance of declaring class

java - 将 HTML 登陆页面集成到 Hybris 或将 URL 重定向到另一台服务器