2016-07-07 4 views
-1

л требуется создать массив, имеющий такой структурыЮлия: создать массивы в течение цикла

к [1] ​​= 1

к [2] = 2

к [3] = 3

к [4] = 4

л пробовал таким образом, но это не работает

n= 10 

for i in 1:n 
k[i]= i 
end 

любые предложения?

+0

Вы часто фактически не нужен массив (который занимает память) и может использовать диапазон вместо этого, например, 'k = -5: 5'. Затем вы можете сделать 'k [3]' и получить '2' назад, что является третьим элементом диапазона. –

ответ

3

У Вас нет инициализируется массив, поэтому при вызове к [1] ​​или к [2] или к [п] не возвратит ошибку

Вы должны либо:

n= 10 
k = Array(Int64, n) #or Float64 or Any instead of Int64 
for i in 1:n 
    k[i]= i 
end 

или вы могли бы

n= 10 
k = [] 
for i in 1:n 
    push!(k,i) 
end 

Я предлагаю бывший, другой метод будет мор e подходит, если вы не сможете заранее определить размер массива

+1

Мне нравится второй метод, даже если я знаю размер. Однако сначала необходимо определить массив с правильным типом аргумента, например. 'k = Int []' в этом примере. –

4

Самый простой способ, чтобы получить конкретный массив, который вы хотите это:

k = collect(1:10) 

Если вы хотите, чтобы определить массив в цикле, то в первую очередь необходимо предварительно выделить массив, например, используя k = zeros(10), а затем указать значения:

n = 10 
k = zeros(n) 
for i = 1:n 
    k[i] = i 
end 
-4

Откуда вы знаете, что он не работает? Попробуйте оценить k:

n= 10 

for i in 1:n 
k[i]= i 
end 

k 

10-element Array{Int64,1}: 1 2 3 4 5 6 7 8 9 10 

Более лаконичным способ сделать то же самое:

collect(1:10) 
+2

В 0.4.6 этот фрагмент будет вызывать UndefVarError, и я подозреваю, что в других версиях тоже. Основная идея состоит в том, что массив не инициализируется в вопросе, и автор просто тестирует Matlab behaivour, где это работает. – RedPointyJackson

+0

Спасибо за объяснение. Смущающая ошибка. Я запустил код в записной книжке Jupyter - где 'k' фактически определен в другой ячейке. –

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