重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这样的代码光是看是很难看明白的,自己举个例子简单地在纸上写一写画一画,就比较容易明白了。
创新互联拥有10余年成都网站建设工作经验,为各大企业提供成都网站设计、做网站服务,对于网页设计、PC网站建设(电脑版网站建设)、成都App制作、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、主机域名等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。
假定size=5,可以想像一下菱形的形状,size/2+1=3,按以上代码的逻辑来看,就是先处理上面的3行,然后处理下面剩下的2行。
处理上面3行的时候,每一行需要根据行数分别输出*和空格。先看第1行,i==0.
for (int i = 0; i size / 2 + 1; i++) {
for (int j = size / 2 + 1; j i + 1; j--) {
System.out.print(" ");// 输出左上角位置空白
}
这段代码此时的i==1,内层循环走完以后,会输出2次空格(j==3,j==2时),
然后依次往下走。
不得不说,上面的代码写的太复杂了,这么多for循环,看着好费劲的说~~
java打印菱形通过二维数组来打印,实例如下:
int hangshu = 11;
int yiban = hangshu / 2 + 1;
int yibanduo = hangshu / 2;
System.out.println("空心菱形:");
for(int k = 1;k = yiban;k++){
for(int i = 1;i = (yiban - k);i++){
System.out.print(" ");
}
System.out.print("*");
for(int i = 1;i = ( (k - 2) * 2 + 1);i++){
System.out.print(" ");
}
if(k != 1){
System.out.print("*");
}
System.out.println();
}
for(int k = yibanduo;k =1;k--){
for(int i = 1;i = (yiban - k);i++){
System.out.print(" ");
}
System.out.print("*");
for(int i = 1;i = ( (k - 2) * 2 + 1);i++){
System.out.print(" ");
}
if(k != 1){
System.out.print("*");
}
System.out.println();
}
System.out.println("实心菱形:");
for(int i = 1;i = hangshu;i++){
if(i = hangshu/2 + 1){
for(int k = 1;k = hangshu/2 + 1- i;k++){
System.out.print(" ");
}
for(int k = 1;k = i;k++){
System.out.print("* ");
}
System.out.println();
}else{
for(int k =1;k = (i -(hangshu/2 + 1));k++){
System.out.print(" ");
}
for(int k = 1;k = (2 *(hangshu/2 + 1) - i);k++){
System.out.print("* ");
}
System.out.println();
}
}
结果如下:
import java.util.Scanner;
public class Diamond {
public static void main(String[] args) {
int length=1;//存储菱形的边长的变量
Scanner sc =new Scanner(System.in);//输入数据的扫描对象
System.out.println("请输入菱形的边长:");
length = sc.nextInt();//获取输入的边长数值
/*打印菱形的上半部分三角形 行数为length行*/
for (int i=1; i=length;i++) {//需要打印的行数
for(int j=1;j=length-i;j++){//打印左边空白的区域,随行递减1
System.out.print(" ");
}
for(int k=1;k=2*i-1;k++){//打三角形的区域
if(k==1||k==2*i-1){//空心的获取 除每行第一个以及最后一个 外其余为空白
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
/*打印菱形的下半部分三角形 中间行公用 故行数为length-1*/
for (int i = length-1;i0;i--){
for(int j=1;j=length-i;j++){
System.out.print(" ");
}
for(int k=1;k=2*i-1;k++){
if(k==1||k==2*i-1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
可以这么分析:空心菱形是将实心菱形挖空,而挖空的实质是去掉每行除了第一行和最后一行之外的" *".对实心菱形而言,用i控制行数,而其每一行都由两段连续的符号集组成(一段是只由空格组成的序列,另一段则由空格+星号排列而成),因此在每一行里,我们可用两个循环分别实现这两段符号集,每一行结束要记得换行.在此基础下上,我们只要加个"只输出每一行的首列及其最后一列的空格+星号,而其它位置用两个空格代替"这样的条件即可实现空心菱形.具体实例如下: public class Demo{ public static void main(String[] args){ int i,j; for(i=1;i=4;i++) //空心菱形上三角部分 { for(j=1;j=40-2*i;j++) System.out.print(" "); for(j=1;j=2*i-1;j++) if(j==1||j==2*i-1) System.out.print(" *"); else System.out.print(" "); System.out.println(); } for(i=3;i=1;i--) //空心菱形除了上三角的其余部分 { for(j=1;j=40-2*i;j++) System.out.print(" "); for(j=1;j=2*i-1;j++) if(j==1||j==2*i-1) System.out.print(" *"); else System.out.print(" "); System.out.println(); } } }