繁体   English   中英

在Java中的类实例中初始化变量数组

[英]Initializing an array of variables within a class instance in Java

我来自C背景,并且遇到了Java问题。 目前,我需要初始化对象数组中的变量数组。

我在C中知道它类似于在structs数组中malloc-ing int数组,如:

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 我做错了什么,是否有更好的方法来做到这一点?

初始化阵列时

Route[] route = new Route[numRoutes];

numRoutes个槽都填充了它们的默认值。 对于引用数据类型,默认值为null ,因此当您尝试在第二个for循环中访问Route对象时,它们都为null ,您首先需要以某种方式初始化它们,如下所示:

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];
Route[] route = new Route[numRoutes];

在java中创建一个Objects数组时,所有的槽都是用默认值声明的,如下所示Objects = null primitives 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];
  }
for (int i = 0; i < numRoutes; i++) {
  route[i] = new Route();
  route[i].departureTimes = new int[count];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM