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++;
}
}
java打印两个小人_[原创]Java画小人与阶梯问题的解答相关推荐
- java打印 好看的图形_分享java打印简单图形的实现代码
我们平时都是使用的画图工具进行简单图形的绘制,今天我们使用java打印一些简单的图形 实现代码如下 package test; /** * * @author hanzel * @打印图形 * */ ...
- java打印args的内容_解决java main函数中的args数组传值问题
这几天面试中有遇到关于main数组中的args数组传值的问题,一般是从命令提示符中传值,也可以直接在java代码中赋值. 而且这个数组的长度是动态的,根据传值的个数确定数组的长度. 1.从命令提示符中 ...
- java 文档比较功能_[原创]java在线比较两个word文件
一.项目背景 开发文档管理系统或OA办公系统的时候,实现在线处理word文档的功能比较容易,但是也经常会有客户提出文档版本管理的需求,这就需要同时在线打开两个word文件,对比两个不同版本的word文 ...
- java打印图片到页面_在Java中打印BufferedImage的正确方法
这是我的一个Java项目中的一个.此代码将在打印机页面上缩放和打印一个图像. 你这样称呼它: printButton.addActionListener(new ActionListener() { ...
- java实现两个数运算_用java做简单的计算器类,实现两个数字的加减乘除运算
计算器类 package calculator; import java.util.Scanner; public class Calculator{ private float number1; p ...
- java文件批量改名代码_[原创]JAVA版批量更名程序(附源码)(要求加分)
这是上学时JAVA课程的课程实践,因为学习好,老师让写一个比较有难度的程序出来,不要随便写个简单的来应付. 当时也不知道什么类型的程序在JAVA里比较有难度,正好在JAVA中文论坛里看到有人问用JAV ...
- 线程Java的两种方式_多线程(java和guava两种方式):
1.Java 当要使用线程去执行一个任务时,可以使用ExecutorService.submit(new Callable); 这样可以不影响其他的业务的执行,但是在线程中的异常不能捕获到,也不能知道 ...
- java 反射创建对象并赋值_[原创] Java JDBC连接数据库,反射创建实体类对象并赋值数据库行记录(支持存储过程)...
1 import java.lang.reflect.*;2 import java.sql.*;3 import java.util.*;4 5 public classSqlHelper {6 / ...
- java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)
示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] ...
最新文章
- 三星二级菜单_你知道三星 Galaxy 手机中的这个隐藏菜单吗?
- MySQL数据库性能优化--SQL优化
- 数据意识上的“代沟”
- vscode 代码莫名爆红(未定义标识符 “nullptr“)解决办法(VSCode 如何快速打开c_c++_properties.json文件)
- 在zabbix中添加监控主机及Items
- leetcode 1052. 爱生气的书店老板(滑动窗口)
- stick和stuck的区别_怎样区别“stick to”、“stick with”和“stick by”这三个表达?...
- Win11系统如何隐藏快速搜索
- 开源PHP多应用授权系统源码
- Python_sklearn_回归
- 机战 mysql_机战完整端-加配套网站-架设说明-配套工具
- 通过Console口本地加载系统程序
- VueX模块化使用(超级实用)
- 最新oss对象储存防红直连 防红代码html静态页面
- 一种基于SoC和阿里云的智能家居系统设计方案_家电研究报告
- 汉武帝不仅需要建功立业的董仲舒、汲黯、卫青,也需要能让他整天快乐的东方朔...
- 【Hive】Hive数据倾斜以及解决方案
- nodejs中的事件events
- Word中给论文添加引用
- office2010/2013/2016安装过程提示问题Office 16 Click-to-Run Extensibility Component
热门文章
- strictmath_Java StrictMath nextUp()方法与示例
- b+树时间复杂度_数据结构:线性表,栈,队列,数组,字符串,树和二叉树,哈希表...
- Java实现动态加载页面_[Java教程]动态加载页面数据的小工具 javascript + jQuery (持续更新)...
- python中的Lambda表达式/函数
- 面试官 | JVM 为什么使用元空间替换了永久代?
- TextArea里Placeholder换行问题
- 全志A20 刷入Ubuntu/Debian Linux固件 亲测能用
- centos安装php7编译
- IDEA部署Tomcat报错[RMI TCP Connection(6)-127.0.0.1]
- next按钮源码android,Android Edittext 软键盘输入法回车键改成下一步Next