2015-11-07 4 views
0

Я работаю над проектом в vb.net, у меня есть целочисленный массив, например (1,8,9,8), мне нужно создать количество массивов из него, добавив 1 к каждому элементу за раз, чтобы первый массив предположил (2,8,9,8) и второй (1,9,9,8) и т. Д., Я пробовал этот код:Сгенерировать количество массивов из одного массива

Function myarray(ByVal arra1() As Integer, ByVal arran() As Integer, ByVal i As Integer) As Integer 
    For i = 0 To arra1.Length - 
     arran(i) = arra1(i) 
     arran(i) = arra1(i) + 1 
     Next 
End Function 

ответ

0

Насколько я понял из вопроса в текущем данном контексте это может быть ваш искомое решение:

Function myarray(ByVal arra1() As Integer, ByVal arran() As Integer, ByVal arrNumber As Integer) As Integer 
    arran=arra1.Clone() 
    For i As Integer = 0 To arra1.Length - 1 
     If i = (arrNumber - 1) Then ' IF arrNumber is 1 then +1 to index 0, If it is 2 then +1 to index 1 
      arran(i) = arra1(i) + 1 
     Else 
      arran(i) = arra1(i) 
     End If 
    Next 
    'Print the array 
    For i = 0 To arran.Length - 1 
     Console.Write(arran(i) & " ") 
    Next 
    Console.WriteLine() 
    Return 0 
End Function 

Вы можете назвать это как

Dim a3() As Integer={1,8,9,8} 
Dim a4() As Integer={} 
myarray(a3,a4,1) 
myarray(a3,a4,2) 
myarray(a3,a4,3) 
myarray(a3,a4,4) 

При вызове этой функции с arra1 как (1,8,9,8)
и arrNumber как 1, то Арран будет (2,8,9,8),
с arrNumber, как 2, то Арран будет (1,9,9,8),
с arrNumber как 3, то аран будет (1,8,10,8) и
с arrNumber как 4, тогда аран будет (1,8,9,9)

+0

Спасибо haraman, но у меня есть исключение на данный момент ... Если i = (arrNumber - 1) Then ' – rasha

+0

Извините, я получил (ссылка объекта не установлена ​​в экземпляр объекта) .at arran (i) = arr1 (i) не в том, что я сказал раньше – rasha

+0

@rasha Это был просто пример того, как вы можете достичь своего требования, используя этот минимальный код. Вы должны реализовать его в своем коде согласно вашему требованию.Поэтому предполагалось, что вы инициализируете 'arran' и печатаете его или используете его любым другим способом. Проверьте обновленный код – haraman

0

Сначала объявите свой начальный массив.

' declare initial array 
Dim arr1 = {1, 8, 9, 8} 

Затем объявите массив с зазубриной для результата. Поскольку исходный массив имеет 4 элемента, он создаст 4 массива.

' declare a jagged array for the result 
Dim result(arr1.Length - 1)() As Integer 

Затем вы клонируете начальный массив и меняете одно из значений.

For i = 0 To arr1.Length - 1 

    ' clone the initial array 
    result(i) = arr1.Clone() 

    ' only change the element at index = i 
    result(i)(i) += 1 

Next 

Результат:

2 8 9 8 
1 9 9 8 
1 8 10 8 
1 8 9 9 

Полный источник:

Module Module1 

    Sub Main() 

     ' declare initial array 
     Dim arr1 = {1, 8, 9, 8} 

     ' declare a jagged array for the result 
     Dim result(arr1.Length - 1)() As Integer 

     For i = 0 To arr1.Length - 1 

      ' clone the initial array 
      result(i) = arr1.Clone() 

      ' only change the element at index = i 
      result(i)(i) += 1 

     Next 

     ' print result 
     For i = 0 To result.Length - 1 
      For j = 0 To result(i).Length - 1 
       Console.Write(result(i)(j) & " ") 
      Next 
      Console.WriteLine() 
     Next 

     Console.ReadKey(True) 

    End Sub 

End Module 

В случае, если вы хотите, чтобы сделать функцию.

Function CopyArray(ByVal source As Integer(), i As Integer) As Integer() 

    ' clone the initial array 
    Dim temp = source.Clone() 

    ' only change the element at index = i 
    temp(i) += 1 

    Return temp 

End Function 

Вы вызываете функцию внутри итерации.

For i = 0 To arr1.Length - 1 

    result(i) = CopyArray(arr1, i) 

Next 

Полный источник с функцией:

Module Module1 

    Sub Main() 

     ' declare initial array 
     Dim arr1 = {1, 8, 9, 8} 

     ' declare a jagged array for the result 
     Dim result(arr1.Length - 1)() As Integer 

     For i = 0 To arr1.Length - 1 

      result(i) = CopyArray(arr1, i) 

     Next 

     ' print result 
     For i = 0 To result.Length - 1 
      For j = 0 To result(i).Length - 1 
       Console.Write(result(i)(j) & " ") 
      Next 
      Console.WriteLine() 
     Next 

     Console.ReadKey(True) 

    End Sub 

    Function CopyArray(ByVal source As Integer(), i As Integer) As Integer() 

     ' clone the initial array 
     Dim temp = source.Clone() 

     ' only change the element at index = i 
     temp(i) += 1 

     Return temp 

    End Function 

End Module 
+0

Спасибо за ваш ответ, это работает без функции, но в случае функции он не работает. – rasha

+0

Он работает с функцией. Я протестировал его. См. Мое редактирование. – Han

+0

Теперь он работает с функцией ..... большой благодаря вам Handoko – rasha

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