学了循环后,发现有些做了嵌套for循环打印符号图。而且打印同样一个符号图的代码在一些小细节方面发现会有很多种不同地方法。
比如打印出一个等腰三角形,暂时只理解一个思路,就是第一行打印n个空格再打印一个符号,到下一行就打印n-1个空格再多打印一个符号。
但我看了一些人的代码,而且每个人代码都有点不同之处。所以请各位高手能详细讲解下for循环打印符号图案的思路么? for(int i=5;i>-1;i--){
for(int j=i;j>-1;j--){
System.out.println(" ");
}
for(int k=1;k<=s;k++){
System.out.println("* ");
}
System.out.println();
s++; //这个s++可能是前面定义了个什么变量,但是漏掉了,我不记得了
------------------------------------------------------------------------------------------------------
for(int a=0;a<7;a++){
for(int b=7-a;b>0;b--){ //这里不明白为什么要7-a??
System.out.print(" ");
}
for(int d=0;d<=a;d++){
System.out.print("* ");
}
System.out.println();
}
比如打印出一个等腰三角形,暂时只理解一个思路,就是第一行打印n个空格再打印一个符号,到下一行就打印n-1个空格再多打印一个符号。
但我看了一些人的代码,而且每个人代码都有点不同之处。所以请各位高手能详细讲解下for循环打印符号图案的思路么? for(int i=5;i>-1;i--){
for(int j=i;j>-1;j--){
System.out.println(" ");
}
for(int k=1;k<=s;k++){
System.out.println("* ");
}
System.out.println();
s++; //这个s++可能是前面定义了个什么变量,但是漏掉了,我不记得了
------------------------------------------------------------------------------------------------------
for(int a=0;a<7;a++){
for(int b=7-a;b>0;b--){ //这里不明白为什么要7-a??
System.out.print(" ");
}
for(int d=0;d<=a;d++){
System.out.print("* ");
}
System.out.println();
}
怎么不能修改自己的帖子?
全是为了控制输出的格式的~~
下面是我下午回的一个贴子,也是打图的,可以看一下~~import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class xingxing { public static void main(String[] args) { int lineNum = 0;
boolean flag = true;
StringBuffer stringBuffer = new StringBuffer(""); while (flag) {
try {
System.out.print("请输入一个正整数:");
lineNum = Integer.parseInt(new BufferedReader(new InputStreamReader(System.in))
.readLine());
flag = false;
} catch (IOException ioe) {
ioe.printStackTrace();
System.out.println("输入异常!!");
} catch (NumberFormatException nume) {
System.out.print("无法转换,请重新输入一个数:");
} if (lineNum < 0) {
flag = true;
System.out.print("请输入一个正数:");
}
} // 组建基础空格串
for (int i = 0; i < lineNum * 2; i++) {
stringBuffer.append(" ");
} for (int i = lineNum; i >= 1; i--) {
StringBuilder builder = new StringBuilder(stringBuffer.toString());
for (int j = i; j <= lineNum * 2 - i; j += 2) {
builder.setCharAt(j, '*');
}
System.out.println(builder);
}
}
}
for (int a = 0; a < 7; a++) {
//里层第一个循环控制你所输出的每一行之间的空格数
//多输出一个"* "时就要少输出一个空格,所以要7-a
for (int b = 7 - a; b > 0; b--) { // 这里不明白为什么要7-a??
System.out.print(" ");
}
//里层第二个循环控制你每一行输出的"* "
for (int d = 0; d <= a; d++) {
System.out.print("* ");
}
System.out.println();
}
//应该就是定义这样的一个变量,若是s=0会输出一个空行
int s = 1;
//控制行数
for (int i = 5; i > -1; i--) {
//控制输出空格
for (int j = i; j > -1; j--) {
System.out.print(" ");
}
//控制输出"* "
for (int k = 1; k <= s; k++) {
System.out.print("* ");
}
s++;
System.out.println();
}//基本上与楼上类似
*
* *
* * *
* * * *
* * * * *
* * * * * *
drawTriangle(7, true);
drawTriangle(7, false);
} public static void drawTriangle(int line, boolean isSolid) {
for (int i = 1; i <= line; i++) {
for (int j = 0 - (line - 1); j < i; j++) {
boolean b = true;
if (isSolid) {
b = i - abs(j) >= 1;
} else if (i < line) {
b = i - abs(j) == 1;
}
System.out.print(b ? "*" : " ");
}
System.out.println();
}
} private static int abs(int num) {
return num < 0 ? -num : num;
}
}输出 *
***
*****
*******
*********
***********
*************
*
* *
* *
* *
* *
* *
*************
j= -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
+---+---+---+---+---+---+---+
i=1 | | | | | | | # |
+---+---+---+---+---+---+---+---+
2 | | | | | | # | # | # |
+---+---+---+---+---+---+---+---+---+
3 | | | | | # | # | # | # | # |
+---+---+---+---+---+---+---+---+---+---+
4 | | | | # | # | # | # | # | # | # |
+---+---+---+---+---+---+---+---+---+---+---+
5 | | | # | # | # | # | # | # | # | # | # |
+---+---+---+---+---+---+---+---+---+---+---+---+
6 | | # | # | # | # | # | # | # | # | # | # | # |
+---+---+---+---+---+---+---+---+---+---+---+---+---+
7 | # | # | # | # | # | # | # | # | # | # | # | # | # |
+---+---+---+---+---+---+---+---+---+---+---+---+---+
上图中 i 为外层循环,j 为内层循环,利用等腰三角形左右对称的原则,
可以将内循环由负循环至正。注意上图中最左边开始的 # 与 i、j 有着密切的关系,由于图形的对称
关系,最右边的也是同样的,因此必须先找出边界与 i、j 的关系,可以
看出边缘 # 与 i、j 的关系为 i - abs(j) == 1 为 true 时,在 i,j
的位输出一个 # 否则输出空格,再在处理一下最后一行,这样可以输出
一个空心的等腰三角形。如果把 # 与 i、j 的关系改为 i - abs(j) >= 1,当该条件为 true
时输出 # 否则输出空格,这样就可以很方便地输出实心的等腰三角形。利用控制台输出几何图形,可以锻炼程一个人的逻辑判断能力,最主要的是
能从中提取出一定的规律,只要有规律无论什么图形都能在控制台中进行输
出。我对一些图形输出的基本思路是:1,图形是左右对称时,内循环由负至正,否则视情况从 0 或 1 开始。
2,图形是上下对称时,外循环由负至正,否则视情况从 0 或 1 开始。
http://www.ourjavasky.cn我的论坛
http://www.ourjavasky.cn/bbs
http://www.ourjavasky.cn我的论坛
http://www.ourjavasky.cn/bbs
public class tuxing { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<5;i++){
for(int j=i;j<5;j++){
System.out.print(" ");
}
for(int k=-1;k<i;k++){
System.out.print("* ");
}
System.out.println();
}
}}这是我后来用代码,7-a那里没了,底下k初始值成了-1