您的位置:首页 > 移动开发 > Swift

用二维数组绘图swift 2.0

2015-12-13 08:34 411 查看
练习:在控制台(或屏幕)输出如下格子图

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

*/


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()//填充字符,横数,横高,例数,例高;如果不填就是默认值!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift 二维数组