我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java代码输出心形图案

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java代码输出心形图案

初学编程的小伙伴肯定有过这样一个想法,就是我能不能利用代码来输出一个特定的图案呢?比如一个爱心?那必然是可以的,代码能实现的功能很多,这只是其中的一小小用法。以下是思路与代码。

方法一

暴力解法

我们可以先画出一个正方形,然后,随后我们可以在这个正方形的范围内画出一个爱心图案,最后将爱心图案所涉及到的点一个一个标记起来,最后在有标记点的地方输出小爱心,没有标记点的地方输出空白。这样就能在屏幕上输出一个爱心图案了。

例如:这里我选择的是,使用网格图来作为载体,这样更好进行标记点的位置,也便于代码实现
在这里插入图片描述




Java代码实现

注:由于在Java中引用数据类型的默认值为 0 ,所以我们只需要将特定的位置赋值为1起到标记的作用,无需标记其他位置。代码中说的行列是以上面图像作为基础的

public class test {    public static void main(String[] args) {        //根据图像要求,创建一个行长为12,列长为13的二维数组        int[][] arr=new int[12][13];        //第一行像素点的赋值        for(int i=2,j=10; i<5; ++i,--j){            arr[0][i]=1;            arr[0][j]=1;        }        //第二行像素点的赋值        int index=1;        arr[index][1]=1;        arr[index][5]=1;        arr[index][11]=1;        arr[index][7]=1;        //中间独自一个的格子        int n=arr[0].length;        arr[index+1][(n-1)/2]=1;        //第二行到第五行像素点的赋值        int i;        for(i=2; i<6; ++i){            arr[i][0]=1;            arr[i][n-1]=1;        }        //第六行到最后一行的格子        int left=1;        int right=n-2;        for(; i<arr.length; ++i){            arr[i][left++]=1;            arr[i][right--]=1;        }        //内部填满        InternalMarkup(arr);        //输出函数        Effect_Output(arr);    }    //将爱心内部填满    public static void InternalMarkup(int[][] arr){        for(int i=1; i<arr.length; ++i){            //寻找左边界            int left=0;            while(arr[i][left++] == 0);            //寻找右边界            int right=arr[i].length-1;            while(arr[i][right--] == 0);            //左右边界内的格子标记为 1 ,爱心内部填满            while(left <= right){                arr[i][left]=1;                arr[i][right]=1;                ++left;                --right;            }        }        //第一行中间格子需要为零        arr[1][arr[1].length/2]=0;        return;    }    //按传递的参数输出爱心图案    public static void Effect_Output(int[][] arr){        //爱心符号的unicode码        char target='\u2764';        for(int i=0; i<arr.length; ++i){            for(int j=0; j<arr[i].length; ++j){                //判断该下标的值是否为 1 ,是则输出爱心图案,反之输出空格                if(arr[i][j] == 1){                    System.out.print(target+" \t");                } else{                    System.out.print(" \t");                }            }            System.out.println();   //换行        }    }


运行效果
在这里插入图片描述

总结

虽然使用暴力解法,语法变得更简单,但是输出的图像还是太过于生硬了。



方法二

数学公式解法

相信很多人都听说过笛卡尔方程的故事,该方程图形显现出来确实一个心形图像。公式:(X²×Y²-1)³ - X²×Y³=0;

图像
该图片来自网络,侵删
该图片来自网络,侵删



Java代码实现

注:以下代码部分来自知乎,怎么用JAVA打出来小爱心~~~? - 木木编程的回答 - 知乎https://www.zhihu.com/question/352773471/answer/2494438152,注释是自己添加的,本人数学比较差,属实是没想出来怎么用数学公式解这题。

public class test{public static void main(String[] args){        //需要使用浮点数进行运算        float x,y;        //y轴控制的是图像的长度,因为图像打印是由上往下打印,根据图像y从正数开始        //其中递减的值是可由实际情况调整        for(y=1.3f; y>-1.1f; y-=0.15f){            //x轴控制的是图像的宽度,自左向右打印,根据图像x从负数开始            for(x=-1.2f; x<=1.2f; x+=0.05f){                //使用中间变量代替较长的运算                float temp=x*x+y*y-1;                //pow方法作用是获取x的n次方,第一个参数为x,第二个参数为n                if( (Math.pow(temp,3) - (x*x*Math.pow(y,3) )) <= 0.0f){                    //由于unicode码不好进行对齐,所以这里使用 * 号代替                    System.out.print("*");                }else{                    //输出空格                    System.out.print(" ");                }            }            //换行            System.out.println();        }}}


运行效果
在这里插入图片描述



总结

使用公式法解,图像优化了很多,且语法也并不复杂,只是对数学不太感冒的人来说不够友好,例如我,但这的确是我所了解到的最优解了。所以想要写出更好更优美的代码,还是要学好用好数学。在此,吾与诸君共勉之。

感谢各位的阅读,如有错误,欢迎指出。

来源地址:https://blog.csdn.net/Lion__king/article/details/129201751

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java代码输出心形图案

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用python输出心形图案

下面是使用Python输出心形图案的示例代码:```pythonprint(" ** ** ")print(" ** ** ** ** ")print(" **
2023-10-12

python输出菱形代码怎么写

你可以使用以下代码来输出一个菱形:```def print_diamond(n): # 输出上半部分 for i in range(n): print(" " * (n-i-1) + "*" * (2*i+1))
2023-10-11

如何用c语言编程出心形(C语言简单心形代码)

以下是一个简单的C语言代码,可以在命令行中绘制一个心形:```c#include int main() {printf(" *** *** \n");printf(" ****** ****** \n");printf("
2023-09-22

怎么利用C语言输出3D立体感心形图

这篇文章主要介绍“怎么利用C语言输出3D立体感心形图”,在日常操作中,相信很多人在怎么利用C语言输出3D立体感心形图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么利用C语言输出3D立体感心形图”的疑惑有所
2023-06-25

如何使用java打印出菱形图案

首先看图:第一步:首先对图像进行解析想要打印该图形必须要进行多层循环嵌套,分两个部分进行打印。第一部分为上半部分前四行,他们是递增的关系,后半部分后三行为递减关系,由此可以得出我们需要写两个打的循环。并且由于“*”位置的关系,我们必须带入空格同时打印。所以每个
如何使用java打印出菱形图案
2016-04-10

JAVA语言输入输出流的示例代码

这篇文章主要介绍了JAVA语言输入输出流的示例代码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。public class IOStreamDemo { public
2023-06-03

java代码如何导出文件形式

要将Java代码导出为文件形式,可以使用Java的文件操作类和流操作类。以下是一个简单的示例,将字符串内容写入一个文件中:```javaimport java.io.BufferedWriter;import java.io.File;im
2023-10-08

三行Java代码实现计算多边形的几何中心点

因为工作需要计算采煤机工作面的中心点,如果套用数学的计算公式,用java去实现,太麻烦了。本文将利用java几何计算的工具包,几行代码就能求出多变形的中心,简直yyds!还不快跟随小编一起学起来
2022-11-13

Java实现在PPT中创建SmartArt图形的示例代码

SmartArt其实就是一个文字的可视化工具,用户可在PowerPoint,Word,Excel中使用该特性创建各种图形图表。本文就将为您介绍如何通过Java应用程序在PPT中创建SmartArt图形,需要的可以参考一下
2023-05-16

Java中println输出汉字乱码问题一招解决方案

这篇文章主要介绍了Java中println输出汉字乱码问题一招解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-26

Java 2D 绘图的开放源代码备用方案 (转)

Java 2D 绘图的开放源代码备用方案 (转)[@more@]Java 2D 可能是在 Java 程序中编写 2D 图形程序的最显著的解决方案,但它不是唯一的一个。在本文中,Java 开发者 John Carr 提出了一种优秀的备用方案
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录