java打印两个小人_[原创]Java画小人与阶梯问题的解答

package test;

/**

#Python源代码:

#By:Cat73 QQ 1901803382

#2014年7月22日19:33:12

#画图函数 width:台阶的宽度(至少为4) hight:台阶的高度(至少为4) count:台阶的数量(至少为3)

def paint(width, hight, count):

for i in range(1, count):

other(width, hight, count, i)

#画出最后一行

printCount('*', (width - 1) * (count) + 1, True)

#画出一级台阶

def other(width, hight, count, num):

paintPerson(width, hight, count, num, 0)

printCount('*', width)

printCount(' ', (width - 1) * (num - 1) - 1)

if(num == 1):

print('')

else:

print('*')

for i in range(hight - 2):

paintPerson(width, hight, count, num, i + 1)

printCount('*', 1)

printCount(' ', (width - 1) * (num) - 1)

printCount('*', 1, True)

#画小人 width/hight/count/num:外部传递 n:小人的第几行

def paintPerson(width, hight, count, num, i):

tmp = int(width / 2) - 2

printCount(' ', (width - 1) * (count - num - 1) + tmp)

n = (hight - 1) - i

if(n == 3):

print(" o ", end="")

elif(n == 2):

print("/|\\", end="")

elif(n == 1):

print("/ \\", end="")

else:

print("   ", end="")

printCount(' ', width - 4 - tmp)

#打印一个字符一定次数 c:要打印的字符 i:要打印的次数 n:是否在打印完成后换行

def printCount(c, i, n = False):

for i in range(i):

print(c, end="")

if(n):

print('')

#调用画图测试

paint(4, 4, 3)

paint(5, 4, 4)

paint(8, 8, 5)

*/

/**

* 画小人与阶梯的类(翻译自Python代码) 多线程不同步

* @author Cat73

*/

public final class PaintLadder {

/**

* 要被返回的字符缓存

* */

private StringBuffer buffer = null;

/**

* 操作缓存的指针

*/

private int pBuffer;

/**

* 画小人阶梯

* @param width 阶梯宽度

* @param hight 阶梯高度

* @param count 阶梯数量

* @return 画好的字符串

*/

public String paint(int width, int hight, int count) {

//初始化缓存

int length = ((hight - 1) * (count - 1) + 1) * ((width - 1) * count + 2);

buffer = new StringBuffer(length);

pBuffer = 0;

//画出每一级阶梯

for (int i = 1; i < count; i++) {

other(width, hight, count, i);

}

//画出最后一行

printCount('*', (width - 1) * (count) + 1, true);

//将结果返回

return buffer.toString();

}

/**

* 画出每一层阶梯

* @param width 直接从外部传递

* @param hight 直接从外部传递

* @param count 直接从外部传递

* @param num 正在画第几级阶梯

*/

private void other(int width, int hight, int count, int num) {

//画出一层阶梯的最上方一行

paintPerson(width, hight, count, num, 0);

printCount('*', width, false);

printCount(' ', (width - 1) * (num - 1) - 1, false);

if (num == 1) {

printCount('\n', 1, false);

} else {

printCount('*', 1, true);

}

//画出一层阶梯的其他行

for (int i = 0; i < hight - 2; i++) {

paintPerson(width, hight, count, num, i + 1);

printCount('*', 1, false);

printCount(' ', (width - 1) * (num) - 1, false);

printCount('*', 1, true);

}

}

/**

* 画每一行小人以及小人之前的空格

* @param width 直接从外部传递

* @param hight 直接从外部传递

* @param count 直接从外部传递

* @param num 直接从外部传递

* @param i 该级阶梯的第几行

*/

private void paintPerson(int width, int hight, int count, int num, int i){

//tmp是为了让小人居中用的 画出小人前面的空格

int tmp = (int)(width / 2) - 2;

printCount(' ', (width - 1) * (count - num - 1) + tmp, false);

//画出小人的身体

int n = (hight - 1) - i;

switch(n){

case 3:

outBuffer(" o ");

break;

case 2:

outBuffer("/|\\");

break;

case 1:

outBuffer("/ \\");

break;

default:

//不需要画小人的用空格代替

outBuffer("   ");

}

//画出小人后的空格

printCount(' ', width - 4 - tmp, false);

}

/**

* 打印一个字符N次(这里没打印 调用了加入缓存)

* @param c 要打印的字符

* @param count 要打印的次数

* @param enter 打印完后是否要加换行

*/

private void printCount(char c, int count, boolean enter) {

for (int i = 0; i < count; i++) {

outBuffer(c);

}

if (enter) {

outBuffer('\n');

}

}

/**

* 加入字符串到缓存

* @param s 要加入缓存的字符串

*/

private void outBuffer(String s) {

buffer.insert(pBuffer, s);

pBuffer += s.length();

}

/**

* 加入字符到缓存

* @param c 要加入缓存的字符

*/

private void outBuffer(char c) {

buffer.insert(pBuffer, c);

pBuffer++;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC 参数绑定详解

概述 记得之前跟前端同事联调接口的时候&#xff0c;后端SpringMVC需要接收数组类型的参数&#xff0c;然后跟前端说需要传数组类型过来。后来前端童鞋传了数组&#xff0c;但是后端接收不成功&#xff0c;联调失败。那时候由于时间关系没有仔细研究这块&#xff0c;当时想了个…

java httpcomponents_java – 如何使用Apache httpcomponents从NHttpRequ...

我正在使用Apache httpcomponents实现一个彗星式(延迟响应)http服务器.我的代码与http://hc.apache.org/httpcomponents-core-ga/examples.html的“基本非阻塞HTTP服务器”示例非常相似我使用DefaultServerIOEventDispatch和DefaultListeningIOReactor来分派请求,就像在示例代码…

java servlet是单例吗_关于java:为什么apache servlet是单例?

本问题已经有最佳答案&#xff0c;请猛点这里访问。HttpServletRequest request;HttpServletResponse response;public void doGet(HttpServletRequest request , HttpServlet response){this.request request;this.response response;}如果此servlet一次收到多个请求会发生什…

OkHttp的作用_为什么要使用OkHttp?(笔记)

OkHttp的作用 OkHttp is an HTTP client。 如果是HTTP的方式想得到数据&#xff0c;就需要我们在页面上输入网址&#xff0c;如果网址没有问题&#xff0c;就有可能返回对应的String字符串&#xff0c;如果这个地址是返回字符串的话。 OkHttp是在idea代码中&#xff0c;通过调…

java 连接远程服务器_java实现连接远程服务器并执行命令的基本原理

一、所需jar包需要借助Ganymed SSH的jar包: ganymed-ssh2-build210.jar二、实现原理Ganymed SSH-2 java在整个访问过程中担当SSH的客户端&#xff0c;由于Linux系统自带SSH服务&#xff0c;所以可以直接访问Linux系统并执行相关命令&#xff0c;而 Windows系统则需要首先安装S…

SpringMVC接收基本类型和包装类型

先看一个示例&#xff1a; 注意这两个参数都没有加RequestParam注解。 测试&#xff1a; 直接报错。即没有加RequestParam注解&#xff0c;基本数据类型参数是必填的。 再测试&#xff1a; 直接返回null&#xff0c;也就是说包装类型参数&#xff0c;没有加RequestParam注解&…

SpringMVC 【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam 注解】

SpringMVC 第四篇【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam 注解】 参数绑定 我们在 Controller 使用方法参数接收值&#xff0c;就是把 web 端的值给接收到 Controller 中处理&#xff0c;这个过程就叫做参数绑定… 默认支持的参数类型 从上面的用…

MySQL保留字不能作为字段名使用_Table字段不能设为关键字range,range在mysql中是分区,是mysql的关键字

mysql 中Table字段不能设为关键字range&#xff0c;range在mysql中是分区,是mysql的关键字 在设计MySQL字段的时候&#xff0c;无意中使用InOut这个名称作为字段名称&#xff0c;结果前端提交后就是没有写入数据库&#xff01;但后端没有任何提示&#xff0c;跟踪mySQL日志&…

java+的数组分割符_Java:使用分隔符连接基元数组

小编典典这是我想出的。有几种方法可以执行此操作&#xff0c;它们取决于您使用的工具。使用StringUtils和ArrayUtils来自CommonLang&#xff1a;int[] arr new int[] {1, 2, 3, 4, 5, 6, 7};String result StringUtils.join(ArrayUtils.toObject(arr), " - ");您不…

MySQL中 IS NULL、IS NOT NULL、不等于, 能用上索引吗?

MySQL的WHERE子句中包含 IS NULL、IS NOT NULL、! 这些条件时便不能使用索引查询&#xff0c;只能使用全表扫描。 告诉大家结论&#xff1a; MySQL中决定使不使用某个索引执行查询的依据就是成本够不够小&#xff0c;如果null值很多&#xff0c;还是会用到索引的。 自己做了个…

Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的企业网站系统, 该项目可用各类java课程设计大作业中, 企业网站系统的系统架构分为前后台两部分, 最终实现在线上进行企业网站系统各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类企业网站系统相关的实体…

MySQL创建联合索引,字段的先后顺序,对查询的影响分析

文章目录前言最左匹配原则为什么会有最左前缀呢&#xff1f;联合索引的存储结构联合索引字段的先后顺序b树可以存储的数据条数总结前言 ​ 对于联合索引我们知道&#xff0c;在使用的时候有一个最左前缀的原则&#xff0c;除了这些呢&#xff0c;比如字段放置的位置&#xff0…

php oracle 操作 sql语句中能不能添加数组_如何在PHP中使用Oracle数据库_php

在php3.0以上版本中&#xff0c;php内置了几乎目前所有的数据库处理函数&#xff0c;包括oracle;在本文中我们通过一个实例来介绍了如何使用这些函数来操作Oracle数据库。PHP提供了2大类API(应用程序接口)来操作Oracle数据库。一个是标准的Oracle处理函数(ORA) 另一个是Oracle …

mysql where过滤条件中and连接的两个条件的顺序不必和建立的联合索引的字段顺序一致_mysql and 顺序_mysql执行过程以及顺序

mysql中and的判断顺序 select * from a join b on 条件一 and 条件二条件一和二都是判断 id 字段&#xff0c; 条件一和条件二哪个先执行&#xff1f; 解析器会自动选择最优的流程执行的 这两个都是平级条件&#xff0c;理论上是没有先后顺序的&#xff01; 没有顺序&#xff…

php开发电商项目的技术,[项目实战] php电商开发基本功课程 电商后台实战开发视频教程 共6章...

1-1需求分析.mp41-2 数据表建立.mp41-3 前期准备.mp42-1 验证码制作.mp42-2 数据库操作函数封装.mp42-3 登录验证.mp42-4 自动登录功能.mp42-5 后台用户信息管理.mp42-6 分页页码代码封装.mp42-7 后台用户信息分页页码制.mp43-1 添加分类信息.mp43-2 显示分类信息.mp43-3 修改分…

MySQL优化器_MySQL查询优化器

MySQL优化器 MySQL架构图 讲到MySQL&#xff0c;就绕不开他的架构图。MySQL是一个经典的C/S架构。服务器这边分两层&#xff1a;第一层是Server层&#xff0c;第二层是存储引擎。Server层处理主要的业务操作流程&#xff0c;但不关心具体的存储逻辑。存储逻辑由存储引擎层去…

php取商,PHP获取百度关键词排名

PHP获取百度关键词排名$k$_GET[‘k’] ? $_GET[‘k’] : ‘蓝普网络‘;$u$_GET[‘u’] ? $_GET[‘u’] : ‘www.wbphp.cn’;$rn’50’;$url “https://www.baidu.com/s?ieutf-8&wd”.$k.”&rn”.$rn;$ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_se…

MySQL性能优化(一)MySQL中SQL语句是如何执行的?

该篇章将开始整理MySQL的优化&#xff0c;不过开始之前&#xff0c;我们想了解清楚那就是MySQL是怎么执行的。 文章目录1.MySQL驱动2.应用系统数据库连接池3.MySQL数据库连接池4.SQL执行过程4.1.线程监听&#xff1a;监听网络请求中的SQL语句4.2.SQL接口&#xff1a;负责处理接…

php通过ajax下载文件,通过Ajax如何请求下载Execl文件

本篇文章给大家分享的是关于通过Ajax如何请求下载Execl文件&#xff0c;内容很不错&#xff0c;有需要的朋友可以参考一下&#xff0c;希望可以帮助到大家。通过Ajax请求下载Execl 的问题&#xff0c;掉进一个坑里半个多小时&#xff0c;特此来记录一下 。起初 我误以为是后台的…

2023_Spark_实验三十三:配置Standalone模式Spark3.4.2集群

实验目的&#xff1a;掌握Spark Standalone部署模式 实验方法&#xff1a;基于centos7部署Spark standalone模式集群 实验步骤&#xff1a; 一、下载spark软件 下载的时候下载与自己idea里对应版本的spark News | Apache Spark 选择任意一个下载即可 - spark 3.4.1 - spark …