处理传递的String变量时获取NullPointerException

问题描述 投票:0回答:1

我正在尝试编写一个项目,以处理精简版的Excel工作表。我允许用户使用的命令之一是以=的形式将值分配给特定的单元格。即A3 = 72.3%。将值分配给单元格后,便会打印出具有更新后更改的整个电子表格。

我创建了不同的类来表示不同类型的单元格。[值单元格]是将包含任何双精度值的单元格,[百分比单元格]是将包含任何百分比值的单元格,[文本单元格]是将包含文本的单元格。

[当我尝试运行程序时,我尝试为单元格分配百分比值。 (A2 = 7.25%)当程序打印出带有新分配的A2百分比单元格的整个电子表格时,应该从百分比中截断小数并只显示7%。但是,我一直收到此错误消息

Exception in thread "main" java.lang.NullPointerException
    at PercentCell.abbreviatedCellText(PercentCell.java:18)
    at Spreadsheet.getGridText(Spreadsheet.java:127)
    at Spreadsheet.processCommand(Spreadsheet.java:73)
    at TextExcel.main(TextExcel.java:20)

这是我的代码的一部分,它根据用户输入的内容分配特定的单元格类型:

//assignment command   
      } else if (command.contains("=")) {
         int eqIndex = command.indexOf("=");
         if (!command.substring(eqIndex - 1, eqIndex).equals(" ") || !command.substring(eqIndex + 1, eqIndex + 2).equals(" ")) {
            return "Formatting Error: please include a space before and after the ="; //error message
         } else {
            String[] input = command.split(" ", 3);
            SpreadsheetLocation cell = new SpreadsheetLocation(input[0]);
            int col = cell.getCol();
            int row = cell.getRow();
            if (col > COLUMNS || row > ROWS) {
               return "Error: cell outside of spreadsheet"; //error message
            }
            //assigning a textcell
            if (input[2].contains("\"")) {
               String inputValue = input[2].substring(1, input[2].length() - 1);
               TextCell textCell = new TextCell(inputValue);
               spreadsheet[row][col] = textCell;
            //assigning a percent cell 
            } else if (input[2].contains("%")) {
               PercentCell percentCell = new PercentCell(input[2]);
               spreadsheet[row][col] = percentCell;

百分比单元格扩展超类,实际单元格:

public class RealCell implements Cell {
   private String fullText;

   public RealCell(String input) {
      this.fullText = input;
   }

   //method that returns the display of the abbreviated cell 
   public String abbreviatedCellText() {
      if (fullText.length() > 10) {
         return fullText.substring(0, CELLWIDTH);
      } else {
      String output = fullText;
      while(output.length() < CELLWIDTH) {
         output += " ";
      }
         return output;
      }
   }

   //method that returns the actual value in a real cell 
   public String fullCellText() {
      return fullText;
   } 

   //method that parses the user input into a double
   public double getDoubleValue() {
      return Double.parseDouble(fullText);   
   } 
}

现在是我的代码的问题部分,即百分比单元格类:

public class PercentCell extends RealCell {
   private String fullText;

   public PercentCell(String input) {
      super(input);
   }

   //method that returns the display of the abbreviated cell, truncating the decimal  
   public String abbreviatedCellText() {
      String value = fullText;
      if (value.contains(".")) {
         int decIndex = fullText.indexOf(".");
         value = value.substring(0, decIndex) + "%";
      }  
      if (value.length() > 10) {
         return value.substring(0, CELLWIDTH);
      } else {
      String output = value;
      while(output.length() < CELLWIDTH) {
         output += " ";
      }
         return output;
      }
   }

   //method that parses the user input into a double and returns the percent value into a decimal
   public double getDoubleValue() {
      double decimal = Double.parseDouble(fullText.substring(0, fullText.length() - 1));
      return decimal/100;   
   }
}

如何解决此错误?如果需要有关我的代码的任何说明(因为这不是我的整个项目),请告诉我!

java inheritance nullpointerexception
1个回答
0
投票
     public class PercentCell extends RealCell {

     public PercentCell(String input) {
          super(input);
       }

       //method that returns the display of the abbreviated cell, truncating the decimal  
       public String abbreviatedCellText() {
          String value = super.fullCellText();
          if (value.contains(".")) {
             int decIndex = value.indexOf(".");
             value = value.substring(0, decIndex) + "%";
          }  
          if (value.length() > 10) {
             return value.substring(0, CELLWIDTH);
          } else {
          String output = value;
          while(output.length() < CELLWIDTH) {
             output += " ";
          }
             return output;
          }
   }

您使用fullText字段时未提供值,并且fullText值始终为null我认为这是问题所在,但如果有帮助,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.