Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Error Handling_Console Application - Fatal编程技术网

C# 在特定索引之前或之后的多个步骤中搜索元素时,索引位于数组边界之外

C# 在特定索引之前或之后的多个步骤中搜索元素时,索引位于数组边界之外,c#,arrays,error-handling,console-application,C#,Arrays,Error Handling,Console Application,问题:我正在一个控制台应用程序中重建战舰,用户输入的格式是“字母编号字母编号”(A1E1)。程序需要找出第二个字母加上或减去4后的索引是否与第一个字母相同,以验证用户输入的船型长度是否可接受。但是,当我的代码运行时,索引超出了数组的边界 例如,一艘巡洋舰有5格长。因此,要水平放置巡洋舰,数字必须相同,字母之间的距离必须为validInputs数组中的4个元素 一些输入的工作,例如:A3E3工作,但E3A3将超出范围 public static char[] validInputs = new c

问题:我正在一个控制台应用程序中重建战舰,用户输入的格式是“字母编号字母编号”(A1E1)。程序需要找出第二个字母加上或减去4后的索引是否与第一个字母相同,以验证用户输入的船型长度是否可接受。但是,当我的代码运行时,索引超出了数组的边界

例如,一艘巡洋舰有5格长。因此,要水平放置巡洋舰,数字必须相同,字母之间的距离必须为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”
中,该字母是
A

字母
A
validInputs
数组中的索引为
0
,在您的代码中,您尝试获取
validInputs[validInputIndex-4]
,其计算结果为
validInputs[-4]
,这显然超出了数组边界

“A3E3”
起作用的原因是字母
E
距离数组末端足够远(在索引
4
),因此减法和加法不会导致超出边界的数字

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;
    }

为了避免异常,在尝试访问索引之前,需要验证索引是否在数组边界内

例如:

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] == 0)

您必须验证
validInputIndex+4
validInputIndex-4
是否在数组中的索引范围内。这是否回答了您的问题?非常感谢!我不知道在这种情况下必须验证索引是否在范围内。这是很大的帮助。