java打印出菱形图案实例详解

 更新时间:2020年02月25日 08:41:02   作者:V  
在本篇文章里小编给大家分享的是关于java打印出菱形图案实例详解,需要的朋友们可以学习下。

第一步:首先对图像进行解析

想要打印该图形必须要进行多层循环嵌套,分两个部分进行打印。

第一部分为上半部分前四行,他们是递增的关系,后半部分后三行为递减关系,由此可以得出我们需要写两个打的循环。并且由于“*”位置的关系,我们必须带入空格同时打印。所以每个部分需要两个循环控制,即两个大循环每个里面嵌套两个小循环总计四个循环。

第二部:对数字进行分析

在分析之前,我们必须明白外层循环控制行数,内层循环控制列数,因此我们需要分析他的行和列。

示例代码如下:

class ForForTest {
  public static void main(String[] args) {
     
/*
输出如下图形:  行数i:  空格数j:  “*”数目z:
   *       1     3      1
  ***      2     2      3
  *****      3     1      5
 *******     4     0      7
  *****      1     1      5   6
  ***      2     2      3   5
   *       3     3      1   4
 */
    for (int i = 1;i <= 4;i++){
      for (int j = 1;j <= 4 - i;j++) {
        System.out.print(" ");
      }
      for (int z = 1;z <= i*2-1;z++){
        System.out.print("*");
      }
      System.out.println();
    }
    for (int i = 1;i <= 3;i++){
      for (int j = 1;j <= i;j++){
        System.out.print(" ");
      }
      int y = 3;
      for (int z = 5;z >= 2*i-1;z--){
        System.out.print("*");
      }
      System.out.println();
    }
  }
}

实例补充

import java.util.Scanner;
import java.util.regex.Matcher;
public class test01 {
private static int i;
private String ch;
public static void main(String[] args) {
    runTest();
    }
private void printBlank(int blank){//打空格
    for(int i=blank;i>=1;i--){
        System.out.print(" ");
    }
}
    private void printStar( int sum,String ch){ //打图形
        for(int i=sum;i>=1;i--){
            System.out.print(ch);
        }
    }
    private void printTab(){ //打回车
        System.out.println();
    }
    private void run(int level,String ch){//综合打
        if(ch.length()==1){
            for(i=1;i<=(level+1)/2;i++){
                if(i==1){
                    printBlank((level+1)/2-i);
                    printStar(1,ch);
                    printTab();
                }else{
                    printBlank((level+1)/2-i);
                    printStar(1,ch);
                    printBlank(((level+1)/2+i-1)-((level+1)/2-i)-2); //总元素为 层数+i-1,再减去打印的空格和*号数量.
                    printStar(1,ch);
                    printTab();
                }
            } for(i=(level+1)/2-1;i>=1;i--){
                if(i==1){
                    printBlank((level+1)/2-i);
                    printStar(1,ch);
                    printTab();
                }else{
                    printBlank((level+1)/2-i);
                    printStar(1,ch);
                    printBlank((level+1)/2+i-1-((level+1)/2-i)-2);
                    printStar(1,ch);
                    printTab();
                }
            }
        }else{
            for(i=1;i<=(level+1)/2;i++){
                if(i==1){
                    printBlank((level+1)/2-i+ch.length()/2);
                    printStar(1,ch);
                    printTab();
                }else{
                    printBlank((level+1)/2-i);
                    printStar(1,ch);
                    printBlank(((level+1)/2+i-1)-((level+1)/2-i)-2); //总元素为 层数+i-1,再减去打印的空格和*号数量.
                    printStar(1,ch);
                    printTab();
                }
            } for(i=(level+1)/2-1;i>=1;i--){
                if(i==1){
                    printBlank((level+1)/2-i+ch.length()/2);
                    printStar(1,ch);
                    printTab();
                }else{
                    printBlank((level+1)/2-i);
                    printStar(1,ch);
                    printBlank((level+1)/2+i-1-((level+1)/2-i)-2);
                    printStar(1,ch);
                    printTab();
                }
            }
        }
        }
    public static void runTest() { //判断条件
        Scanner s = new Scanner(System.in);
        try{
            System.out.println("请输入要打印的层数,只能输入大于等于3的奇数 :" );
            int level = s.nextInt();
            String str = String.valueOf(level);
            if(str.matches("[1-9]\\d*")&&Integer.parseInt(str)%2!=0&&Integer.parseInt(str)!=1){
                System.out.println("请输入要打印的形状:" );
                String ch = s.next();
                try{
                    if(ch.matches("[^\u4e00-\u9fa5]+" )){
                        new test01().run(level, ch);
                    }else {
                        throw new Exception();}
                }catch (Exception e) {
                    System.out.println("输入有误!!!不能包含汉字字符,请重新输入");
                    System.out.println("***********************************");
                    runTest(); //递归
                }
            }else if(str.matches("[-9-0]+")){ //
                throw new Exception();
            }
        }catch (Exception e) {
            System.out.println(" 输入有误!!!只能输入大于等于3的奇数,请重新输入");
            System.out.println("***********************************");
            runTest(); //递归
        }
    }
    }

以上就是java打印出菱形图案实例详解的详细内容,更多关于java打印菱形图案的资料请关注脚本之家其它相关文章!

相关文章

  • spring注解@Service注解的使用解析

    spring注解@Service注解的使用解析

    这篇文章主要介绍了spring注解@Service注解的使用解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java进行Appium自动化测试的实现

    Java进行Appium自动化测试的实现

    这篇文章主要介绍了Java进行Appium自动化测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 详解Spring cloud使用Ribbon进行Restful请求

    详解Spring cloud使用Ribbon进行Restful请求

    这篇文章主要介绍了详解Spring cloud使用Ribbon进行Restful请求,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Java 位运算符>>与>>>区别案例详解

    Java 位运算符>>与>>>区别案例详解

    这篇文章主要介绍了Java 位运算符>>与>>>区别案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 浅谈自定义校验注解ConstraintValidator

    浅谈自定义校验注解ConstraintValidator

    鉴于通用性和普遍性,Spring框架提供了validator组件,通过一些校验器,可以对一些数据进行统一的完整性和有效性等校验,即简单又好用
    2021-06-06
  • Java中的List和MySQL中的varchar相互转换的解决方案

    Java中的List和MySQL中的varchar相互转换的解决方案

    实体类中有一个 List<String> 类型的属性,对应于 MySQL 表里的 varchar 字段,使用 MyBatis 添加或查询时能互相转换,本文给大家介绍Java中的List和MySQL中的varchar相互转换的解决方案,需要的朋友可以参考下
    2024-06-06
  • 使用eclipse导入javaWeb项目的图文教程

    使用eclipse导入javaWeb项目的图文教程

    这篇文章主要介绍了如何使用eclipse导入别人的javaWeb项目,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java基础教程之包(package)

    Java基础教程之包(package)

    这篇文章主要介绍了Java基础教程之包(package),本文详细讲解了包的创建、使用等方法,需要的朋友可以参考下
    2014-08-08
  • JAVA后端学习精华之网络通信项目进阶

    JAVA后端学习精华之网络通信项目进阶

    不同项目之间的通信方式分为,http、socket、webservice;其中socket通信的效率最高,youtube就采用的是原始的socket通信,他们信奉的原则是简单有效
    2021-09-09
  • SpringBoot集成RabbitMQ实现用户注册的示例代码

    SpringBoot集成RabbitMQ实现用户注册的示例代码

    这篇文章主要介绍了SpringBoot集成RabbitMQ实现用户注册的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论