arraylist数组参数设置问题,求解,急……
问题:
把二维数组每一列编号存储在arrayLianHao中,当每一列元素“1”的个数少于2时,删除此列,并删除arrayLianHao中对应编号。然后二维数组每一列两两作“与”运算,arrayLianHao中对应元素连接,如:二维数组第一列与第二列作“与”运算,则arrayLianHao中第一列和第二列编号连接,成为“01”,依次类推,形成新数组。
代码错误(红色部分):
未处理 ArgumentOutOfRangeException
索引超出范围。必须为非负值并小于集合大小。参数名:index
class Program
{
static void Main(string[] args)
{
ArrayList arrayLianHao = new ArrayList();
string []number1 = { "0", "1", "2", "3", "4", "5" };
arrayLianHao.AddRange(number1);
int[,] arrayYuanShi = {{0,0,0,0,0,0},{0,1,0,1,0,0},{1,0,1,0,1,0},{1,1,1,0,1,0},{0,0,1,0,1,0}};
bool Flag; int k; k = arrayYuanShi.GetLength(1); ArrayList arrayLianHao1 = new ArrayList();
do
{
int countPD = 0;
int[]arrayPD = PanDuan(arrayYuanShi,k,arrayLianHao);
for(int i = 0;i<arrayPD.Length;i++){countPD ++;}
if (countPD == 0) { break;}
Console.WriteLine(arrayYuanShi.GetLength(1));
Console.ReadLine();
int[,]arrayXJZ = XinJuZhen(arrayYuanShi,arrayPD , k);
for(int m = 0;m< arrayXJZ.GetLength(0);m++)
{
for(int n = 0;n<arrayXJZ.GetLength(1);n++)
{Console.Write(arrayXJZ[m,n]);}
Console.WriteLine();
}
Console.ReadLine();
k = arrayYuanShi.GetLength(1) - countPD;
int [,] arrayYCZ = YuCaoZuo( arrayXJZ,countPD,k,arrayLianHao,arrayLianHao1);
for(int b = 0;b<5;b++)
{
for(int c = 0;c<k*(k-1)/2;c++ )
{Console.Write(arrayYCZ[b,c]);}
Console.WriteLine();
}
Console.ReadLine();
for (int i = 0; i < 5; i++)
for (int j = 0; j < 6; j++)
{
arrayYuanShi[i, j] = 0;
arrayYuanShi[i, j] = arrayYCZ[i, j];
}
arrayLianHao.Clear();
for (int x= 0; x < k * (k - 1) / 2; x++)
arrayLianHao.Add(arrayLianHao1[x]);[b][/b] k = k * (k - 1) / 2;
if (countPD == 0) Flag = false;
else Flag = true;
}while(Flag);
for (int i = 0; i < arrayLianHao.Count; i++)
{ Console.WriteLine(arrayLianHao[i]); }
Console.ReadLine();
Console.WriteLine("ok!");
Console.ReadLine();
}
public static int[] PanDuan(int[,] arrayYuanShi,int k,ArrayList arrayLianHao)
{
int count = 0;
for(int j = 0;j < k;j++)
{
count = 0;
for(int i = 1;i<arrayYuanShi.GetLength(0);i++)
{
if(arrayYuanShi[i,j]==1) {count++;}
else continue;
}
if(count < 2) {arrayYuanShi[0,j] = 1;} else {arrayYuanShi[0,j] = 0;}
}
for(int i = 0;i< arrayYuanShi.GetLength(0);i++)
{
for(int j = 0;j < k;j++)
{
Console.Write(arrayYuanShi[i,j]);
}
Console.WriteLine();
}
Console.ReadLine();
ArrayList arrayLieHao = new ArrayList();
int t;
for (t = 0; t < arrayYuanShi.GetLength(1); t++)
{
if (arrayYuanShi[0, t] == 1) { Console.Write(t); arrayLianHao.RemoveAt(t); [b][/b]Console.WriteLine("shanchule:", t); }
if (arrayYuanShi[0, t] == 0) { continue; }
arrayLieHao.Add(t);
}
Console.ReadLine();
int[] arrayPD = (int[])arrayLieHao.ToArray(typeof(int));
return arrayPD;
}
public static int[,] XinJuZhen(int [,]arrayYuanShi,int [] arrayPD ,int k)
{
int [,]array5 = new int[5,k];
int u;
for(int t = 0;t < arrayPD.Length;t++)
{
u=(int)arrayPD[t];
u=u - t;
for(int j = 0;j<k-1;j++)
{
for(int i = 0;i<5;i++)
{
int m = i;int n = j;
if (j < u) { array5[m, n] = arrayYuanShi[i, j]; }
else array5[m, n] = arrayYuanShi[i, j + 1];
}
}
for(int i=0;i<5;i++)
for(int j=0;j<k;j++)
arrayYuanShi[i,j] = array5[i,j];
}
return array5;
}
public static int[,] YuCaoZuo(int[,] arrayXJZ,int countPD,int k,ArrayList arrayLianHao,ArrayList arrayLianHao1)
{
int[,] array2 = new int[5,k*(k-1)/2];
int q = 0;bool d,e;
for (int j = 0; j < k -1; j++)
{
for (int a = j + 1; (a < k) && (q < (k*(k-1)/2)); a++, q++)
for(int i=0;i<5;i++)
{
int b = i;
d = Convert.ToBoolean(arrayXJZ[i,j]);
e = Convert.ToBoolean(arrayXJZ[i,a]);
array2[b,q] = Convert.ToInt32(d && e);
}
}
for (int i = 0; i < k - 1; i++)
{
for (int j = i + 1; (j < k) && (q < k * (k - 1) / 2); j++, q++)
{
foreach (char c in arrayLianHao[i].ToString()) { if ((arrayLianHao[j].ToString()).IndexOf(c) >= 0) { (arrayLianHao[j].ToString()).Replace("c",""); } }
arrayLianHao1[q] = arrayLianHao[i] .ToString()+ arrayLianHao[j].ToString();
}
}
return array2;
}
}
}
[解决办法]
LZ我建议你
1.把你写的这些删了
2.把问题描述清楚,给出示例输入和实例输出
3.用List<T>来代替ArrayList描述
4.打上个[LINQ]的标签
不但时髦百倍,而且会有更多的人关注。
(一般来说长代码还没有注释是不会有人看的)
[color=#FFFFFF](不过LZ代码真的Sh1t一样)[/color]