返回-1作为变量的值;

时间:2014-03-21 17:11:52

标签: c# .net arrays

当我尝试运行应用程序时,它显示索引超出数组边界的浮点数[] u_f = a [userid];当我检查userid的值时,它是-1; 任何的想法? PS。用户ID可以是每个整数,但我取整数的索引在(0, 1143600 for item)(0, 89395 for user)之间,我的计算基于那个。然后,我的计算基于{{的索引1}}存储在数组a中的值,不基于userid的值。 提前谢谢。

userid

4 个答案:

答案 0 :(得分:3)

你的问题就在这一行:

int userseq=Array.IndexOf(d, sc);

可能会返回-1,然后您将进入dotproduct函数,然后导致它失败。如果您在sc中找不到d并执行此操作,则需要确定要应用的逻辑。

虽然其他人已经说过验证你对dotproduct的输入会帮助你更轻松地找到问题。

答案 1 :(得分:2)

我不确定你在问什么。您有一个错误,因为您尝试访问a的索引-1。数组从0开始。值-1不存在。 userid应介于0和a.Length之间。

答案 2 :(得分:1)

你的方法是否应该接受一个低于零的userid值?如果是,则不能使用它来定义数组的长度。周期。

如果-1不是有效值,我会在dotproduct方法的第一行添加此权限,因为它是公开的:

if (userid < 0) throw new ArgumentOutOfRangeException("userid");

至于为什么在当前上下文中它是-1,正如其他人指出的那样,你试图在d数组中找到的文本值不存在,{{1方法将返回-1。在调用方法之前,您必须验证用户的输入。

我还会在你的另一篇文章中说明我已经告诉你的内容:以清晰的方式命名变量 - 如果在你的场景中有意义 - 使用自定义类而不是锯齿状数组。之后您的代码将更容易阅读和维护。

答案 3 :(得分:0)

int userseq=Array.IndexOf(d, sc);
如果数组sc中没有项d,则

返回-1。然后将userseq变量作为函数dotproduct的第一个参数传递,并通过它的第一个参数(userid)获取数组索引。所以这是你的问题 - 在IndexOf

我不知道如何修复它 - 它是你的buiseness逻辑,当输入数据不存在于数组中时,你必须决定如何处理这种情况。也许可以立即向用户显示消息。