0

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: {
        System.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>
5
  • which lines in your code correspond to the line numbers in the error messages? Commented Feb 23, 2011 at 3:41
  • 4
    You're kidding, right? That's a ton of code, and yet we don't actually know what the input is. Bust out your debugger and put a breakpoint at the line where the NullPointerException is thrown. Figure out what's null, why, and fix it. Commented Feb 23, 2011 at 3:41
  • its the Scanner scanner = new Scanner (new File(filename)); and up in the switch statement with m1 = MatrixReader(); I put in the sample input for matrix1.txt. the rest follow the same pattern. the commands file is given above. Commented Feb 23, 2011 at 3:45
  • 1
    You say "When i do java Lab1'<'commands..." Is that really how you typed it? Putting the '<' in quotes will cause it to be interpreted as a parameter and not input redirection. Commented Feb 23, 2011 at 3:53
  • no i just do java Lab1 <commands Commented Feb 23, 2011 at 3:56

1 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

3 Comments

In your original post you say "When i do java Lab1'<'commands..." Is that really how you typed it? Putting the '<' in quotes will cause it to be interpreted as a parameter and not input redirection.
no i do it without the quotes. stackoverflow wont let me put the less than sign in there without the quote
@dawnoflife: use backticks to denote code or a command like so a backtick: `

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.