3

私は C のバックグラウンドを持っており、Java で問題が発生しています。現在、オブジェクトの配列内の変数の配列を初期化する必要があります。

Cでは、次のような配列内のmalloc-ing配列に似ていることを知っています:intstructs

typedef struct {
  char name;
  int* times;
} Route_t

int main() {
  Route_t *route = malloc(sizeof(Route_t) * 10);
  for (int i = 0; i < 10; i++) {
    route[i].times = malloc(sizeof(int) * number_of_times);
  }
...

これまでのところ、Javaでは

public class scheduleGenerator {

class Route {
        char routeName;
    int[] departureTimes;
}

    public static void main(String[] args) throws IOException {
      /* code to find number of route = numRoutes goes here */
      Route[] route = new Route[numRoutes];

      /* code to find number of times = count goes here */
      for (int i = 0; i < numRoutes; i++) {
        route[i].departureTimes = new int[count];
...

しかし、その吐き出すNullPointerException. これを行うためのより良い方法はありますか?

4

3 に答える 3

4

配列を初期化するとき

Route[] route = new Route[numRoutes];

numRoutesすべてデフォルト値で埋められたスロットがあります。参照データ型の場合、デフォルト値はであるため、2 番目のループでオブジェクトにnullアクセスしようとすると、それらはすべてになります。まず、次のように初期化する必要があります。Routefornull

public static void main(String[] args) throws IOException {
      /* code to find number of route = numRoutes goes here */
      Route[] route = new Route[numRoutes];

      // Initialization:
      for (int i = 0; i < numRoutes; i++) {
           route[i] = new Route();
      }

      /* code to find number of times = count goes here */
      for (int i = 0; i < numRoutes; i++) {
        // without previous initialization, route[i] is null here 
        route[i].departureTimes = new int[count];
于 2012-12-21T06:43:35.617 に答える
1
Route[] route = new Route[numRoutes];

Java では、オブジェクトの配列を作成すると、すべてのスロットが以下のようにデフォルト値で宣言されます オブジェクト = null プリミティブ int = 0 boolean = false

これらの numRoutes スロットはすべてデフォルト値、つまり null で埋められています。ループ内の Route オブジェクトにアクセスしようとすると、配列参照が null を指しています。まず、次のように初期化する必要があります。

  // Initialization:
  for (int i = 0; i < numRoutes; i++) {
       route[i] = new Route();
       route[i].departureTimes = new int[count];
  }
于 2012-12-21T06:52:48.457 に答える
0
for (int i = 0; i < numRoutes; i++) {
  route[i] = new Route();
  route[i].departureTimes = new int[count];
于 2012-12-21T06:46:37.717 に答える