一、编者按
网络上关于输出*图案的代码数不胜数,本人刚学习java至控制流程,恰好看到这一题目,便写了这一段代码,供大家交流和参考,若有不足或者错误还请指正
笔者思路:
设A1为(3,0).B1为(2,2).C1为(1,1).D1为(0,0) 该黄色中轴线为X=3,其为菱形高度/2.(此为最重要的控制条件)
先从点A1入手.
定义变量height,把绘制A1的过程分为两个步骤即绘制空格和绘制号.
使用一个for循环,并在for循环里面使用if控制这两个绘制过程.(其中需要注意绘制空格时使用的是print,而绘制号时使用的是println)该代码块为
for(j=0;j<=height;j++) {
if(j<height/2){
System.out.print(’ ‘);}
if(j==height/2) {
System.out.println(’*’);
}}
绘制点B到点D
从点B到点D 距离中轴线X=3 的距离逐渐1++,另外,在绘制图像的整个for循环------for(i=0;i<=height;i++)中的i表示的层数亦与我们所需要的特征1++相同,故在绘制点B到点D时,可以将绘制过程细分为四个步骤,即绘制空格—>*号—>空格—>*号.该代码块为
for(j=0;j<=height;j++) {
if (j<height/2-i )
{
System.out.print(' ');
}
if(j>height/2-i&&j<height/2+i)
{
System.out.print(' ');
}
if(j==height/2-i ) {
System.out.print('*');
}
if(j==height/2+i)
{
System.out.println('*');
}
}
绘制下半部分图形
通过观察可知下半部分与上半部分基本一致.其中通过Y=0对折重合的两个点的距离都为2,因此我们设置多一个变量k,并令该 k+=2 ;再用递加的i减去k,就得到与上半程相同的 i 值,该代码块为
if(i>height/2&&i<height)
{
k+=2;
for(j=0;j<=height;j++) {
if (j<height/2-(i-k) )
{
System.out.print(' ');
}
if(j>height/2-(i-k)&&j<height/2+i-k)
{
System.out.print(' ');
}
if(j==height/2-(i-k) ) {
System.out.print('*');
}
if(j==height/2+i-k)
{
System.out.println('*');
}
}
}
绘制最后的*号
绘制该*号的方法与第一部分一样
完整代码
public class Star {
public static void main(String[] args) {
int height;
height=6 ;
int i,j,k=0;
for(i=0;i<=height;i++) {
if(i==0)
{
for(j=0;j<=height;j++) {
if(j<height/2){
System.out.print(' ');}
if(j==height/2) {
System.out.println('*');
}}}
if(i>0&&i<=height/2) {
for(j=0;j<=height;j++) {
if (j<height/2-i )
{
System.out.print(' ');
}
if(j>height/2-i&&j<height/2+i)
{
System.out.print(' ');
}
if(j==height/2-i ) {
System.out.print('*');
}
if(j==height/2+i)
{
System.out.println('*');
}
}
}
if(i>height/2&&i<height)
{
k+=2;
for(j=0;j<=height;j++) {
if (j<height/2-(i-k) )
{
System.out.print(' ');
}
if(j>height/2-(i-k)&&j<height/2+i-k)
{
System.out.print(' ');
}
if(j==height/2-(i-k) ) {
System.out.print('*');
}
if(j==height/2+i-k)
{
System.out.println('*');
}
}
}
if(i==height) {
for(j=0;j<=height;j++) {
if(j<height/2){
System.out.print(' ');}
if(j==height/2) {
System.out.println('*');
}}
}
}
}
} ```