开发者

matrix manipulation in java OOP

This code gives me errors at lines 153, 158 and 163 stating"variables not found". i need to print them using the menu but not sure if this is working. help would be appreciated.

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



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");
    }
    System.out.print("\n");
  }
 }



 public class Lab1 {

 public static void main(String args[]) throws FileNotFoundException {

    int choice;
    Scanner in = new Scanner(System.in);

    Boolean loopcont= true;
    while (loopcont){   
    System.out.println("1. Add two matrices \n");
    System.out.println("2. Multiplymatrix 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");

    System.out.println("Enter your choice \n");
    choice = in.nextInt();

    switch (choice) {

    case 1:{ 
        System.out.println("For the first matrix");
        Matrix m1 =  MatrixReader();
        m1.DisplayMatrix();
       开发者_如何学编程 System.out.println("For the second matrix");
        Matrix m2 =  MatrixReader();
        m2.DisplayMatrix();
        Matrix m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
        m3 = m1.AddMatrix(m2);
        m3.DisplayMatrix();
        break ;
    }
    case 2:{
        System.out.println("For the first matrix");
        Matrix m1 =  MatrixReader();
        m1.DisplayMatrix();
        System.out.println("For the second matrix");
        Matrix m2 =  MatrixReader();
        m2.DisplayMatrix();
        Matrix m3 = new Matrix(m1.getNoRows(), m2.getNoCols());
        m3 = m1.MultiplyMatrix(m2);
        m3.DisplayMatrix();
        break;

    }
    case 3:{
        System.out.println("For the first matrix");
        Matrix m1 = MatrixReader();
        m1.DisplayMatrix(); 
        Matrix m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
        m3 = m1.TransposeMatrix();
        m3.DisplayMatrix();
        break;
    }
    case 4:{
        int printInput;
        System.out.println("What matrix do you want to print?");
        printInput = in.nextInt();
        switch(printInput){
        case 1:{    
        System.out.println("Printing Matrix m1");
        m1.DisplayMatrix();
        break;
        }
        case 2:{
        System.out.println("Printing Matrix m2");
        m2.DisplayMatrix();
        break;
        }
        case 3:{
        System.out.println("Printing Matrix m3");
        m3.DisplayMatrix();
        break;
        }
        default:{
        System.out.println("Invalid Input. please enter again");
        break;
        }
    }
}   
case 5:{
      loopcont= false;
      break;
}
    default:{
        System.out.println("Incorrect input. Kindly enter again \n");
        break;
     }
    }
 }
}

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;

   }
}


EDIT:

Under Case 4: variables m1, m2, m3 are not initialized.

    Matrix m1;
    Matrix m2;
    Matrix m3;

switch (choice) {
    case 1: {
        System.out.println("For the first matrix");
        m1 = MatrixReader();
        m1.DisplayMatrix();
        System.out.println("For the second matrix");
        m2 = MatrixReader();
        m2.DisplayMatrix();
        m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
        m3 = m1.AddMatrix(m2);
        m3.DisplayMatrix();
        break;
    }
    case 2: {
        System.out.println("For the first matrix");
        m1 = MatrixReader();
        m1.DisplayMatrix();
        System.out.println("For the second matrix");
        m2 = MatrixReader();
        m2.DisplayMatrix();
        m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
        m3 = m1.MultiplyMatrix(m2);
        m3.DisplayMatrix();
        break;

    }
    case 3: {
        System.out.println("For the first matrix");
        m1 = MatrixReader();
        m1.DisplayMatrix();
        m3 = m1.TransposeMatrix();
        m3.DisplayMatrix();
        break;
    }
    case 4: {
        int printInput;
        System.out.println("What matrix do you want to print?");
        printInput = in.nextInt();
        switch (printInput) {
        case 1: {
            System.out.println("Printing Matrix m1");
            m1 = MatrixReader();
            m1.DisplayMatrix();
            break;
        }
        case 2: {
            System.out.println("Printing Matrix m2");
            m2 = MatrixReader();
            m2.DisplayMatrix();
            break;
        }
        case 3: {
            System.out.println("Printing Matrix m3");
            m3 = new Matrix(m1.getNoRows(), m1.getNoCols());
            m3.DisplayMatrix();
            break;
        }
        default: {
            System.out.println("Invalid Input. please enter again");
            break;
        }
        }
    }
    case 5: {
        loopcont = false;
        break;
    }
    default: {
        System.out.println("Incorrect input. Kindly enter again \n");
        break;
    }
}


If you tired to write your own code with matrix, just download library I developed. It can add, multiply, invert, transpond, calculate determinant and solve linear systems.

please check: Linear Math Library

This is open source you can download the source code too and look how in works.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜