2012-10-09 3 views
1

Это всего лишь часть моего кода, но это вызывает у меня проблемы. Целевая цель кода состоит в том, чтобы ввести пользователя и сделать его размером массива. Тем не менее, это дает мне, что индекс ошибки был за пределами границ массива, независимо от того, какое значение я ввожу.Индекс был вне границ массива в Visual Basic

Вот код:

Option Explicit On 
Option Strict On 

Imports System 

Module numbers 
    Sub Main() 
     'index decides number of candidates. 
     Dim index as integer 
     Dim candidate(index) as integer 

     Console.Write("Please enter the number of candidates in the election: ") 
     index=Convert.toInt32(Console.Readline()) 

     Do Until candidate(index) >= 0 
      Console.Write(" Enter the name of candidate: ") 
      candidate(index)=Convert.toInt32(Console.Readline()) 

      candidate(index) -=1 
     Loop 
    End Sub 
End Module 

ответ

1

У вас здесь несколько проблем.

Во-первых, вам необходимо инициализировать массив после, вы знаете, насколько он большой.

Во-вторых, вы найдете, что цикл For проще, чем цикл Do для реализации логики, так как вам не нужно вручную отслеживать счетчик циклов.

Наконец, вы конвертируете имена ваших кандидатов в целые числа. Большинство имен людей не являются числовыми!

Sub Main() 
    'index decides number of candidates. 
    Dim index as integer 

    Console.Write("Please enter the number of candidates in the election: ") 
    index=Convert.toInt32(Console.Readline()) 

    ' We now know how big the array needs to be so you can initialise it. 
    Dim candidate(index) as integer 

    ' We use a For loop so that we don't have to worry about the 
    ' loop counter ourselves. 
    For i As Integer = 0 to (index - 1) 
     Console.Write(" Enter the name of candidate: ") 
     ' Your candidate names appear to be an integer - 
     ' Surely that's not right??! I think you meant 
     ' candidate(i) = Console.Readline() 
     candidate(i)=Convert.toInt32(Console.Readline()) 
    Next 
End Sub 
+0

Спасибо, что это имеет смысл, я привык, чтобы положить мои мысли вместе на начало, поэтому перемещение массива никогда не происходило со мной. Спасибо за вашу помощь. – DumbQuesionGuy314

1

Вы объявляете размер массива при index еще равен 0. Вы должны переместить объявление массива ниже линии, где index устанавливается на введенное значение:

' ... 
Console.Write("Please enter the number of candidates in the election: ") 
index=Convert.toInt32(Console.Readline()) 
Dim candidate(index) as integer 
' ... 

что касается цикла, я совершенно запутался, что вы пытаетесь сделать, но это, конечно, похоже, что есть лучший способ сделать это. Если бы вы объяснили свое намерение для этого цикла, я, вероятно, мог бы предложить лучший алгоритм.

0

Если я правильно его вижу, вы используете Index, чтобы дать кандидату размер. но вы используете его, прежде чем он получит значение с консоли. Таким образом, он имеет размер 0. Перемещение состояния Dim после строки readline. Также вы можете использовать нечто вроде integer.tryparse для чтения консоли.

Кроме того, я не понимаю, цель вашего дел в то время, в течение I = индексировать будет понятнее ...

Смежные вопросы