2017-05-15 5 views
0

私は平均チュートリアルから関数を割り当てています。 私はこのようなコードを記述する場合:すぐに除算機能を実行できません

func AVG(numbers: Int...) -> Double { 
var i=0, sum=0; var avg: Double 
for number in numbers { 
    i+=1 
    sum+=number 
    avg = sum/i 
} 
return avg 
} 

let Average = AVG(numbers: 3,4,5) 
print (Average) 

それは「/」2つのINTオペランドに適用することができないバイナリ演算子を示すエラーメッセージが表示されます。

私は

let x = 5 
let y = 2 
let quo = x/y 

のような単純な割り算を実行するとき、それは動作します。

私はこの機能で何が間違っていますか?

+0

宣言 'i'と'合計を使用して代替'として'ダブル ' – EmilioPelaez

+1

'ダブル(数字。reduce(0、+))/ numbers.count'を実行します。 – Sulthan

答えて

0

2つの問題がAVG機能にあります - ところで。関数名は小文字で始まるはずです。

var avg = 0.0 
  • 型の値を代入することはできません。

    遊び場は、 '平均'

    を初期化される前に使用ソリューションは

    1. 変数明確なエラーメッセージを表示します'Int' to型 'double' の

      ソリューション:

      avg = Double(sum)/Double(i) 
      

    PS:キー値コーディングのオペレータに@avg

    func avg(numbers: Int...) -> Double { 
        return (numbers as NSArray).value(forKeyPath: "@avg.self") as! Double 
    } 
    
  • +0

    私はちょうど値のない変数を宣言することができないし、後でそれに値を割り当てることができないので、 C++で – InVaDeR

    +0

    いいえ、できません。 Swiftの規則によると、* non-optional *変数は宣言され、使用前に初期化されなければなりません。 – vadian

    +2

    @InVaDeR:変数が使用される前に値が割り当てられていることが保証されている限り、変数(および定数)を宣言して後で値を割り当てることができます。しかし、あなたの関数で配列が*空であると*発生しないので、コンパイラーは不平を言う。 –

    1

    ダブルタイプとしてavgと宣言しました。

    numbersは、タイプとしてIntを有し、i=0は、それをIntとする。

    sum/iを実行しているときは、それはInt/Intであり、これをDoubleに割り当てようとします。 Swiftは自動的に変換を実行していません。手動でデータ型を変換する必要があります。 これらの変数をDoubleに変換するだけで修正できます。

    除算を行う前にIntを変換する必要があることに注意してください。そうしないと、Intがそれらを持つことができないため、リマインダーがカットされます。 @martinへのクレジット

    また、数値配列が空の場合、初期化されていない変数avgを返すことがあります。以下

    の作業コード:

    func AVG(numbers: Int...) -> Double { 
        var i=0, sum=0; var avg: Double = 0 
        for number in numbers { 
         i+=1 
         sum+=number 
         avg = Double(sum)/Double(i) 
        } 
        return avg 
    } 
    
    let Average = AVG(numbers: 3,4,5) 
    print (Average) 
    
    +1

    あなたの提案では、 'AVG(数字:3,4)'は '3.0 'と評価され、おそらく期待通りに' 3.5'にはなりません... –

    +0

    @MartinR良い点 - それを変更しました –

    +0

    また、迅速な "in"の私は関数の章にあり、私はちょうどそれが何をしようとしているのかわかりません... – InVaDeR

    関連する問題