用二维数组绘图swift 2.0

练习:在控制台(或屏幕)输出如下格子图

/*
+ + + + + + + + + +
+     +     +     +
+     +     +     +
+ + + + + + + + + +
+     +     +     +
+     +     +     +
+ + + + + + + + + +
+     +     +     +
+     +     +     +
+ + + + + + + + + +
+     +     +     +
+     +     +     +
+ + + + + + + + + +

*/

0.1如果图案以后不需再去改变的话,直接输出就行了!但是情况往往不是这样的。

print(+ + + + + + + + + +)//1行
print(+     +     +     +)//2行
print(+     +     +     +)//3行
print(+ + + + + + + + + +)//4行
print(+     +     +     +)//5行
print(+     +     +     +)//6行
print(+ + + + + + + + + +)//7行
print(+     +     +     +)//8行
print(+     +     +     +)//9行
print(+ + + + + + + + + +)//10行
print(+     +     +     +)//11行
print(+     +     +     +)//12行
print(+ + + + + + + + + +)//13行

0.2考虑到将来会改变,我们可以更方便的适应不同的情况;

思路一分析:
    第1行与4、7、10、13行都是一个样式(A),剩下的行也是相同的另一个样式(B),可以把两个样式做成函数,循环输出,将来如果要改变直接在样式上和循环上面修改就行了。

思路二分析:
    从宏观的角度观察,图案是由横线和竖线绘成的格子,可以把它分成横线和竖线来绘制,但是控制台(或屏幕)是一行一行输出的,在输出完成第二行之后是不能回去修第一行的,怎么办呢!……用一个二维数组缓冲,之后一次性输出这个二维数组!

思路三分析:
    从微观的角度分析,大的图案是由一个一个小的图案组成的,把每一个小图案当成一个小对象,设计每一个对象,然后组合这此小对象,将来要修改时,修改这此小对象就行了!


 循环输出 思路一  在之前的字母金字塔 有做过例子,这里就用第二种思路先绘一个看看先吧!

新建个名字为:array,类型为:Character (字符)的二维数组;

var array=Array<Array<Character>>()

给二维数组赋值,0…12=13例,count:10=10行,repeatedValue:” “=赋相同的值;如如果在网页:http://swiftstub.com/试 要加#号 如:repeatedValue:”#”因为空格它不输出

for _ in 0...12 {
array.append(Array(count:10 ,repeatedValue:" "))
}

测试一下这个二维数组:

array[0][0]="1"
array[0][9]="2"
array[12][0]="3"
array[12][9]="4"

for var i=0; i<array.count; i++ {
  for var j=0; j<array[i].count; j++ {
    print(array[i][j],terminator:" ")
  } 
  print("")
}
/*
1 # # # # # # # # 2
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
3 # # # # # # # # 4
*/

OK 没问题!下面绘横线,i=0从0开始;i<10到9结束;array[0][i]=”+”,0:行数;

for var i=0;i<10;i++
    {
    array[0][i]="+"
    } 

/*
+ + + + + + + + + +
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
3 # # # # # # # # 4
*/

图案没问题;打包成方法(函数)叫henxian;
表示–》ks:开始;js:结束;djh:第几行

func henxian(ks:Int,js:Int,djh:Int){
  for var i=ks;i<js;i++
    {
    array[djh][i]=tn
    } 
}
//循环调用函数henxian输出5行,每行间有2个间隔所以:i*3
for var i=0;i<5;i++ {
henxian(0,js:10,djh:i*3)
}

/*
+ + + + + + + + + +
# # # # # # # # # #
# # # # # # # # # #
+ + + + + + + + + +
# # # # # # # # # #
# # # # # # # # # #
+ + + + + + + + + +
# # # # # # # # # #
# # # # # # # # # #
+ + + + + + + + + +
# # # # # # # # # #
# # # # # # # # # #
+ + + + + + + + + +
*/

竖线改改参数就行了

func shuxian(ks:Int,js:Int,djs:Int){
  for var i=ks;i<js;i++
    {
    array[i][djs]="+"
    }
}

for var i=0;i<4;i++ {
   shuxian(0,js:12,djs:i*3) 
}
/*
+ + + + + + + + + +
+ # # + # # + # # +
+ # # + # # + # # +
+ + + + + + + + + +
+ # # + # # + # # +
+ # # + # # + # # +
+ + + + + + + + + +
+ # # + # # + # # +
+ # # + # # + # # +
+ + + + + + + + + +
+ # # + # # + # # +
+ # # + # # + # # +
+ + + + + + + + + +

*/

至此已经基本完成!

//+优化++优化++优化++优化++优化++优化++优化++优化++优化++优化++优化

为了方便修改或调用打包成函数:bk ,
只要求输入:tn**图案,hs行数,hg行高,ls例数,lg例高** 即可

func bk (tn:Character="+",hs:Int=4,hg:Int=2,ls:Int=3,lg:Int=2){

guard hs >= 0 && hg >= 0 && ls>=0 && lg>=0
else{
    return print("你数学是体育老师教的吗?")
    }

var array=Array<Array<Character>>()

for _ in 0...(hs*hg)+hs {
array.append(Array(count:(ls*lg)+ls+1 ,repeatedValue:" "))//如果在http://swiftstub.com/编译这里……Value:"#"))//加个#
}

func henxian(ks:Int,js:Int,djh:Int){
  for var i=ks;i<js;i++
    {
    array[djh][i]=tn
    } 
}

func shuxian(ks:Int,js:Int,djs:Int){
  for var i=ks;i<js;i++
    {
    array[i][djs]=tn
    }
}

for var i=0;i<hs+1;i++ {
henxian(0,js:((ls*lg)+ls)+1,djh:i*(hg+1))
}
for var i=0;i<ls+1;i++ {
   shuxian(0,js:(hs*hg)+hs+1,djs:i*(lg+1)) 
}
for var i=0; i<array.count; i++ {
  for var j=0; j<array[i].count; j++ {
    print(array[i][j],terminator:" ")
  } 
  print("")
}
}

bk()//填充字符,横数,横高,例数,例高;如果不填就是默认值!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值