在JavaSE的算法练习中,绘制菱形是一个比较常见的案例。菱形效果如下图所示:

我们在解决算法问题时,通常情况下,先不要急于马上编码,而是要先观察,找出解决问题的关键所在。

在上图中,我们可以看到,菱形的行数与列数均可沿水平或垂直中轴线予以对折,故菱形的行数与列数均应为奇数;

菱形左上角的空格数量,从顶部至水平中轴线,依次递减,具体说来每行递减一个空格,直至水平中轴线处无空格;

菱形顶部与底部各有一个星号,顶部与底部之间(不含顶部与底部)的部分每行有两个星号,每行其余部分除了星号外均是空格,而且在菱形的上半部分,每行的星号为行起始处(列角标为0),以及列角标为该行次序的2倍数(起始为0,如:起始0行中的星号坐标为0行0列、0行2*0列,即一个星号;1行中的星号坐标为1行0列、1行2*1列,即两个星号;2行中的星号坐标为2行0列、2行2*2列,两个星号;以此类推);

菱形的上半部分沿水平中轴线对折,即可得到菱形的下半部分,从而完成菱形的绘制。

我们在做完上述的算法分析后,接下来通过编码实现菱形的绘制。请详见下述代码:

import java.util.Scanner;
/**
* 绘制菱形
* @author 李章勇
*
*/
public class Demo { public static void main(String[] args) {
Scanner sc=new Scanner(System.in);//创建一个键盘输入对象
System.out.println("请输入一个整数:");//提示输入
int size=sc.nextInt();//输入一个整数,并赋值给size变量
sc.close();//关闭输入流
if(size%2==0){//判断若不为奇数,则将其加1变为奇数
size+=1;
}
//绘制菱形的上半部分
for(int i=0;i<=size/2;i++){
for(int j=size/2;j>i;j--){//菱形的上半部分的左上角处空格绘制
System.out.print(" ");
} for(int j=0;j<=2*i;j++){//菱形中星号与空格的绘制
if(j==0 || j==2*i){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();//绘制好一行就换行 }
//开始绘制菱形的下半部分
int k=0;
for(int i=size/2+1;i<size;i++){
k+=2;//由于是沿水平中轴线对折,故菱形的下半部分中,紧邻菱形水平中轴线的行,相当于其上两行的菱形行的对折,以此类推
for(int j=0;j<i-size/2;j++){
System.out.print(" ");
}
for(int j=0;j<=2*(i-k);j++){
if(j==0 || j==2*(i-k)){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}

运行上述代码,显示效果如下:

  此外,还可以通过下述方法绘制菱形:

package com.itszt.test5;
/**
* 绘制菱形,
*/
public class Test2 {
public static void main(String[] args) {
//绘制菱形,10,行列为奇数
int n=10;
if(n%2==0)
{
n+=1;
}
//上半部分,0--->n/2
for(int i=0;i<=n/2;i++){
for(int j=n/2;j>i;j--){
System.out.print(" ");
}
for(int j=0;j<=2*i;j++){
if(j==0 || j==2*i){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
//下半部分
for(int i=n/2-1;i>=0;i--){
for(int j=i;j<n/2;j++){
System.out.print(" ");
}
for(int j=0;j<=2*i;j++){
if(j==0 || j==2*i){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
} }
}  

JavaSE之绘制菱形的更多相关文章

  1. OpenGL的几何变换[转]

    OpenGL的几何变换 1.实验目的: 理解掌握一个OpenGL程序平移.旋转.缩放变换的方法. 2.实验内容: (1)阅读实验原理,运行示范实验代码,掌握OpenGL程序平移.旋转.缩放变换的方法: ...

  2. (生活)Photoshop入门(不定时更新)

    我可能是想找个工作以外的事情做一下. 目标:我要自学网PhotoShop商业修图. 笔记: .图层 .1总结: 1.1.1图层就好像画画的一张纸,但是每一层又互不影响. 1.1.2图层蒙版(覆盖一层玻 ...

  3. 实验3 OpenGL几何变换

    转自:http://www.cnblogs.com/opengl/archive/2012/10/30/2747130.html 1.实验目的: 理解掌握一个OpenGL程序平移.旋转.缩放变换的方法 ...

  4. VC2008中如何为MFC应用程序添加和删除消息响应函数

    最近重温<MFC Windows应用程序设计>第二版这本书,里面的代码全部是使用VC6.0写的,我Win7下安装的是VS2008开发环境. VC2008下添加和删除常见的消息响应函数有两种 ...

  5. Word2010制作倒福字

    原文: https://www.toutiao.com/i6489772955797553677/ 选择"插入"选项卡,"插图"功能组,"形状&quo ...

  6. 摘记 史上最强大的40多个纯CSS绘制的图形(一)

    今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和网站小图标,真的非常强大,分享给大家. Square(正方 ...

  7. 史上最强大的40多个纯CSS绘制的图形

    Square(正方形) #square { width: 100px; height: 100px; background: red; } Rectangle(矩形) #rectangle { wid ...

  8. 40多个纯CSS绘制的图形

    本文由码农网 – 陈少华原创,转载请看清文末的转载要求. 今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和 ...

  9. 用css3绘制你需要的几何图形

    1.圆形 示例: 思路:给任何正方形元素设置一个足够大的 border-radius ,就可以把它变成一个圆形.代码如下: html: <div class="size example ...

随机推荐

  1. session失效问题

    具体设置很简单,方法有三种: ()在主页面或者公共页面中加入:session.setMaxInactiveInterval();参数600单位是秒,即在没有10分钟活动后,session将失效. 这里 ...

  2. Install a Jenkins on Ubuntu system

    ================================================================================ Jenkins Environment ...

  3. C# group 子句

    group 子句返回一个 IGrouping<TKey,TElement> 对象序列,这些对象包含零个或更多与该组的键值匹配的项. 例如,可以按照每个字符串中的第一个字母对字符串序列进行分 ...

  4. 【框架学习与探究之日志组件--Log4Net与NLog】

    前言 本文欢迎转载,作者原创地址:http://www.cnblogs.com/DjlNet/p/7604340.html 序 近日,天气渐冷,懒惰的脑虫又开始作祟了,导致近日内功修炼迟迟未能进步,依 ...

  5. vue-cli 前端开发,后台接口跨域代理调试问题

    使用 webpack的方式开发的时候,前台开发过程中需要调用很多后台的数据接口,但是通常前后台分离的开发方式,后台的接口数据很可能是不方便或者是不能在前端同学的电脑上运行的,也就出现了所谓的跨域问题. ...

  6. 从零开始搭建Vue组件库——VV-UI

    前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...

  7. Django中请求的生命周期

    1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户 ...

  8. Anaconda快捷搭建Python2和Python3环境

    我们在使用Pycharm编辑Python程序经常会因为不熟悉Python2和Python3的一些代码区别而导致错误,我们知道他们之间很多代码是必须运行在对应版本中的,否则是会报错的.因此,本文介绍一个 ...

  9. ALTER TABLE SWITCH' statement failed. The table x' is partitioned while index 'x' is not partitioned.

    1.L_Monitoring有这么些字段,ID,Collecttime,PlateType,PlateNO以及其他一些这段.建立这个表的时候是个非分区表,其中ID是主键,并在Collecttime,P ...

  10. 一:Tomcat 服务器 在45秒内未启动成功

    myeclipse或者eclipse中 tomcat 启动超时怎么办?     修改文件     找到Eclipse的工作空间\.metadata\.plugins\org.eclipse.wst.s ...