Так что я продолжаю получать ошибку
Exception thrown: 'System.IndexOutOfRangeException'
Для моего счетчика массива. Я все еще изучаю Visual Basic, но у меня есть знания программирования на других языках, поэтому я не уверен, что я просто неправильно перевожу синтаксис здесь или это просто логическая ошибка, которую я не вижу.
Массив arrayNumsMultiply() - это целочисленный массив, объявленный с 6 значениями. Моя переменная счетчика также была ранее объявлена в программе как целое число.
Следующий код предназначен для пересчета 6 чисел, проверки, есть ли в них два целых числа (например, 47, то есть 4 и 7), а затем их сложения. Оттуда он сохраняет его обратно в массив и стирает предыдущее значение. У меня есть System.Console.WriteLine в коде, чтобы увидеть, инициируется ли оператор If, а это нет, но журнал консоли счетчика есть. Есть идеи, что я делаю неправильно? (Конкретная строка, в которой возникает ошибка, - это If arrayNumsMultiply(counter).ToString.Length = 2 Then)
For counter = 0 To 5
If arrayNumsMultiply(counter).ToString.Length = 2 Then
Dim numOne As String = arrayNumsMultiply(counter).ToString().Substring(1, 1)
Dim numTwo As String = arrayNumsMultiply(counter).ToString().Substring(2, 1)
Convert.ToInt32(numOne)
Convert.ToInt32(numTwo)
Dim totalNum As Integer
totalNum = numOne + numTwo
arrayNumsMultiply(counter) = totalNum
System.Console.WriteLine("If statement for adding in an integer working")
End If
System.Console.WriteLine("Counter working")
Next counter
Если вы хотите получить доступ к каждому элементу или элементу в массиве или коллекции, обычно лучше использовать цикл For Each или же использовать фактический массив или коллекцию, чтобы указать верхнюю границу цикла. то есть For Each elem In myArray или For i = 0 To myArray.GetUpperBound(0).
Кстати, если вы хотите получить один символ из String, не используйте Substring. Вы можете просто проиндексировать String как массив, чтобы получить Char по этому индексу.
@Plutonix Dim arrayNumsMultiply(6) As Integer - это так, как заявлено, верно? @jmcilhinney Я сделал это, и это не меняет происходящую ошибку, поскольку ошибка находится в строке оператора If. Выполняется сам оператор for, а не оператор If.





Если длина вашей строки равна 2, первый символ находится в позиции 0, а второй символ - в позиции 1. Как и большинство вещей в .net, это нулевое значение. Итак, правильный код для этих строк ...
Dim numOne As String = arrayNumsMultiply(counter).ToString().Substring(0, 1)
Dim numTwo As String = arrayNumsMultiply(counter).ToString().Substring(1, 1)
counterбольше или меньше размера массива. Используйте мышь, когда она сломается, чтобы узнать больше. Вы сказать, у него шесть значений, поэтому0 To 5должен работать, но VS / VB не согласен, и мы не можем видеть, где вы его создали.