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++;

}

}

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

  1. java打印 好看的图形_分享java打印简单图形的实现代码

    我们平时都是使用的画图工具进行简单图形的绘制,今天我们使用java打印一些简单的图形 实现代码如下 package test; /** * * @author hanzel * @打印图形 * */ ...

  2. java打印args的内容_解决java main函数中的args数组传值问题

    这几天面试中有遇到关于main数组中的args数组传值的问题,一般是从命令提示符中传值,也可以直接在java代码中赋值. 而且这个数组的长度是动态的,根据传值的个数确定数组的长度. 1.从命令提示符中 ...

  3. java 文档比较功能_[原创]java在线比较两个word文件

    一.项目背景 开发文档管理系统或OA办公系统的时候,实现在线处理word文档的功能比较容易,但是也经常会有客户提出文档版本管理的需求,这就需要同时在线打开两个word文件,对比两个不同版本的word文 ...

  4. java打印图片到页面_在Java中打印BufferedImage的正确方法

    这是我的一个Java项目中的一个.此代码将在打印机页面上缩放和打印一个图像. 你这样称呼它: printButton.addActionListener(new ActionListener() { ...

  5. java实现两个数运算_用java做简单的计算器类,实现两个数字的加减乘除运算

    计算器类 package calculator; import java.util.Scanner; public class Calculator{ private float number1; p ...

  6. java文件批量改名代码_[原创]JAVA版批量更名程序(附源码)(要求加分)

    这是上学时JAVA课程的课程实践,因为学习好,老师让写一个比较有难度的程序出来,不要随便写个简单的来应付. 当时也不知道什么类型的程序在JAVA里比较有难度,正好在JAVA中文论坛里看到有人问用JAV ...

  7. 线程Java的两种方式_多线程(java和guava两种方式):

    1.Java 当要使用线程去执行一个任务时,可以使用ExecutorService.submit(new Callable); 这样可以不影响其他的业务的执行,但是在线程中的异常不能捕获到,也不能知道 ...

  8. java 反射创建对象并赋值_[原创] Java JDBC连接数据库,反射创建实体类对象并赋值数据库行记录(支持存储过程)...

    1 import java.lang.reflect.*;2 import java.sql.*;3 import java.util.*;4 5 public classSqlHelper {6 / ...

  9. java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)

    示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] ...

最新文章

  1. 三星二级菜单_你知道三星 Galaxy 手机中的这个隐藏菜单吗?
  2. MySQL数据库性能优化--SQL优化
  3. 数据意识上的“代沟”
  4. vscode 代码莫名爆红(未定义标识符 “nullptr“)解决办法(VSCode 如何快速打开c_c++_properties.json文件)
  5. 在zabbix中添加监控主机及Items
  6. leetcode 1052. 爱生气的书店老板(滑动窗口)
  7. stick和stuck的区别_怎样区别“stick to”、“stick with”和“stick by”这三个表达?...
  8. Win11系统如何隐藏快速搜索
  9. 开源PHP多应用授权系统源码
  10. Python_sklearn_回归
  11. 机战 mysql_机战完整端-加配套网站-架设说明-配套工具
  12. 通过Console口本地加载系统程序
  13. VueX模块化使用(超级实用)
  14. 最新oss对象储存防红直连 防红代码html静态页面
  15. 一种基于SoC和阿里云的智能家居系统设计方案_家电研究报告
  16. 汉武帝不仅需要建功立业的董仲舒、汲黯、卫青,也需要能让他整天快乐的东方朔...
  17. 【Hive】Hive数据倾斜以及解决方案
  18. nodejs中的事件events
  19. Word中给论文添加引用
  20. office2010/2013/2016安装过程提示问题Office 16 Click-to-Run Extensibility Component

热门文章

  1. strictmath_Java StrictMath nextUp()方法与示例
  2. b+树时间复杂度_数据结构:线性表,栈,队列,数组,字符串,树和二叉树,哈希表...
  3. Java实现动态加载页面_[Java教程]动态加载页面数据的小工具 javascript + jQuery (持续更新)...
  4. python中的Lambda表达式/函数
  5. 面试官 | JVM 为什么使用元空间替换了永久代?
  6. TextArea里Placeholder换行问题
  7. 全志A20 刷入Ubuntu/Debian Linux固件 亲测能用
  8. centos安装php7编译
  9. IDEA部署Tomcat报错[RMI TCP Connection(6)-127.0.0.1]
  10. next按钮源码android,Android Edittext 软键盘输入法回车键改成下一步Next