The following code compiles and runs correctly. I want to run a predefined set of inputs, a script called commands. When i do java Lab1 < commands
it gives me the following errors.
Exception in thread "main" java.lang.NullPointerException
at java.io.File.<init>(File.java:222)
at Lab1.MatrixReader(Lab1.java:207)
at Lab1.main(Lab1.java:120)
Here is the commands file:
1 matrix1.txt matrix2.txt
2
matrix3.txt matrix1.txt
3
m4.txt
4
1
4
2
5
Here is the code:
import java.io.*;
import java.util.*;
class Matrix {
double[][] element;
int rows, cols;
Matrix(){
}
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);
Matrix m1 = new Matrix();
Matrix m2 = new Matrix();
Matrix m3 = new Matrix();
Boolean loopcont= true;
while (loopcont){
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");
System.out.println("Enter your choice \n");
choice = in.nextInt();
//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: {
Sys开发者_如何学编程tem.out.println("Printing Matrix m3");
// m1= MatrixReader();
//m3 = new Matrix(m1.getNoCols(), m1.getNoRows());
m3.DisplayMatrix();
break;
}
default: {
System.out.println("Invalid Input. please enter again");
break;
}
}
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");
BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
String filename = null;
try{
filename = br.readLine();
} catch (IOException ioe) {
System.out.println("IO error");
System.exit(1);
}
//Scanner filename = new Scanner(System.in);
Scanner scanner = new Scanner(new File(filename));
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;
}
}
The sample text file is as follows. I want to take the rows and columns so i can dynamically declare the matrix and then store its values. i get the error saying INPUTMISMATCH exception. help would be appreciated.
<matrix>
rows = 2
cols = 2
1 2
2 4
</matrix>
The exception is thrown in the File
constructor called from MatrixReader
at the line
Scanner scanner = new Scanner(new File(filename));
So the error is that filename
is null, which would occur if the code just above that read the filename from System.in
encountered an end-of-file condition, which you don't check for.
精彩评论