练习:在控制台(或屏幕)输出如下格子图
/*
+ + + + + + + + + +
+ + + +
+ + + +
+ + + + + + + + + +
+ + + +
+ + + +
+ + + + + + + + + +
+ + + +
+ + + +
+ + + + + + + + + +
+ + + +
+ + + +
+ + + + + + + + + +
*/
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()//填充字符,横数,横高,例数,例高;如果不填就是默认值!