大佬教程收集整理的这篇文章主要介绍了在特定索引之前或之后的多个步骤中搜索元素时,索引超出数组范围,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
问题:我正在控制台应用程序中重新创建 Battleship,用户输入的格式为“字母-编号-字母-编号”(A1E1)。程序需要查找第二个字母加或减 4 时的索引是否与第一个字母相同,以验证用户输入的长度符合船舶类型的要求。但是,当我的代码运行时,索引超出了数组的范围。
例如,Cruiser 有 5 个空格长。因此,要水平放置 Cruiser,数字必须相同,并且字母必须在 valIDinputs 数组中相距 4 个元素。
一些输入的工作,例如:A3E3有效,但是E3A3会越界。
public static char[] valIDinputs = new char[] { 'A','B','C','D','E','F','G','H','I','J','1','2','3','4','5','6','7','8','9','t' };
if (placemenTinput[1] - placemenTinput[3] == 0)
{
char valIDinputcheck = placemenTinput[2];
// Finds index of the 2nd letter in valID inputs
int valIDinpuTindex = Array.IndexOf(valIDinputs,valIDinputcheck);
// ValIDates that the 2nd letter is either 4 steps behind or
// ahead of the first letter within the valIDinputs array.
if (placemenTinput[0] == valIDinputs[valIDinpuTindex - 4] ||
placemenTinput[0] == valIDinputs[valIDinpuTindex + 4])
{
valIDationCounter++;
break;
}
异常意味着您正在尝试访问数组边界之外的索引。
"E3A3"
不起作用的原因是您使用第二个字母进行比较 (validInputcheck = placemenTinput[2]
),而在 "E3A3"
中,该字母是 {{1} }.
字母 A
在 A
数组中的索引为 0
,在您的代码中您尝试获取 validInputs
,其计算结果为 validInputs[validInpuTindex - 4]
,这显然在数组边界之外。
validInputs[-4]
起作用的原因是字母 "A3E3"
离数组的末端足够远(在索引 E
处),因此不会产生减法和加法超出范围的数字。
为了避免异常,您需要在尝试访问索引之前验证索引是否在数组边界内。
例如:
4
作为旁注,我们通常使用相等运算符来确定两个值是否相等,而不是进行数学运算然后比较结果,即:
if ((validInpuTindex - 4 > -1 &&
placemenTinput[0] == validInputs[validInpuTindex - 4]) ||
(validInpuTindex + 4 < validInputs.Length &&
placemenTinput[0] == validInputs[validInpuTindex + 4]))
{
validationCounter++;
break;
}
而不是:
if (placemenTinput[1] == placemenTinput[3])
以上是大佬教程为你收集整理的在特定索引之前或之后的多个步骤中搜索元素时,索引超出数组范围全部内容,希望文章能够帮你解决在特定索引之前或之后的多个步骤中搜索元素时,索引超出数组范围所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。