有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java空指针验证

我的代码中有一个空指针异常。什么是空指针

我怎样才能解决这个问题?当我删除if子句时,NPE将消失。为什么呢

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');
       }
   }
}}

它说nullpointerexeption位于第126行。 我应该如何处理我的代码来修复此问题


共 (2) 个答案

  1. # 1 楼答案

    首先,请看guido的评论

    其次,你的代码一团糟。修好它。也许你应该指出哪一行是126

    复制和粘贴代码我将其作为第126行:

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

    如果输入为null,或者它不指向任何内容,则不能对其调用replace方法。这就像告诉送披萨的人,当你一个人住的时候,你的室友会支付披萨的费用

    请记住,您的实际第126行可能与您在此处复制和粘贴的内容不同。你也可以尝试谷歌搜索错误信息

  2. # 2 楼答案

    正如其他回复中所解释的,唯一的原因是:

    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.

    因此,您的文件找不到或无法读取