プロが教えるわが家の防犯対策術!

プログラム初心者です。
以下のソースをVB2010で動作させると型'double'の値を'system.Collections.ArrayList'に変換できません。となります。呼び出し方法がおかしいと思うのですが。よく分かりません。解決方法を教えてくださいお願い致します。


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim aArr() As Double
aArr(1) = 1.1
aArr(2) = 2.3
MsgBox(AAA(aArr))
End Sub

Public Function AAA(ByVal aArr As ArrayList) As Double()
Dim retVal As Double() = Nothing
ReDim retVal(2)
Dim loopCnt As Integer = 0
Dim Arrcnt As Integer = aArr.Count
Dim sum As Double = 0.0

For loopCnt = 0 To Arrcnt - 1
sum += aArr(loopCnt)
Next
sum = sum / loopCnt
retVal(0) = sum
Return retVal
End Function

A 回答 (1件)

配列を渡したいのか ArryListとして渡したいのかどちらでしょう



現状の呼び出し元は 配列ですよね ならば受け側も配列を受け入れる型にしないといけません

使えるのは Array や Double() などです

Integer()や Long()などもココで計算させたいなら Arrayを選択したほうがいいでしょう
Double()だけというなら Double()で受けたほうがいいと思います

Public Function AAA( byVal aArr as Double() ) as Double()
または
Public Function AAA( byVal aArr as Array ) as Double()

Arrayにするなら 呼び出し元が算術できる型なのかをチェックしたほうがいいでしょう
String() でも Object()でも渡せてしまいますから

  Dim ObjType as System.Type = aArr.GetType()
  With objType.Name
  if .StartsWith("Double") = false And _
    .StartsWith("Single") = false And _
    .StartsWith("Int32") = false And _
    .StartsWith("Int64") = false Then
      return Nothing
      ' または 例外をスローするとか
  End if
  End With
  Dim retVal As Double() = Nothing
  ReDim retVal(2)
  Dim loopCnt As Integer = 0
  Dim Arrcnt As Integer = aArr.Length
  Dim sum As Double = 0.0

  For loopCnt = 0 To Arrcnt - 1
    sum += aArr(loopCnt)
  Next
  sum = sum / Arrcnt 'loopCnt
  retVal(0) = sum
  Return retVal
End Function

あと 呼び出し元で MsgBox( AAA(aArr) ) としていますが Double()で返ってくるので
MsgBox(AAA(aArr)(0))といった具合に 要素を指定しましょう


ArrayListでやるのであれば呼び出し元を

dim aArr as new ArrayList
aArr.Add(1.1)
aArr.Add(2.3)
MsgBox( AAA( aAr )(0) )
としてやって

Public Function AAA(ByVal aArr As ArrayList) As Double()
  Dim retVal As Double() = Nothing
  ReDim retVal(2)
  Dim loopCnt As Integer = 0
  Dim Arrcnt As Integer = aArr.Count
  Dim sum As Double = 0.0

  For loopCnt = 0 To Arrcnt - 1
    sum += aArr(loopCnt)
  Next
  sum = sum / Arrcnt 'loopCnt
  retVal(0) = sum
  Return retVal
End Function

といった具合になると思います
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!