如何检查long []数组中的索引长度?

时间:2012-02-08 09:05:02

标签: c#

例如我有一个长[] x 我正在做:

for (int i=0; i<x.length;x--)
{
}

我知道在x中例如我有30个索引单元格。 我如何遍历x数组中的单元格(索引),并在每个单元格上找到它的长度,并获取/显示每个单元格中的数字。

如果在x [0]中有232 在x [1]中有21 等等...

我想显示232,21,....等 然后我想检查一下,如果x [i] .length大于0,那么...... 但是没有x [i] .length

那我该怎么做?


我做了:

public long GetHistogramMaximum(long[] histogram)
        {
            long result = 0;
            long count = 0;

            for (int i = 0; i < histogram.Length; i++)
            {
                if (histogram[i] > 0)
                {
                    MessageBox.Show(histogram[i].ToString());
                    break;
                }

            }

            return result;




        }

它的工作,但每次它向我显示两次为什么消息框每次工作两次? 如果在第一个数组中,数字是33454,那么我会再看一次消息框。这里有什么不对?我希望它每次只显示一次这个数字。

它就像重复每个数字并再一次显示它,然后再一次显示它。然后再移动到下一个数字。

编辑**

也许每次显示两次数字的问题与使用滚动事件有关?

void trackBar1_Scroll(object sender, EventArgs e)
        {
            myTrackPanelss1.trackBar1.Minimum = 0;
            myTrackPanelss1.trackBar1.Maximum = counter - 1;//list_of_histograms.Count-1;
            long[] tt = list_of_histograms[myTrackPanelss1.trackBar1.Value];
            histogramControl1.DrawHistogram(tt);
            long res = GetTopLumAmount(tt, 1000);
            long max = GetHistogramMaximum(tt);
            if (res > -1)
            label24.Text = (res / 1000.0).ToString();
            setpicture(myTrackPanelss1.trackBar1.Value);
            this.pictureBox1.Refresh();
        }

由于某种原因,它进入滚动并再次在这里做所有事情。连续两次。 可能是什么问题?

5 个答案:

答案 0 :(得分:1)

long[]基本上包含多个long值。执行x[i].length无效,因为long没有属性length。你想要实现的是什么?

long[] x = {1,2,3} ;
x.length; //this is valid because you are querying the length / count of the array
x[0].length; //this is invalid because 1 does not have a property length

修改

您的循环计数器将成为索引。所以,

for (int i =0; i < x.Length; i++)
{
   //check for maximum, when you find it
   Console.WriteLine("The maximum value is " + x[i]);
   Console.WriteLine("The maximum value is present at index " + i);
}

答案 1 :(得分:0)

以下是基于数组中值的方法:

for (int i=0; i < x.Length; i++)
{
   // print the number to the screen.
   Console.WriteLine(x[i]);
   if (x[i] > 0) {
      // do something else.
   }
}

我不确定你对x--的意思,但这可能与你的描述有关。

答案 2 :(得分:0)

正如迈克尔所说,你可以通过x.Length找到数组的长度。在C#中,x.Length(其中x是一个数组)将返回一个32位整数,表示所有维度中个元素的数量。你这里只有一维数组,所以这应该足以满足你的目标。

如果您还在存储在数组中的值之后,则将该值称为:

x[i];

所以,在一个例子中:

for ( int i = 0; i < x.Length; i++)
{
    Console.WriteLine(x[i]);
}

...会在控制台中显示数组中的值。

这就是你问的问题吗?

答案 3 :(得分:0)

您可以将其强制转换为字符串并获取length属性。

   x[i].ToString().Length

虽然如果你想检查长度是否高于零,那么肯定只是存在一个值证明了这一点?

答案 4 :(得分:0)

你的功能有一个可怕的问题:

    public long GetHistogramMaximum(long[] histogram)
    {
        long result = 0;
        long count = 0;

        for (int i = 0; i < histogram.Length; i++)
        {
            if (histogram[i] > 0)
            {
                MessageBox.Show(histogram[i].ToString());
                break;
            }
        }
        return result;
    }

这样,您可以检查数组中的值。 当i = 0时,它检查x [i]。所以,33454(你在x [0]中给出的值)大于0,它显示数字和“break;”,因此它停止“for”并执行下一步:它返回永不修改的结果变量。 因此,变量结果和计数在代码中无用。

用某种方式重写以获得数组中的最大值:

    public long GetHistogramMaximum(long[] histogram)
    {
        long result = 0;
        for (int i = 0; i < histogram.Length; i++)
        {
            if (histogram[i] > result)
            {
                MessageBox.Show(string.Format("{0} is greater than {1}", histogram[i], result);
                result = histogram[i];
            }
        }
        return result;
    }