簡體   English   中英

將字符串轉換為int數組時,為什么會得到空指針?

[英]why am i getting a null pointer when converting string to int array?

我的主要方法:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String string1;
    string1 = input.next();

    LargeInteger firstInt = new LargeInteger(string1);

    System.out.printf("First integer: %s \n", firstInt.display());
}

LargeInteger類:

public class LargeInteger {

    private int[] intArray;

    //convert the strings to array
    public LargeInteger(String s) {
        for (int i = 0; i < s.length(); i++) {
            intArray[i] = Character.digit(s.charAt(i), 10); // in base 10
        }
    }

    //display the strings
    public String display() {
        String result = "";

        for (int i = 0; i < intArray.length; i++) {
            result += intArray[i];
        }
        return result.toString();
    }
}

您沒有實例化數組。 您需要類似:

   private int[] intArray = new int[SIZE];

其中size是數組的長度。

private int[] intArray;

成員變量默認情況下為null ,因此您需要對其進行初始化。

您最有可能希望它的大小與字符串相同:

public LargeInteger(String s) {
    intArray = new int[s.length()]; // Create the actual array before you try to put anything in it
    for (int i = 0; i < s.length(); i++) {
        intArray[i] = Character.digit(s.charAt(i), 10); // in base 10
    }
}

或者,您應該使用可自行調整大小的容器,例如ArrayList

您沒有初始化數組intArray,那樣您會出錯,這是完整的程序

import java.util.Scanner;

class  TestForNull {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String string1;
        string1 = input.next(); 

        LargeInteger firstInt = new LargeInteger(string1);

        System.out.printf ("First integer: %s \n", firstInt.display());
    }

}

這是LargeInteger

public class LargeInteger {

    private int[] intArray;
    //convert the strings to array
    public LargeInteger(String s) {
        intArray = new int[s.length()];
        for (int i = 0; i < s.length(); i++) {
            intArray[i] = Character.digit(s.charAt(i), 10); // in base 10
        }
    }

    //display the strings
    public String display() {           
          String result="";

          for (int i = 0; i < intArray.length; i++) {     
            result += intArray[i];
          }
          return result.toString();
        }   
}

通過Integer.parseInt的不同方法Integer.parseInt(“ yourInt”);

為了實現您的目標:

String a = "12345667788" //sample
String b = "";
int [] vecInt = new int[a.length()];  // The lack of initialization was your mistake as the above stated
for(int i=0; i< a.length(); i++)
{
   b = a.substring(0,1);
   a= a.substring(1);
   vecInt[i] = Integer.parseInt(b);
}

請注意Double,長距離的范圍遠大於Integer,在您的情況下,這足以避免數組!

你忘了初始化數組intArray

我建議使用java.util.List

您忘記了初始化數組。 您已經在構造函數中編寫了它,並且在方法或構造函數中聲明的變量需要同時初始化。

注意:除非您沒有其他選擇,否則不建議在Constructor中實現邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM