相信我们在学任何一门语言的时候,都会有在控制台上输出给定图形的题目。
如:输出以下图形
*
***
*****
*******
*********
当然,还会有更复杂的用简单单元构成的图形。
如下面这个:
对于这种,应该是有两种思路的,
一:找规律,结合规律用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.com
本文介绍了一种巧妙的方法来在Java控制台上输出复杂的图形,即先在文本文件中设计图形,然后通过读取文件内容到控制台。这种方法简化了寻找规律和编写循环的复杂性,可以更方便地处理难以找出规律的图形。示例代码演示了如何使用FileInputStream读取文件并在控制台上动态输出图形,通过Thread.sleep()实现逐个字符输出,增加动态效果。

2696

被折叠的 条评论
为什么被折叠?



