Matrix Manipulation OOP in Java
Hey. So my assignment was to read the text files to form the matrices and then perform various functions such as addition and multiplication on the matrices. I fixed some of the errors but the compiler refuses to accept the .get and .set methods for some reason.
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.nextDo开发者_如何学Pythonuble();
}
}
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;
}
}
Some fixes :)
The reason your class isn't working is because you aren't calling the get and set methods properly. In your code you have stuff like:
if (this.getNoCols != m2.getNoRows)
which won't work. this.getNoCols does not run the method getNoCols().
if (this.getNoCols() != m2.getNoRows())
will work. But this simple error pops up in many different parts of your program and you will have to find them all before it works.
精彩评论