我想将此二维化学物名称数组及其对应的数字按降序排序。该算法的前半部分通过将氮气放在顶部,将硫放在第二个顶部来工作。但是,最后两个,即氢气和氨气,彼此之间并不交换行。

String[,] chem = new String[4, 2];
chem[0, 0] = "Hydrogen";
chem[0, 1] = "221";
chem[1, 0] = "Sulphur";
chem[1, 1] = "431";
chem[2, 0] = "Ammonia";
chem[2, 1] = "332";
chem[3, 0] = "Nitrogen";
chem[3, 1] = "688";
string temp, temp2;
int key = 0;
for (int i = 1; i < 4; i++)
{
    for (int j = 0; j < 2; j++)
    {
        key = 0;
        for (int p = i - 1; p >= 0 && key != 1;)
        {
            if (int.Parse(chem[i, 1]) > int.Parse(chem[j, 1]))
            {
                temp = chem[i, 1];
                chem[i, 1] = chem[j, 1];
                chem[j, 1] = temp;
                temp2 = chem[i, 0];
                chem[i, 0] = chem[j, 0];
                chem[j, 0] = temp2;
            }
            else { key = 1; }
        }
    }
}

最佳答案

要点:


您的变量p未被任何地方引用或更新,因此最里面的for循环实际上正在执行while(key != 1)
j = 0j < 2的循环看起来很明智(i和j通常用于不同的索引,而数组是new String[4, 2];)-但实际上您是将它们用于同一索引。您可能希望将jj = 0运行到j < 4,而不是将j = 0运行到j < 2


尚未能够对此进行测试-道歉

10-06 09:36