# 老提示边界出错，该如何改正程序

#1
``````# code
```using CSV
using DelimitedFiles, Random, LinearAlgebra

function distance(x::Array{T,1},y::Array{T,1}) where {T <: Number}
dist=0
for i in 1:length(x)
dist += (x[i]-y[i])^2
end
dist = sqrt(dist)
return dist
end

function classify(distances::Array{Float64,1}, labels::Array{T,1},k::Int64) where {T<:Any}
class=unique(labels)
nc=length(class)
indexes=Array{Int,1}(undef,length(distances))
M=typemax(typeof(distances[1]))
class_count=Array{Int,1}(undef,nc)
for i in 1:k
indexes[i]=findmin(distances)[2]
distances[indexes[i]]=M
end
klabels=labels[indexes]
for i in 1:nc
for j in 1:k
if klabels[j]==class[i]
class_count[i]+=1
break
end
end
end
index=findmax(class_count)[1]
return class[index]
end

function apply_KNN(X::Array{T1,2}, x::Array{T2,1},Y::Array{T1,2},k::Int64) where {T1<:Number,T2<:Any}
N=size(X,1)
n=size(Y,1)
D=Array{Float64,1}(undef,N)
Z=Array{typeof(x[1]),1}(undef,n)
for i in 1:n
for j in 1:N
D[j] = distance(X[j,:],Y[i,:])
end
Z[i]=classify(D,x,k)
end
return Z
end

I=map(Float64,data[:,1:(end-1)])    # 剔除最后一列后，映射为Float64类型，作为样本的X
O=data[:,end]                       # 最后一列作为Y

N=length(O)                         # 样本数
n=round(Int64,N/2)                  # 样本分成两部分，各部分多少
R=randperm(N)                       # 生成样本序列编号

indX=R[1:n]                         # 前半部分
X=I[indX,:]                         # 按照随机顺序，生成新的样本X序列
x=O[indX]                           # 生成新的Y序列

indY=R[(n+1):end]                   # 后半部分
Y=I[indY,:]
y=O[indY]

Iz=apply_KNN(X,x,Y,5)
println(sum(y.==z[1])/n)
println(z[1][1:5],z[2][1:5])``````

#2