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.
精彩评论