2016-04-22 26 views
2

我想做DFA类的多个对象并通过对象初始化它的字段值。我不想初始化数组大小。如何使用{}直接通过对象初始化数组字段。如何通过对象初始化数组?

当我在类初始化它的工作正常。

int[][] TT={{1,2},{2,1}}; 

但是当我尝试像那样通过对象初始化那么它不工作。 在这里我的代码。

public class DFA { 

    int[][] TT; 
    int IS; 
    int[] FS; 
} 
public static void main(String[] args) { 

    DFA fa1=new DFA(); 
    fa1.IS=0; 
    fa1.FS={1};      //Both FS and TT give error 
    fa1.TT={{1, 2}, {1, 2}, {2, 2}};  

} 
+0

有一个在数组声明时语法糖,你不能使用任何其它时间。你可以做'fa1.TT = new int [] [] {{1,2},{1,2},{2,2}};' –

+0

你可以使用任何Java集合来做你想做的事情,但是正常的java数组不会让你这样做, – xelilof

回答

2

你可以做

int[][] tt = {{1, 2}, {1, 2}, {2, 2}}; 
fa.TT = tt; 

fa1.TT = new int[][] {{1, 2}, {1, 2}, {2, 2}}; 

我建议使用小写字段名称要么。

0

数组常量只能在初始化

被用来让你无论是把它直接在变量(int[] FS = { 1 };),或者你首先初始化数组做到这一点。

public class DFA { 

    int[][] TT; 
    int IS; 
    int[] FS = { 1 }; 

    public static void main(String[] args) { 

     DFA fa1 = new DFA(); 
     fa1.IS = 0; 
     int[] tmpFS = { 1 }; 
     fa1.FS = tmpFS; 
     int[][] tmpTT = { { 1, 2 }, { 1, 2 }, { 2, 2 } }; 
     fa1.TT = tmpTT; 

    } 
} 
0

以下语法:

int[][] TT={{1,2},{2,1}}; 

Array Initializer语法。你可以在声明数组时使用它。你不能分开数组声明和初始化语法。

您应该改用fa1.FS = new int[]{1};

0

在这里你去:

public class DFA { 

     int[][] TT; 
     int IS; 
     int[] FS; 

     public static void main(String[] args) { 

      DFA fa1=new DFA(); 
      fa1.IS=0; 
      fa1.FS=new int[]{1};      //Both FS and TT give error 
      fa1.TT= new int[][]{{1, 2}, {1, 2}, {2, 2}}; 

     } 
}