【问题标题】:Can't fill in 2D array with value in while loop无法在while循环中用值填充二维数组
【发布时间】:2015-03-12 14:06:28
【问题描述】:

我正在尝试对一些值进行排序并将它们放入二维数组中,但我不断发现数组中所有位置的值都是 0。

我的代码看起来有点像这样,这是简短的版本。重要的一点是“分类”数组,我想做的是用 y 的值填充每个特定位置 ex [0,a] 的数组。

class Program
{
    struct Säljare
    {            
        public int artiklar;
    }

    static void Main(string[] args)
    {
        Säljare[] s = new Säljare[6];

        for (int x = 0; x <= 5; x++)
        {                          
            Console.Write("Antal sålda artiklar: ");
            s[x].artiklar = int.Parse(Console.ReadLine());
        }

        Console.WriteLine(s.Length);

        int[,] kategori = new int[2,6];

        int a = 0;
        int b = 0;

        int y = 0;
        while (y < s.Length)
        {
            if (s[y].artiklar < 50)
            {
                kategori[0, a] = y;
                a++;
            }

            else if (50 <= s[y].artiklar)
            {
                kategori[1, b] = y;
                b++;
            }          

            y++;
        }

        Console.WriteLine("Antal");

        int z = 0;
        for (int x = 0; x < a; x++)
        {
            kategori[0, x] = z;
            Console.WriteLine(s[z].artiklar);
        }

        for (int x = 0; x < b; x++)
        {
            kategori[1, x] = z;
            Console.WriteLine(s[z].artiklar);
        }            
    }
}

【问题讨论】:

  • 你调试了吗?初始化时整数数组将始终充满零。s.Length 等于什么?您必须包括 s 是什么以及它包含哪些数据,以便我们在这里真正为您提供帮助。
  • 是的,我已经尝试过了,但没有出现任何错误。 s.Legnth 指的是一个结构体,它是代码的一部分,它在任何情况下都等于 6。
  • 可能没有errors 出现。但至少您可以遵循您的逻辑并监控您的变量,以便为您提供一个线索,您在哪里出错了。这似乎并不难通过最少的调试来追踪。
  • 问题是我尝试过使用跟踪,写出 int b 和 int a 等等于什么,并且 else if 到目前为止工作没有问题。它只是由于某种原因没有得到任何值的实际数组。
  • 我刚刚运行了您的代码,它按编码工作。 [0,x] 和 [1, x] 数组都填充了它们的值。你能举例说明你的输入和期望的输出吗?

标签: c# arrays loops sorting


【解决方案1】:

根据您的编辑: 问题在于你从不修改 z。它始终保持为 0(这导致您只用 0 填充您的 categori 数组)。检查以下代码。如果您打算打印类别,请使用我的编辑。

using System;

namespace ConsoleTest
{
    class Program
    {
        struct Säljare
        {
            public int artiklar;
        }

        static void Main(string[] args)
        {
            Säljare[] s = new Säljare[6];

            for (int x = 0; x <= 5; x++)
            {
                Console.Write("Antal sålda artiklar: ");
                s[x].artiklar = int.Parse(Console.ReadLine());
            }

            Console.WriteLine(s.Length);

            int[,] kategori = new int[2, 6];

            int a = 0;
            int b = 0;

            int y = 0;
            while (y < s.Length)
            {
                if (s[y].artiklar < 50)
                {
                    kategori[0, a] = y;
                    a++;
                }

                else if (50 <= s[y].artiklar)
                {
                    kategori[1, b] = y;
                    b++;
                }

                y++;
            }

            //Use this to print kategori
            for (a = 0; a < 2; a++)
            {
                for (b = 0; b < 6; b++)
                {
                    Console.Write("{0}\t", kategori[a, b]);
                }
                Console.WriteLine();
            }

            Console.WriteLine("Antal");

            int z = 0;
            for (int x = 0; x < a; x++)
            {
                kategori[0, x] = z; //z is always 0
                Console.WriteLine(s[z].artiklar);
            }

            for (int x = 0; x < b; x++)
            {
                kategori[1, x] = z; //z is always 0
                Console.WriteLine(s[z].artiklar);
            }
            Console.ReadKey();
        }
    }
}

【讨论】:

  • 感谢您的回答。我不确定这是不匹配的字段。我在我的问题中编辑了代码,现在可能更容易看到。
  • 我已经编辑了我的答案。你的意图我还不清楚。但我已经写了答案,假设您正在尝试打印类别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多