java基础练习,通过入口函数随机一个N值,打印出一个相应的菱形
首先这个题目不难,思路也很清晰,画图即可。
其次实现到什么程度,如何提高代码可重用性,及可扩展性。下面这段代码实际相当于一个工具类了,用于画出菱形的形状,
菱形的形状可能菱形高度(随机数代替)是奇数或偶数,这里当高度为偶数时打印的菱形不算很严谨。由于比较懒不想手动在控制台输入一些数,于是采用随机数代替。
用Star类可以控制每一个输出的形状,虽然整体是一个菱形,但是可以自定义用任何符号(空格除外)拼图。
对了,方法多种,下列非最优解,欢迎探讨。
1、CreateStar 类,用于创建菱形
public class CreateStar {
private static int xLength = 0 ; //行高度
private static int yLength = 0 ; //列高度
private static Map< Integer,List<Star> > map = new HashMap< Integer,List<Star> >(); // 存
private int num = 0; //打印多少行
private boolean odevity = false; //默认奇数
private static class lazyHolder {
private static final CreateStar INSTANCE = new CreateStar();
}
public static CreateStar me() {
return getInstance();
}
public static CreateStar getInstance() {
Sy());
return lazyHolder.INSTANCE;
}
public CreateStar() {
//
Sy());
}
public CreateStar(int num) {
Sy());
= num;
= num % 2 == 0 ? true : false;
= num % 2 != 0 ? num : (num-1);
= num;
}
public void setnum(int num) {
Sy());
= num;
}
public Map<Integer,List<Star>> getStars() {
Sy());
if(yLength == 0 && num != 0) {
new CreateStar();
}
int start = startIndex(xLength); // 起始点
int invert; //反转偏移
for ( int y =0; y < yLength; y ++ ) {
List list = new ArrayList();
int index = 0; //当前游标
if() invert = 2*y >= xLength ? (xLength – y) : 0; //奇偶性决定反转游标偏移量
else invert = 2*y >= xLength ? (xLength -1 – y) : 0;
for( int x = 0; x < xLength; x++ ) {
index ++;
Star star = new Star();
().toString().replaceAll("-"," "));
if(2*y >= xLength) { //反转
if( index >= (start – invert) && index <= (start + invert) ) {
(1);
}else {
(0);
}
}else if( index >= (start – y) && index <= (start + y) ) {
(1);
}else {
(0);
}
li(star);
}
map.put(y,list);
}
return map;
}
/**
* 起始点坐标
* @param width
* @return
*/
private static int startIndex( int width ) {
Sy());
return width%2 ==0 ? width/2 : width/2+1;
}
public void printStarsMap (Map<Integer,List<Star>> map) {
Sy());
for (int h=0; h < (num == 0 ? map.size() : num); h++) {
map.get(h).forEach( star -> Sy() ));
Sy();
}
}
public void printStarsMap (Map<Integer,List<Star>> map,String sign) {
Sy());
for (int h=0; h < (num == 0 ? map.size() : num); h++) {
map.get(h).forEach( star -> Sy(sign) ));
Sy();
}
}
public void printStarsMap (String sign) {
Sy());
map = map.size()<=0 ? () : map;
for (int h=0; h < (num == 0 ? map.size() : num); h++) {
map.get(h).forEach( star -> Sy(sign) ));
Sy();
}
}
}
2、PrintStars 类,用于测试打印菱形
使用一些随机数,模拟用户想要的数据(不想自己手动输入)
public class PrintStars {
private static int height = 0;
public static void main(String[] args)throws Exception {
Sy());
height = In( S(new Date().getTime()).substring(11,12) ) ;
// CreateStar createStar = new CreateStar();
// crea(height < 1 ? 1 : height);
// new PrintStars().printStarsMa());
Sy(height);
new CreateStar(20)).printStarsMap("&*");
Crea().printStarsMap( new CreateStar(14).getStars() );
// Crea().printStarsMap( new CreateStar(height < 1 ? 1 : height).getStars() );
}
}
3、Star 类,打印格式,默认打印☆,可自定义
public class Star implements Serializable {
private static final String STAR = "☆";
private String id;
// 0 空格 1 ☆
private int code;
public String getId() {
return id;
}
public void setId(String id) {
= id;
}
public void setCode(int code) {
= code;
}
public String getStar () {
return code == 0 ? " " : STAR ;
}
public String getStar (String star) {
if( code == 0) {
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < (); i++) {
(" ");
}
return ();
}else {
return star;
}
}
}
4、DateUtil,常用时间处理工具类
public class DateUtil {
private static Random random = new Random();
private static String pool = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM" ;
/**
* 根据系统时间随机获取一个编号
* @param len
* @return
*/
public static Long createNumber(int len){
StringBuilder sb = new StringBuilder(getNow("yyyyMMddHHmmss"));
for(int i = 0 ; i++<len ;){
(random(10));
}
return Long.parseLong(());
}
/**
* 根据系统时间随机获取一个编号
* @param len
* @return
*/
public static String createCode(int len){
StringBuilder sb = new StringBuilder(getNow("yyyyMMddHHmmss"));
for(int i = 0 ; i++<len ;){
( (random()) ));
}
return ();
}
/**
* 获取处理耗时
* @param start
* @param end
* @return
*/
public static String getTimeConsuming( long start,long end){
long time=end-start;//计算插入耗时
return "耗时:t"+(time>10000?getTime(time, "mm分ss秒"):time+"毫秒");
}
/**
* 获取当前系统时间
* @param format 日期转化格式
* 建议格式:yyyy-MM-dd HH:mm:ss
* @return String 日期
*/
public static String getNow(String format){
return new SimpleDateFormat(format).format(new Date());
}
public static String getNow(){
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
/**
* 毫秒值转为 format类型的时间字符
* @param time
* @param format
* @return
*/
public static String getTime(long time,String format){
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(time);
return new SimpleDateFormat(format).forma());
}
/**
* 获取系统当前毫秒值
* @return
*/
public static long getTime(){
return Sy();
}
/**
* 获取时间
*
* @param str 字符串日期格式 2017-06-26 13:21:12
* 统一解析格式 yyyy-MM-dd HH:mm:ss
* @return date
*/
public static Date getDate(String str){
String format="yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf=new SimpleDateFormat(format);
Date date=null;
try {
date=(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 获取随机数
* @param ran
* @return
*/
public static int random(int ran){
return random.nextInt(ran == 0 ? 1 : ran );
}
}
5.StringUtil
public class StringUtil extends DateUtil {
private static final String POOL = "qwertyuiopasdfghjklzxcvbnm";
/**
* 获取字符串子串t在母串中的下标
* @param s 母串
* @param t 子串
* @return 存在则返回第一次查到的下标 查不到则返回-1
*/
public static int getIndex(String s,String t){
int length=t.length();
char c=t.charAt(0);
for(int i=0;i<s.length();){
if(c==s.charAt(i)){
for(int j=1;;j++){
char sc=s.charAt(++i);
char st=t.charAt(j);
if(sc==st){
if(j<length-1) continue;
else return i-j;
}else{
i-=j-1;
break;
}
}
}else{
i++;
}
}
return -1;
}
public static boolean isBlank(String string) {
return string == null ? false : string == "" ? false : true;
}
public static boolean isNotBlank(String string) {
return !isBlank(string);
}
public static String createCode() {
StringBuilder sb = new StringBuilder();
for(int i = 0; i<random(In(S(Sy()).substring(12,13))); i++) {
( random(2)%2 == 0 ? POOL.charAt(random())) : S(random()))).toUpperCase() );
}
return ();
}
}
LogUtil 用于控制台打印日志
public class LogUtil {
private static String className() {
return T().getStackTrace()[3].getClassName();
}
private static String methodName() {
return T().getStackTrace()[3].getMethodName();
}
/**
*
* @return
*/
public static String getLog() {
return Da()+"t==>t"+className()+":"+methodName();
}
}
结果图
1.文章《java或符号怎么打度怎么打符号!》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《java或符号怎么打度怎么打符号!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好