当我尝试运行应用程序时,它显示索引超出数组边界的浮点数[] u_f = a [userid];当我检查userid的值时,它是-1;
任何的想法?
PS。用户ID可以是每个整数,但我取整数的索引在(0, 1143600 for item)
和(0, 89395 for user)
之间,我的计算基于那个。然后,我的计算基于{{的索引1}}存储在数组a中的值,不基于userid
的值。
提前谢谢。
userid
答案 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逻辑,当输入数据不存在于数组中时,你必须决定如何处理这种情况。也许可以立即向用户显示消息。