java 输出图形_java猜想之最简单输出图形

本文介绍了一种巧妙的方法来在Java控制台上输出复杂的图形,即先在文本文件中设计图形,然后通过读取文件内容到控制台。这种方法简化了寻找规律和编写循环的复杂性,可以更方便地处理难以找出规律的图形。示例代码演示了如何使用FileInputStream读取文件并在控制台上动态输出图形,通过Thread.sleep()实现逐个字符输出,增加动态效果。

相信我们在学任何一门语言的时候,都会有在控制台上输出给定图形的题目。

如:输出以下图形

*

***

*****

*******

*********

当然,还会有更复杂的用简单单元构成的图形。

如下面这个:

对于这种,应该是有两种思路的,

一:找规律,结合规律用for循环打印输出。

二:一行一行直接输出,比如第一行我输出多少空格,输出多少字母。

就这样一行一行,感觉毫无技艺可言的堆代码。

就在昨晚,我想到了另一种更投巧的方法,那就是把要输出的图形先在普通文档进行设计,然后读这个文档,把设计的图形给读到控制台上,

这样就可以更加解放那些复杂的,规律性很难找的图形,反正我直接新建一个文件,给图形复制粘贴去就可以,或者我自己在文件中设计图形,这都是很简单的。

java程序或者c程序,我直接读这个文件就好,代码很简洁,而且显得很装逼。

这只需要一个java中输入流就好,FileInputStream或者FileWriter。

当然,如果你想要更动感一点,就像那种一个接一个动态的输出在控制台上,你可以考虑构成图形基本单元所占的字节数,用一次可以输出一个基本单元的容量的byte数组。

虽然这样会耗费很多内存和cpu在文件交互上(因为一次只读和输出一个基本单元),但你可以对每一个组成此图形的基本单元来精确控制,

转化为String类型,当判断这个输出为空格时,你可以不做处理,因为计算机输出空格,我们也是看不见的。

当判断这个输出不是空格时,你可以用Thread.sleep(毫秒数)来延续输出,达到一个接一个动感的输出,让输出这个图形有一个动感的过程。

package com.javase;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

/** 首先,这是一个思想:把要在控制台展现的图形先搞到一个文件中,比起用程序搞,其实,在文本文档中搞是比较简单的。* 然后就是读到控制台中。* 这需要一个输入流就好。只需读就好。* 如果需要一个接一个的在控制台展现,那么,如果组成图形的基本单元是一个byte,那可以用FileInputStream,如果组成基本单元是2个byte,那可以用FileWriter,当然,这只是建议。* */

public class Draw {

public static void main(String[] args) {

String path = Thread.currentThread().getContextClassLoader().getResource("com/javase/picture.txt").getPath();

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(path);

byte[] bytes = new byte[1];

while ((fileInputStream.read(bytes)) != -1){

String s =new String(bytes);

if (!(s.equals(" "))){

Thread.sleep(20);

}

System.out.print(s);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

if (fileInputStream != null) {

try {

fileInputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}知乎视频​www.zhihu.comzhihu-card-default.svg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值