初始化多维数组

时间:2010-04-20 05:39:44

标签: java arrays

我有一个3多维数组:

int[][][] env;

我想用文本文件中的数据初始化。文本文件中的数据如下所示:

 {                                                {  { 0, 1,-1},     
                                                     { 0, 2,-1},
                                                     {-1,-1,-2},
                                                     { 0, 0, 0}   },

                                                { { 0, 0,-1},
                                                  { 0, 0,-1},
                                                  {-1,-1,-2},
                                                  { 0, 0, 0}    } 
  }

实际上,如果有必要,可以删除荣誉并用不同的字符替换。如果有更好的方法来格式化文本文件中的值,那么欢迎它。

我正在寻找使用文本文件中的值初始化java程序中数组的最佳方法。

感谢您的所有帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

此代码编译:

int[][][] env =

 {                                                {  { 0, 1,-1},     
                                                     { 0, 2,-1},
                                                     {-1,-1,-2},
                                                     { 0, 0, 0}   },

                                                { { 0, 0,-1},
                                                  { 0, 0,-1},
                                                  {-1,-1,-2},
                                                  { 0, 0, 0}    } 
  }

;

你想要的不仅仅是这个???


如果这就是你所要求的,那么Java没有#include。如果您确实需要在运行时读取文件的内容,那么这是一个I / O和解析相关的问题,而不是真正的多维数组。

答案 1 :(得分:0)

趣!

以下Perl程序将数据转换为更易消化的格式,其中每个输出行是数组索引,后跟整数值。程序使用连续的正则表达式(“\ G”和“c”标志)来拾取最后一个匹配的位置。有一个小数字切片处理外部“{...}”。

#!perl -w                                                                          
my $content = do {local $/=undef; <>};
my @stack = ();
my $count = 0;
while (1) {
   if ($content =~ m/\G\s*\{/cgms) {
      push @stack, $count;
      $count = 0;
   } elsif ($content =~ m/\G\s*\}\s*,?/cgms) {
      $count = pop @stack;
      $count++;
   } elsif ($content =~ m/\G\s*(-?\d+)\s*,?/cgms) {
      print "@stack[1 .. $#stack] $count $1\n";
      $count++;
   } elsif ($content =~ m/\G\s*\z/cgms) {
      last;
   } else {
      my ($err) = $content =~ m/\G\s*(.{1,20})/cgms;
      die "Syntax error: $err\n";
   }
}

以下是数据集的示例输出:

0 0 0 0
0 0 1 1
0 0 2 -1
0 1 0 0
0 1 1 2
0 1 2 -1
0 2 0 -1
0 2 1 -1
0 2 2 -2
0 3 0 0
0 3 1 0
0 3 2 0
1 0 0 0
1 0 1 0
1 0 2 -1
1 1 0 0
1 1 1 0
1 1 2 -1
1 2 0 -1
1 2 1 -1
1 2 2 -2
1 3 0 0
1 3 1 0
1 3 2 0