2015-09-17 69 views
0

我正在尝试为游戏生成方程。如何使用带参数的构造函数初始化对象数组?

我创建了一个类等式中每学期:

[System.Serializable] 
public class EquationTerm 
{ 
    public int Value { get; set; }  //random int between 1 and 9 
    public int Sign { get; set; }  //1 for +, 2 for -, 3 for *, 4 for/
    public bool IsNextTerm { get; set; } 

    //default positive equationTerm 
    public EquationTerm(int value) 
    { 
     Value = value; 
     Sign = 1; 
     IsNextTerm = false; 
    } 

    public EquationTerm(int value, int sign, bool nextTerm) 
    { 
     Value = value; 
     Sign = sign; 
     IsNextTerm = nextTerm; 
    } 
} 

然后,我创建两个数组,以保持等式的左侧和右侧。我想使用一个InitializeArray函数来使用我的构造函数来生成这两个数组,除了我不能使用它们,因为它们都有参数。 有没有办法解决这个问题?

public class EquationGenerator : MonoBehaviour 
{ 
    EquationTerm[] LeftTerms; 
    EquationTerm[] RightTerms; 

    void Start() 
    { 
     //Initialize both side with a random number of terms 
     LeftTerms = InitializeArray<EquationTerm>(Random.Range (1, 6)); 
     RightTerms = InitializeArray<EquationTerm>(Random.Range (1, 6)); 
    } 

    EquationTerm[] InitializeArray<EquationTerm>(int length) where EquationTerm : new() 
    { 
     EquationTerm[] array = new EquationTerm[length]; 
     array [0] = new EquationTerm (Random.Range (1, 10)); 
     for (int i = 1; i < length; ++i) 
     { 
      array[i] = new EquationTerm (Random.Range (1, 10), Random.Range (1, 5), true); 
     } 

     return array; 
    } 

我在其他岗位,我可以用Activator.CreateInstance看到,所以我试着写

array[0] = (EquationTerm)Activator.CreateInstance(typeof(EquationTerm), new object[] { EquationTerm (Random.Range (1, 10)) }); 

,但它告诉我,激活不存在。

+0

请告诉我Random.Range?是否你想创建一个Random类的对象并调用.Next(minvalue,maxvalue)? – singsuyash

+0

此外,为什么它是一个通用的方法,当它所期望的是方程式? – singsuyash

+0

我正在使用Random.Range来获得一个随机的int。例如,InitializeArray (Random.Range(1,6));应该给我一个1到5个EquationTerm对象的数组。我不确定要理解你的第二个问题吗? – phlipe

回答

0

你为什么不尝试一个非通用版本:

public class EquationGenerator 
     { 
      EquationTerm[] LeftTerms; 
      EquationTerm[] RightTerms; 

      void Start() 
      { 
       //Initialize both side with a random number of terms 
       LeftTerms = InitializeArray(Random.Range(1, 6)); 
       RightTerms = InitializeArray(Random.Range(1, 6)); 
      } 

      EquationTerm[] InitializeArray(int length) 
      { 

       EquationTerm[] array = new EquationTerm[length]; 
       array[0] = new EquationTerm(Random.Range(1, 10)); 
       for (int i = 1; i < length; ++i) 
       { 
        array[i] = new EquationTerm(Random.Range(1, 10), Random.Range(1, 5), true); 
       } 

       return array; 
      } 
     } 
+0

请使用UnityEngine中的Random.Range。 – singsuyash

+0

它完美的作品,谢谢! – phlipe

+0

正如你所说,只需要改变'新Random()。Next(1,10)'与:'Random.Range(1,10)' – phlipe

相关问题