0

私は単純なコード ジェネレーター (非ランダム) を作成していますが、問題が発生しました。ユーザーは 7 つのテキストフィールドにデータを入力します。次に、その内容が String 型の配列に配置されます。次に、私のコードはその配列を取得し、さまざまな要素を分析して、(私が)使用できるコードを吐き出します。

ただし、String 配列を標準化しようとすると (つまり、すべての要素を小文字の String にします)、プログラム全体が動作しなくなり、null ポインター例外のように見えます。

私の特定のエラーメッセージは次のとおりです。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
 at inventorycodeconverter.codeDisplay.calculateData(codeDisplay.java:48)
    at inventorycodeconverter.InventoryCodeConverterView.button1ActionPerformed(InventoryCodeConverterView.java:315)
    at inventorycodeconverter.InventoryCodeConverterView.access$900(InventoryCodeConverterView.java:23)
    at inventorycodeconverter.InventoryCodeConverterView$5.actionPerformed(InventoryCodeConverterView.java:211)
    at java.awt.Button.processActionEvent(Button.java:392)
    at java.awt.Button.processEvent(Button.java:360)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

問題を引き起こしているように見えるコードのセクションは次のようになります。

public void calculateData(){

     int i;
     for (i = 0; i < calculationBuffer.length; i++){ // calculationBuffer is defined and initialized elsewhere.

         calculationBuffer[i] = calculationBuffer[i].toLowerCase();// this is line 48 where the first error appears to be.
     }


     if (calculationBuffer[0].equals("cap")){
           displayBuffer[0] = "CAP"; // displayBuffer is defined and initialized elsewhere.
     }
     else {
         displayBuffer[0] = "#Error#";
     }


     if (calculationBuffer[1].equals("20/400")) {
           theTA.append("B");
     }
     else if (calculationBuffer[1].equals("20/410")){
           displayBuffer[1] = "C";
     }
     else if (calculationBuffer[1].equals("24/410")){
         displayBuffer[1] = "F";
     }
     else if (calculationBuffer[1].equals("24/415")) {
         displayBuffer[1] = "Y";
     }
     else if (calculationBuffer[1].equals("28/400")){
         displayBuffer[1] = "H";
     }
     else if (calculationBuffer[1].equals("28/415")) {
         displayBuffer[1] = "X";
     }
     else if (calculationBuffer[1].equals("28/410")) {
         displayBuffer[1] = "I";
     }
     else if (calculationBuffer[1].equals("33/400")) {
         displayBuffer[1] = "J";
     }
     else if (calculationBuffer[1].equals("38/400")) {
         displayBuffer[1] = "K";
     }
     else if (calculationBuffer[1].equals("43/400")) {
         displayBuffer[1] = "M";
     }
     else if (calculationBuffer[1].equals("45/400")) {
         displayBuffer[1] = "N";
     }
     else if (calculationBuffer[1].equals("58/400")) {
         displayBuffer[1] = "Q";
     }
     else if (calculationBuffer[1].equals("70/400")) {
         displayBuffer[1] = "S";
     }
     else if (calculationBuffer[1].equals("89/400")) {
         displayBuffer[1] = "T";
     }

 }


 public void displayData() {
      String displayString;
      displayString = Arrays.toString(displayBuffer);
      StringTokenizer st = new StringTokenizer(displayString, ",");

      while(st.hasMoreTokens()){
          String finalText = st.nextToken();

          theTA.append(finalText);
      }
 }
4

3 に答える 3

4

どこかで、次のように配列を宣言しました(おそらく):

String[] calculationBuffer = new String[size];

すべてのインデックスをnulls で初期化します。したがって、NPEを取得しています。

配列を使用する前に、次のようにループ内のすべてのインデックスを埋める必要があります

for(int i=0; i<size; i++)
{
    calculationBuffer[i] = "A String";
}
于 2013-01-24T06:37:44.743 に答える
2

このように文字列配列を宣言している場合String[] calculationBuffer = new String[size];

すべての文字列要素は Null で初期化されるため、この文字列配列に別の場所で値を追加していない場合は、次のようにコードを更新できます。

for (i = 0; i < calculationBuffer.length; i++){ 
      **calculationBuffer[i]="";**
     calculationBuffer[i] = calculationBuffer[i].toLowerCase();// this is line 48 where the first error appears to be.
 }

ありがとう

于 2013-01-24T06:48:02.700 に答える
0

あなたはどこにあなたの計算バッファを埋めますか?

発生するエラーは、calculationBuffer[i] が null であることを示しています。これは、最初の配列を正しく埋めていないことを意味します。

于 2013-01-24T06:33:05.477 に答える