Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理存储在数组中的信息_C#_Arrays - Fatal编程技术网

C# 处理存储在数组中的信息

C# 处理存储在数组中的信息,c#,arrays,C#,Arrays,我有很多数据存储在多个数组中,我想从中获取值,但我遇到了麻烦。标识符数组是 String[] seqNum2 = new String[600]; String[] seqNum = new String[600]; 我希望能够找到这些数组中的匹配数据,并获得与这些数组中的数据一致的信息 String[] netOil2 = new String[600]; String[] netOil = new String[600]; 这是我到目前为止的代码,但它并没有输出我想要的正确答案,它所输出

我有很多数据存储在多个数组中,我想从中获取值,但我遇到了麻烦。标识符数组是

String[] seqNum2 = new String[600];
String[] seqNum = new String[600];
我希望能够找到这些数组中的匹配数据,并获得与这些数组中的数据一致的信息

String[] netOil2 = new String[600];
String[] netOil = new String[600];
这是我到目前为止的代码,但它并没有输出我想要的正确答案,它所输出的只是一个无限循环,上面写着“System.String[],NaN”

private void netOilRadBtn\u CheckedChanged(对象发送方,事件参数e)
{
StreamWriter sw=新StreamWriter(“test.txt”);//仅用于测试目的
//StreamReader sr=新的StreamReader(“OUTPUT.CSV”);
双优先;
双秒;
for(int i=0;i
我所要做的就是输出匹配的seqNum,然后输出双答案。任何帮助都将不胜感激

因此,这一行:

sw.WriteLine("{0}, {1}", seqNum2, answer);
输出
System.String[],NaN

seqNum2
是一个数组,这就是为什么输出中会出现
System.String[]
。如果要查看当前正在处理的
seqNum2
元素,可能需要
seqNum2[i]
。当然,由于您没有初始化数组元素(请参见下文),即使进行了此更改,您也看不到您期望的内容,因为值为
null
,并且它被格式化为空字符串,因此您将得到
,Nan
作为输出

在输出中获得
NaN
的原因是第行:

double answer = (first - second) / first;
我猜
first
second
都是0。如果第一个值为0,则会得到无穷大,否则会得到0

这些值很可能设置为0,因为您没有在
netOil
netOil2
数组中设置字符串值,所以您有600个
null
s和
Convert。ToDouble(null)
返回0

调试您的代码,并查看您调用的
Convert.ToDouble
值以及返回的值

因此,这一行:

sw.WriteLine("{0}, {1}", seqNum2, answer);
输出
System.String[],NaN

seqNum2
是一个数组,这就是为什么输出中会出现
System.String[]
。如果要查看当前正在处理的
seqNum2
元素,可能需要
seqNum2[i]
。当然,由于您没有初始化数组元素(请参见下文),即使进行了此更改,您也看不到您期望的内容,因为值为
null
,并且它被格式化为空字符串,因此您将得到
,Nan
作为输出

在输出中获得
NaN
的原因是第行:

double answer = (first - second) / first;
我猜
first
second
都是0。如果第一个值为0,则会得到无穷大,否则会得到0

这些值很可能设置为0,因为您没有在
netOil
netOil2
数组中设置字符串值,所以您有600个
null
s和
Convert。ToDouble(null)
返回0

调试您的代码,并查看您调用的
Convert.ToDouble
值以及返回的值

由于调用了Array.ToString(),因此会得到“System.String[]”。你们得到了NaN,因为答案显然是NaN。我猜是其中之一

                    first = Convert.ToDouble(netOil2[i]);
                    second = Convert.ToDouble(netOil[j]);
南返回。在这些行中放置一个断点,并检查netOil2[i]netOil[j]的值是否实际表示数字(请记住Convert.ToDouble返回的值基于您当前的区域性)。

调用Array.ToString()后,您会得到“System.String[]”。你们得到了NaN,因为答案显然是NaN。我猜是其中之一

                    first = Convert.ToDouble(netOil2[i]);
                    second = Convert.ToDouble(netOil[j]);

南返回。在这些行中放置一个断点,并检查netOil2[i]netOil[j]的值是否实际表示数字(请记住,Convert.ToDouble返回的值基于您当前的区域性)。

我将使用
字典
集合,而不是成对数组

例如:

Dictionary<Int32, Double> dictOil1 = new Dictionary<Int32, Double();
Dictionary<Int32, Double> dictOil2 = new Dictionary<Int32, Double();

//If seqNum and netOil _really are_ strings...
Int32 seq, seq2;
Double oil, oil2;
if (Int32.TryParse(seqNum, out seq) && Double.TryParse(netOil, out oil))
    dictOil1.Add(seq, oil);
if (Int32.TryParse(seqNum2, out seq2) && Double.TryParse(netOil2, out oil2))
    dictOil2.Add(seq2, oil2);

Dictionary dictOil1=newdictionary我将使用
Dictionary
集合,而不是成对数组

例如:

Dictionary<Int32, Double> dictOil1 = new Dictionary<Int32, Double();
Dictionary<Int32, Double> dictOil2 = new Dictionary<Int32, Double();

//If seqNum and netOil _really are_ strings...
Int32 seq, seq2;
Double oil, oil2;
if (Int32.TryParse(seqNum, out seq) && Double.TryParse(netOil, out oil))
    dictOil1.Add(seq, oil);
if (Int32.TryParse(seqNum2, out seq2) && Double.TryParse(netOil2, out oil2))
    dictOil2.Add(seq2, oil2);

Dictionary dictOil1=new Dictionary“String-seqNum2=new-String[600];“这会编译吗?@David我刚刚修复了它,使它看起来正确。我认为您需要从数组
sw.WriteLine(“{0},{1}”,seqNum2[I],answer”)中写入当前项它实际上不可能是一个无限循环,尽管它将打印600 x 600=360000次。我可以理解为什么你可能认为它是无限的,但它最终会退出。像这样的成对数组是一种反模式。不要这样做。定义一个具有seqNum和netOil属性的类,然后拥有该类类型的集合。“String seqNum2=new String[600];“这会编译吗?@David我刚刚修复了它,使其看起来正确。我认为您需要从array
sw.WriteLine(“{0},{1}”,seqNum2[I],answer”)写入当前项它实际上不可能是一个无限循环,尽管它将打印600 x 600=360000次。我可以理解为什么你可能认为它是无限的,但它最终会退出。像这样的成对数组是一种反模式。不要这样做。定义一个具有seqNum和netOil属性的类,然后定义该类类型的集合。我将其更改为seqNum2[I],但现在它没有输出任何东西。当然,您希望得到什么值?哪个值恰好为?我将其更改为seqNum2[I],但现在它没有输出任何东西