【趣题】用for循环输出菱形

用for循环输出如上图所示的菱形

思路:

我们以17为例

首先,输出一列九行的星号,这是最熟悉的逐行输出

public class test{
    public static void main(String[] args) {
        int linesum = 17;//菱形的最大行数,输入一个    奇数

        for (int i=1; i<=linesum; i++){//i为当前所在行
            System.out.println("*");
        }
    }
}     

分析一下菱形

红线以上的部分星号是递增的,红线以下的部分是递减的

我们把菱形分成两个部分

public class test{
    public static void main(String[] args) {
        int linesum = 17;//菱形的最大行数,输入一个    奇数
        int maxline = (linesum + 1) / 2;
        int minline = linesum - maxline;

        //上半部分-递增
        for (int i=1; i<=maxline; i++){//i为当前所在行
            System.out.println("*");
        }

        //下半部分-递减
        for (int i=1; i<=minline; i++){//i为当前所在行
            System.out.println("*");
        }

    }
}     

现在我们先考虑上半部分

首先要解决的是缩进问题(这里可能用词不准确)

可以看到

第一行一共有16个空格

第二行一共有14个空格

由上到下每行的空格数为linesum(总行数)- 当前行数

public class test{
    public static void main(String[] args) {
        int linesum = 17;//菱形的最大行数,输入一个    奇数
        int maxline = (linesum + 1) / 2;
        int minline = linesum - maxline;

        //上半部分-递增
        for (int i=1; i<=maxline; i++){//i为当前所在行
            for (int space=1; space <= (maxline-i); space++){
                System.out.print("  ");//""号内为两个空格
            }
            System.out.println("*");
        }

        //下半部分-递减
        for (int i=1; i<=minline; i++){//i为当前所在行
            System.out.println("*");
        }

    }
}   

输出结果如下

现在来把菱形的上半部分补好

public class test{
    public static void main(String[] args) {
        int linesum = 99;//菱形的最大行数,输入一个奇数
        int maxline = (linesum + 1) / 2;
        int minline = linesum - maxline;

        //上半部分-递增
        for (int i=1; i<=maxline; i++){//i为当前所在行
            for (int space=1; space <= (maxline-i); space++){
                System.out.print("  ");//""号内为两个空格
            }
            for (int star=1; star<=i+(i-1); star++){
                System.out.print("* ");//""号内为*号加一个空格
            }

            System.out.println();//每次输出后换行
        }

        //下半部分-递减
        for (int i=1; i<=minline; i++){//i为当前所在行
            System.out.println("*");
        }

    }
}   

输出结果如下

上半部分的就做好了

下半部分的逆向思维吧...

多做了个空心菱形

public class test{
        public static void main(String[] args) {
            int linesum = 17;//菱形的最大行数,输入一个奇数
            int maxline = (linesum + 1) / 2;
            int minline = linesum - maxline;

            //上半部分-递增
            for (int i=1; i<=maxline; i++){//i为当前所在行
                for (int space=1; space <= (maxline-i); space++){
                    System.out.print("  ");//""号内为两个空格
                }
                for (int star=1; star<=i+(i-1); star++){
                    if (star==i+(i-1)){
                        System.out.print("* ");
                    }
                    else if (star==1){
                        System.out.print("* ");
                    }
                    else{
                        System.out.print("  ");
                    }
                }

                System.out.println();//每次输出后换行
            }

            //下半部分-递减
            for (int i=minline; i>=1; i--){//i为当前所在行
                for (int space=0; space<=(minline-i); space++){
                    System.out.print("  ");
                }
                for (int star=i+(i-1); star>=1; star--){
                    if (star==i+(i-1)){
                        System.out.print("* ");
                    }
                    else if (star==1){
                        System.out.print("* ");
                    }
                    else{
                        System.out.print("  ");
                    }
                }

                System.out.println();
            }

        }
    }   

原理就是用if控制输出

                                              水汐音

                                            2018-05-23

原文地址:https://www.cnblogs.com/syxy/p/9072320.html

时间: 2024-10-11 10:39:00

【趣题】用for循环输出菱形的相关文章

for循环输出菱形的形状【java】

使用for循环语句输出以下"菱形"效果: * *** ***** ******* ********* ******* ***** *** * 代码 1 /* 2 * 3 *** 4 ***** 5 ******* 6 ********* 7 ******* 8 ***** 9 *** 10 * 11 12 分析: 13 - 上层(共5层) 14 每层构成:每层每层空格数+每层星星数 15 第1层 -- 空格数:4 + 星星数:1 16 第2层 -- 空格数:3 + 星星数:3 17 第

用JAVA 的for循环输出 菱形

public class For{ public static void main(String[] args){ //首先.把菱形看成上下两部分,上五下四,所以,第一个for循环有5次,第二个for循环有4次 for( int i = 1; i <= 5; i++){ //将空格和*分开看,看" "的变化i=1时,它是4,2的时候是3,找规律 for( int j = 1; j <= 5-i ; j++){ System.out.print(" ");

for循环输出菱形

package com.hanqi; public class lingxing { public static void main(String[] args) { for(int m=1;m<=10;m++) { //输出空格 for(int n=9;n>=m;n-- ) { System.out.print(" "); } //输出* for(int n=1;n<=m;n++) { System.out.print("*"); } for(i

for循环输出空心菱形的形状【java】

使用for循环语句输出以下"空心菱形"效果: * * * * * * * * * * * * * * * * 建议优先参考笔者的另一篇文章:<for循环输出菱形的形状[java]> 代码: 1 /* 2 * 3 * * 4 * * 5 * * 6 * * 7 * * 8 * * 9 * * 10 * 11 12 分析: 13 上图形似于实心菱形 14 * 15 *** 16 ***** 17 ******* 18 ********* 19 ******* 20 *****

2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询

1 import java.util.Scanner; 2 3 4 public class Number { 5 6 private static Object i; 7 8 /* 9 *第一题 mingrikejijavabu中字符“i” 出现了几次,并将结果输出*/ 10 public static void main(String[] args) { 11 12 String r ="imingrikejijavabi"; 13 14 15 //第一种 截取 16 int a=

【C语言】用循环语句输出菱形

//用循环语句输出菱形 #include <stdio.h> int main() { int i,j; for(i=0;i<=3;i++) //上4行 { for(j=0;j<=3;j++) //上4行的左边 { if(i+j<=2) printf(" "); else printf("*"); } for(j=4;j<=6;j++) //上4行的右边 { if(j-i>=4) printf(" ");

控制台应用程序C++输出菱形

// Rhombus.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <math.h> using namespace std; void rhombus(char,char,int); int _tmain(int argc, _TCHAR* argv[]) { rhombus('O',' ',5); return 0; } void rhombus(char c

shell脚本编程设计——根据输入的数输出菱形、三角形或者数字金字塔(带闪烁颜色)

shell脚本编程设计--根据输入的数输出菱形.三角形或者数字金字塔(带闪烁颜色) shell脚本程序和解释如下 #!/bin/bash #创建死循环,当输入出错或者输入"quit"字符串退出脚本程序 while true do #等待用户输入 read -p "请输入一个不大于20的正整数(输入"quit"则退出):" n #先判断字符串是否是quit if [ "$n" == "quit" ] then

输出菱形图案,C语言实现

★C语言输出菱形图案 #include<stdio.h>  void a(int i) { int j, k; for (j = 0; j <= 3 - i; j++) printf(" ");       //输出空格 for (k = 0; k<2 * i + 1; k++) printf("*");      //输出* printf("\n"); } int  main() { int i; for (i = 0;