-1

I have a null pointer exception in this my code. What exactly is a null pointer?

How can I fix this? When I remove the if clauses the NPE will be gone. Why is that?

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class InToPost {
   private Stack theStack;
   private String input;
   private String output = "";
   public InToPost(String in) {
      input = in;
      int stackSize = input.length();
      theStack = new Stack(stackSize);
   }
   public String doTrans() {
      for (int j = 0; j < input.length(); j++) {
         char ch = input.charAt(j);
         switch (ch) {
            case '+': 
            case '-':
            gotOper(ch, 1); 
            break; 
            case '*': 
            case '/':
            gotOper(ch, 2); 
            break; 
            case '(': 
            theStack.push(ch);
            break;
            case ')': 
            gotParen(ch); 
            break;
            default: 
            output = output + ch; 
            break;
         }
      }
      while (!theStack.isEmpty()) {
         output = output + theStack.pop();
      }
      System.out.println(output);
      return output; 
   }
   public void gotOper(char opThis, int prec1) {
      while (!theStack.isEmpty()) {
         char opTop = theStack.pop();
         if (opTop == '(') {
            theStack.push(opTop);
            break;
         }
         else {
            int prec2;
            if (opTop == '+' || opTop == '-')
            prec2 = 1;
            else
            prec2 = 2;
            if (prec2 < prec1) { 
               theStack.push(opTop);
               break;
            }
            else
            output = output + opTop;
         }
      }
      theStack.push(opThis);
   }
   public void gotParen(char ch){ 
      while (!theStack.isEmpty()) {
         char chx = theStack.pop();
         if (chx == '(') 
         break; 
         else
         output = output + chx; 
      }
   }

   class Stack {
      private int maxSize;
      private char[] stackArray;
      private int top;
      public Stack(int max) {
         maxSize = max;
         stackArray = new char[maxSize];
         top = -1;
      }
      public void push(char j) {
         stackArray[++top] = j;
      }
      public char pop() {
         return stackArray[top--];
      }
      public char peek() {
         return stackArray[top];
      }
      public boolean isEmpty() {
         return (top == -1);
     }
   }
      public static void main(String[] args) 
   throws IOException {
       BufferedReader read = new BufferedReader (new FileReader("C:\\Users\\Josh\\Desktop\\test.txt"));
       String str = "";
        String s;
        char  in;
        int x=0;
         stack b=new stack();
        char[] store=new char[10];
         Scanner insert=new Scanner(System.in);
        while ((str=read.readLine())!= null)
        {
       if (str.contains("print"))
       {
           System.out.println(str);
       }
       else if (str.contains("read"))
       {
            in=insert.next().charAt(0);
                store[x]=in;
                 x++;
       }

       else if (str.contains("="))
       {String input = "";
      String output;
      input = read.readLine();
      input = input.replace(";", "");
      InToPost theTrans = new InToPost(input);
      output = theTrans.doTrans(); 
      System.out.println("Postfix is " + output + '\n');
       }
   }
}}

It said that nullpointerexeption is at line 126. What should I do to my code to fix this?

Mat
  • 202,337
  • 40
  • 393
  • 406

2 Answers2

0

First, please see the comment by guido.

Secondly your code is a mess. Fix it. Perhaps you should have pointed out which line is 126.

Copying and pasting your code I have this as line 126:

input = input.replace(";", "");

If input is null, or it points at nothing, then you cannot call the method replace on it. It is like telling the pizza delivery guy that your roommate will pay for the pizza when you live alone.

Keep in mind, that your actual line 126 may be different then what you copied and pasted here. You might also try a google search on error messages.

Pete B.
  • 3,188
  • 6
  • 25
  • 38
0

the only reason for this, as explained on other responses is:

Based on the documentation, the BufferedReader.readLine() returns null only when the end of the stream is reached. This means if the first call to readLine() returns null, there was nothing in the input stream to begin with.

so, your File was not located or could not be read

OscarG
  • 385
  • 5
  • 11