天天看点

用二维数组绘图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 . {
array.append(Array(count: ,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=;i<;i++
    {
    array[][i]="+"
    } 

/*
+ + + + + + + + + +
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
# # # # # # # # # #
 # # # # # # # # 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输出行,每行间有个间隔所以:i*3
for var i=;i<;i++ {
henxian(,js:,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=,hg:Int=,ls:Int=,lg:Int=){

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

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

for _ in ..(hs*hg)+hs {
array.append(Array(count:(ls*lg)+ls+ ,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=;i<hs+;i++ {
henxian(,js:((ls*lg)+ls)+,djh:i*(hg+))
}
for var i=;i<ls+;i++ {
   shuxian(,js:(hs*hg)+hs+,djs:i*(lg+)) 
}
for var i=; i<array.count; i++ {
  for var j=; j<array[i].count; j++ {
    print(array[i][j],terminator:" ")
  } 
  print("")
}
}

bk()//填充字符,横数,横高,例数,例高;如果不填就是默认值!