今天,我干了3个小时的成果绘制简单图形,后续的图形会再补充的,因为明天还要早起。
首先,创建一个名为Graph的java文件,接着将下面的代码加入到文件中去。
代码:
import java.util.*;
/**
* created time by 2021-3-3
* @author Mr.Pan_学狂
* Java编程实现图形
*/
class Graph{
public static void main(String[] args) {
//原始方法,用System.out.println()绘制图形
System.out.println("Java使我快乐!!\n");
System.out.println("*");
System.out.println("***");
System.out.println("*****");
System.out.println("*******");
System.out.println("*********\n");
System.out.println("正序直角三角形");
//定义一个字符串graph
String graph = "*";
String[] graph_array = new String[5];
for(int i = 1;i < 10;i+=2) {
if(i % 2 != 0 && i != 1) {
//如果是奇数且不为1的情况,执行
graph = graph + "**";
int Index = (i-1)/2;//通过简单计算,找出i跟数组的Index索引之间的关系。
graph_array[Index] = graph;
System.out.println(graph);
}
else {
graph_array[i-1] = graph;//第一个元素进入数组
System.out.println(graph);
}
}
//获取数组的长度,目的是为了倒序遍历数组中的元素。
int Length = graph_array.length;
System.out.println();
System.out.println("三角形倒序输出");
for(int s = Length-1;s >= 0;s--) {
//倒序输出
System.out.println(graph_array[s]);
}
System.out.println();
System.out.println("三角形正序输出");
for(int w = 0;w < Length;w++) {
//正序输出
//if(w % 2 ==0) {//如果是偶数
System.out.println(graph_array[w]);
//}
}
System.out.println();//换行
Scanner imp = new Scanner(System.in);//获取键盘的输入
System.out.println("请输入长方形的长度:");
int number1 = imp.nextInt();//输入长方形的长
System.out.println("请输入长方形的宽度:");
int number2 = imp.nextInt();//输入长方形的宽
graph2(number1,number2);//调用函数绘制长方形
graph3();
graph4();
graph5();
graph6();
graph7();
graph8();
}
public static void graph2(int number,int number2){
//绘制长方形的方法,定义了两个参数,分别是长和宽。
String graph = "*";
while(true) {
graph = graph + "*";
if(graph.length() == number) {
//绘制长方形的长
break;
}
}
for(int i = 0;i < number2;i++){
//循环是为了绘制出长方形
System.out.println(graph);
//System.out.println(graph.length());
}
System.out.println();
}
public static void graph3() {
//绘制一个倒序的等腰三角形,
Scanner imp = new Scanner(System.in);//获取键盘的输入
System.out.println("请输入数字绘制,\n倒序等腰三角形:");
int number = imp.nextInt();//输入整数
if(number % 2 == 0) {
//如果是偶数的情况
number = number - 1;/*目的是为了输入的无论是奇数偶数,
结果都是奇数输出。偶数变成奇数*/
}
String graph = "*";
String[] str_array = new String[number/2+1];
int start = 0;//从0开始索引
str_array[start] = graph;
while(true) {
graph = graph + "*";
if(graph.length() % 2 != 0) {
start += 1;//每次索引都会加一
str_array[start] = graph;
}
if(graph.length() == number) {
break;
}
}
int Length = str_array.length;
System.out.println("----倒序三角形----");
String BackSpace = " ";//定义空格,空字符。
while(true) {
//设置一个可控的死循环
String BS = " ";//将BS空格字符固定
String element = BackSpace + str_array[Length-1];
System.out.println(element);
BackSpace += BS;//每次循环空格都会规律性地增加一个单位。
// BackSpace += BackSpace;
Length = Length - 1;
if(Length == 0) {
break;
}
}
System.out.println();
}
public static void graph4() {
Scanner imp = new Scanner(System.in);//获取键盘的输入
System.out.println("请输入数字绘制,\n正序等腰三角形:");
int number = imp.nextInt();//输入整数
if(number % 2 == 0) {
//偶数转成奇数
number = number - 1;
}
String graph = "*";
String[] str_array = new String[number/2+1];//根据输入的数字与索引计算出的规律
int Length = str_array.length;//获取数组长度
int start_value = 0;//设置索引的初始值
str_array[start_value] = graph;//数组对应的索引的字符值
String BS = " ";//创建空格字符
String BackSpace = " ";//创建空格字符
while(true) {
graph = graph + "**";//创建星号字符串,有规律的增加
start_value += 1;//每次索引值加一
str_array[start_value] = graph;//对应数组的索引值,添加元素
if(graph.length() == number) {
//直到最大星号长度等于输入的数字,跳出循环
break;
}
}
int Index = Length - 1;//定义数组索引开始的值
String[] str_array_reverse = new String[number/2+1];/*定义一个类型和存储大小跟str_array一样的数组
,用于储存str_array的逆序输出结果*/
while(true) {
String element = BS+str_array[Index];//组合成每行的星号*
str_array_reverse[Index] = element;//存进正序数组中
BS += BackSpace;//每次空格字符自增一次。
Index -= 1;//每次Index都会减一
if(Index < 0) {
//当索引值小于0自动结束循环
break;
}
}
for(int i = 0;i < Length;i++) {
//遍历输出数组中的元素
System.out.println(str_array_reverse[i]);//将数组中的元素,以正序输出。
}
System.out.println();
}
public static void graph5() {
//绘制漏斗,graph4改进
Scanner imp = new Scanner(System.in);//获取键盘的输入
System.out.println("请输入数字绘制漏斗:");
int number = imp.nextInt();//输入整数
if(number % 2 == 0) {
//偶数转成奇数
number = number - 1;
}
String graph = "*";
String[] str_array = new String[number/2+1];//根据输入的数字与索引计算出的规律
int Length = str_array.length;//获取数组长度
int start_value = 0;//设置索引的初始值
str_array[start_value] = graph;//数组对应的索引的字符值
String BS = " ";//创建空格字符
String BackSpace = " ";//创建空格字符
while(true) {
graph = graph + "**";//创建星号字符串,有规律的增加
start_value += 1;//每次索引值加一
str_array[start_value] = graph;//对应数组的索引值,添加元素
if(graph.length() == number) {
//直到最大星号长度等于输入的数字,跳出循环
break;
}
}
int Index = Length - 1;//定义数组索引开始的值
String[] str_array_reverse = new String[number/2+1];/*定义一个类型和存储大小跟str_array一样的数组
,用于储存str_array的逆序输出结果*/
while(true) {
String element = BS+str_array[Index];//组合成每行的星号*
System.out.println(element);
str_array_reverse[Index] = element;//存进正序数组中
BS += BackSpace;//每次空格字符自增一次。
Index -= 1;//每次Index都会减一
if(Index < 0) {
//当索引值小于0自动结束循环
break;
}
}
for(int i = 1;i < Length;i++) {
//遍历输出数组中的元素
System.out.println(str_array_reverse[i]);//将数组中的元素,以正序输出。
}
System.out.println();
}
public static void graph6() {
//绘制菱形,graph5改进
Scanner imp = new Scanner(System.in);//获取键盘的输入
System.out.println("请输入数字绘制菱形:");
int number = imp.nextInt();//输入整数
if(number % 2 == 0) {
//偶数转成奇数
number = number - 1;
}
String graph = "*";
String[] str_array = new String[number/2+1];//根据输入的数字与索引计算出的规律
int Length = str_array.length;//获取数组长度
int start_value = 0;//设置索引的初始值
str_array[start_value] = graph;//数组对应的索引的字符值
String BS = " ";//创建空格字符
String BackSpace = " ";//创建空格字符
while(true) {
graph = graph + "**";//创建星号字符串,有规律的增加
start_value += 1;//每次索引值加一
str_array[start_value] = graph;//对应数组的索引值,添加元素
if(graph.length() == number) {
//直到最大星号长度等于输入的数字,跳出循环
break;
}
}
int Index = Length - 1;//定义数组索引开始的值
String[] str_array_reverse = new String[number/2+1];/*定义一个类型和存储大小跟str_array一样的数组
,用于储存str_array的逆序输出结果*/
while(true) {
String element = BS+str_array[Index];//组合成每行的星号*
str_array_reverse[Index] = element;//存进正序数组中
BS += BackSpace;//每次空格字符自增一次。
Index -= 1;//每次Index都会减一
if(Index < 0) {
//当索引值小于0自动结束循环
break;
}
}
for(int i = 0;i < Length-1;i++) {
//遍历输出数组中的元素
System.out.println(str_array_reverse[i]);//将数组中的元素,以正序输出。
}
for(int i = Length-1;i >= 0;i--) {
//遍历输出数组中的元素
System.out.println(str_array_reverse[i]);//将数组中的元素,以正序输出。
}
System.out.println();
}
public static void graph7() {
Scanner impt = new Scanner(System.in);//创建一个输入对象,获取键盘的输入
String graph = "*";//定义一个星号字符
System.out.println("绘制平行四边形");
System.out.println("请输入数字,\n绘制星号:");
int number = impt.nextInt();//输入整数,绘制星号数
System.out.println("请输入要绘制,\n平行四边形的行数:");
int line_num = impt.nextInt();//输入四边形行数
String S = " ";
String Space = " ";
while(true) {
if(graph.length() == number) {
//如果输入的数字是1的情况
System.out.println(S+graph);
S += Space;//空格字符自增1个空格
line_num -= 1;//输入的行数控制循环的结束
if(line_num == 0) {
break;
}
}
else if(graph.length() != number){
//如果输入的数字不是1的情况
graph = graph + "*";//固定增加一个星号字符,不可以使用graph代替,会出错!!
if(graph.length() == number) {
System.out.println(S+graph);//每次打印出相同的星号字符
S += Space;//空格字符自增1个空格
line_num -= 1;//输入的行数控制循环结束
if(line_num == 0) {
break;
}
}
}
}
System.out.println();
}
public static void graph8() {
System.out.println("绘制直角梯形");
Scanner impt = new Scanner(System.in);//获取键盘的输入
String graph = "*";//定义星号字符
System.out.println("请输入上底:");
int number1 = impt.nextInt();//获取输入的整数
System.out.println("请输入下底:");
int number2 = impt.nextInt();
while(true) {
if(number1 == 1) {
System.out.println("上底为1,\n无法打印!!");//判断是否为1,当等于1的时候是三角形
break;
}
else{
if(number1 >= number2) {
//梯形的上底不能大于或者等于下底
System.out.println("上底大于或等于下底,\n无法绘制!!");
break;
}
}
graph += "*";//每次自增一个星号
if(graph.length() >= number1) {
//打印满足条件的星号
System.out.println(graph);
if(graph.length() == number2) {
/*如果星号的长度
达到了下底的长度,循环结束*/
break;
}
}
else {
continue;//否则,继续循环
}
}
}
}
运行结果有问题,因为我的思维有一个地方绕进去了,如下图:
我之前设置成Length-1,后来仔细想发现如果设置Length-1应该是i == Length-1,因为i < Length是刚好索引到最后一个元素。
修改代码后,运行结果:
关于代码的解释在注释里面有,若是不理解可以询问我,我们一起探讨。
最后,感谢大家前来观看鄙人的文章,文中或有诸多不妥之处,还望指出和海涵。