我有4个布尔参数,用于清理我使用Nport从比例中获得的字符串。我必须在框架3.5 VS 2008中这样做。
我有16种可能的输入组合:
对于每种情况,我必须对我给该方法的字符串执行不同的操作。
但是,如果不编写许多交织在一起的if
和else
条款,我该怎么办呢?
我可以在屏幕上打印出来,但根据我的说法,转换是不可能的,框架3.5中还没有元组。
public void CompositionBooleans(string result, int counter)
{
if (counter == 0)
return;
bool[] booleans = new bool[2] { true, false };
for (int j = 0; j < 2; j++)
{
StringBuilder stringBuilder = new StringBuilder(result);
stringBuilder.Append(string.Format("{0} ", booleans[j].ToString())).ToString();
if (counter == 1)
Console.WriteLine(stringBuilder.ToString());
CompositionBooleans(stringBuilder.ToString(), counter - 1);
}
}
这是我用来打印出来的代码。
但我需要这些情况,并且如果其他结构将永远需要,并且根本不灵活。 有人知道怎么做吗?
答案 0 :(得分:1)
如果你真的有16个可能的组合中的每一个都有一个不同的过程,我建议将布尔数组转换成一个int并打开那个int:
int i = booleans[0]?1:0
+ 2*(booleans[1]?1:0)
+ 4*(booleans[2]?1:0)
+ 8*(booleans[3]?1:0);
switch (i)
{
case 0: //false false false false
case 1: //true false false false
case 2: //false true false false
//...
case 15: //true true true true
}
但你确定每种情况都完全不同,而不仅仅是4个方面的组合吗?
答案 1 :(得分:0)
public static void main(String[] args)
{
boolean[] items = new boolean[] {true, true, true, true};
int actionIndex = getActionIndex(0, 0, items);
//do your action here: you could store lambda expressions and apply them
System.out.write(actionIndex);
}
public static int getActionIndex(int currentItem, int currentIndex, boolean[] items)
{
if(currentItem == items.length)
{
return currentIndex;
}
if(items[currentItem])
{
currentIndex += Math.pow(2, (items.length - 1) - currentItem);
}
return getActionIndex(++currentItem, currentIndex, items);
}