見出し画像

Swiftでアプリ。- 作ってみよう。ループでカレンダー

1ヶ月の日数を"31日"火曜日始まり(カレンダーは日曜日始まり)。この設定でコードを書きます。

最初の条件

let days = 31
let firstDay = 2        // "0"が日曜日、 "1"が月曜日、"2"が火曜日
var w = 0                    // 日曜日が"0"

while w < firstDay{
  print(" ",terminator: "")
  w += 1
}    //  火曜日スタートなので 日曜日、月曜日は空白" "を入れる

whileループで火曜日"2"になるまで空白" "を入れます。

あとは1日から31日まで繰り返し数字を表示させていきます。

d = 1   // 日にちを入れる変数 最初の日は"1"

わかりやすいように曜日も表示させます。

print("  日"," 月"," 火"," 水"," 木"," 金"," 土")

あとはループで1行ずつ出していきますがこのとこ1週間7日ごとに書いていくので "w < 7"までの繰り返しを行っていきます。

loop:while true{
    while w < 7{
        let pad = d < 10 ? " " :""
        print(pad + "  \(d)", terminator: "")
        w += 1
        d += 1
        
        if d > days{
            print()
            break loop
        } 
    }
    print()
    w = 0
    
}

let pad = d < 10 ? " " :""

1桁には空白を入れて調整します。

while w < 7

としてるので "w = 7"になった時点でループを抜けて

print()
w = 0

となり改行されてまた"w = 0"となり新たにループを繰り返します。

if d > days{
  print()
  break loop

"d"は常に足されていき"31"を超えた時点で"break loop"でループを抜け終了します。

これで7日ごとに数字が出力されていきカレンダーの形になっていきます。

全コードです。

let days = 31
let firstDay = 2
var w = 0

while w < firstDay{
    print("    ",terminator: "")
    w += 1
}

var d = 1

print("  日"," 月"," 火"," 水"," 木"," 金"," 土")

loop:while true{
    while w < 7{
        let pad = d < 10 ? " " :""
        print(pad + "  \(d)", terminator: "")
        w += 1
        d += 1
        
        if d > days{
            print()
            break loop
        } 
    }
    print()
    w = 0
    
}

実行すると

  日  月  火  水  木  金  土
           1   2   3   4   5
   6   7   8   9  10  11  12
  13  14  15  16  17  18  19
  20  21  22  23  24  25  26
  27  28  29  30  31


この記事が気に入ったらサポートをしてみませんか?