开发者

matrix manipulation in java OOP

开发者 https://www.devze.com 2023-02-12 22:34 出处:网络
This code gives meerrors 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.

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

精彩评论

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