LoginSignup
1
0

More than 5 years have passed since last update.

Swift3 配列を受け取り、偶数・奇数・小数に分けて表示

Last updated at Posted at 2017-09-27

※動作はしますが、多分80点程度だと思います。

配列を引数として受け取り、「偶数はa、a、a」「奇数はb、b、b」「少数はc,c,c」と表示

[10,7,2,9,0,4,-2,15,1.5,0.9,-4.5,] と [10,6,4,] を渡してみます。

FloatやDouble型の引数をとる場合に、
2で割った時の余りが0かどうかを判定するif文、%を使うとエラーになりました。
試したところ、+,-,*,/は通じるのですが、%の場合のみエラーになってしまいます。
swift2までは、%でも通じたらしいですが、
swift3ではuse truncating remainder instead というエラーメッセージが出ます。
→ truncatingReminderを使用して解決しました。

分類表示する関数

func printArray(_ numbers:[Float])->Void{

    //結果出力用配列を準備
    var newArrayDecimal:[Float] = []
    var newArrayEvenNumbers:[Float] = []
    var newArrayOddNumbers:[Float] = []

    let max:Int = numbers.count - 1
    for index in 0...max{
        var element = numbers[index]

        //小数の条件判定の準備。round(towardZero)を使う。
        //0に近い数値にする。正の数は切り捨て、負の数は切り上げの挙動。
        //rounded(towardZero)だと汎用性が低くなってしまう。
        element.round(.towardZero)

        //条件に合致した配列の要素を、上で準備した配列に代入

        //帯小数の場合
        if numbers[index] - element != 0.0 {
            newArrayDecimal.append(numbers[index])

        //偶数の場合
        } else if numbers[index].truncatingRemainder(dividingBy: 2.0) == 0{
            newArrayEvenNumbers.append(numbers[index])

        //奇数の場合
        } else if numbers[index].truncatingRemainder(dividingBy: 2.0) != 0{
            newArrayOddNumbers.append(numbers[index])
        }
    }

    print("小数は\(newArrayDecimal)です")
    print("偶数は\(newArrayEvenNumbers)です")
    print("奇数は\(newArrayOddNumbers)です")
}


printArray([10,7,2,9,0,4,-2,15,1.5,0.9,-4.5,])
print("----------------------")
printArray([10,6,4,])

実行結果
純小数がきちんと表示されない。なぜ?というところ。

実行結果
小数は[1.5, 0.899999976, -4.5]です
偶数は[10.0, 2.0, 0.0, 4.0, -2.0]です
奇数は[7.0, 9.0, 15.0]です
----------------------
小数は[]です
偶数は[10.0, 6.0, 4.0]です
奇数は[]です
1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0