首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

小弟我要哭了,一个简单的for写了1小时,新手求教育

2013-07-08 
我要哭了,一个简单的for写了1小时,新手求教育为了实现这个效果,虽然完成了,但是代码很长很乱 没有套路 下

我要哭了,一个简单的for写了1小时,新手求教育

为了实现这个效果,虽然完成了,但是代码很长很乱 没有套路 下次遇到又要想半天
求高手给我理清思路,指条明路 

int b=1;
for (int i=1; i<=7; i++)
{
if (!(i%2==0))
{
for (int j=4;j>b;j--)
{
System.out.print(" ");
}
}

for (int y=1; y<=i; y++)
{
if (!(i%2==0))
{
System.out.print("*");
}
}

if (!(i%2==0))
{
System.out.println();
b++;
}
}

[解决办法]

// 输出几行
int count = 10;
for (int i = 0; i < count; i++) {
// 输出前导空格
for (int j = 0; j < count - i - 1; j++) {
System.out.print(" ");
}
// 输出几个星号
for (int j = 0; j < i * 2 + 1; j++) {
System.out.print("*");
}
// 换行
System.out.println();
}

[解决办法]
加油奥,慢慢来。。不能急
[解决办法]
行号    : i = 0 到 3
前导空格: 3-i
星号个数: i*2 + 1 
[解决办法]
引用:

    for(int i=0, size=4; i<size; i++) {
      
      for(int j=-size; j<=size; j++)
        System.out.print(i+j<0 
[解决办法]
 i-j<0 ? " " : "*");
      


      System.out.println();
    }


这种思想是基于什么?
[解决办法]
引用:
这种做法咋想起来的   人才呀   大牛哥  好佩服!!!


引用:
这种思想是基于什么?


不是我自己想出来的,跟别人学的:

http://misakamm.com/blog/14#more-14
[解决办法]
引用:
Quote: 引用:


    for(int i=0, size=4; i<size; i++) {
      
      for(int j=-size; j<=size; j++)
        System.out.print(i+j<0 
[解决办法]
 i-j<0 ? " " : "*");
      
      System.out.println();
    }

这种思想是基于什么?

从整体上来考虑,所有的输出组成了一个矩阵,即二维数组,元素是空格与*,分析行列下标的规律。
[解决办法]
这个打印有很多解法,只要看清其中规律。
1、这类打印,都行列打印,你就想象成解析几何里的x,y坐标。左上角是(0,0)
2、先遍历行,行内遍历列。
3、看清楚图像的规律。

我看这个图的规律
1、基本是一个4行7列的一个矩形里面分割的
2、为了节约CPU时间,发现每行只要处理到 4+行数  列即可  (一个梯形)
于是我们得到如下算法:

public class PrintAngle 
{
public static void main(String[] args) 
{
for (int i =0; i<4 ;i++ )
{
for (int j=0; j<(4+i) ;j++)
{
System.out.print("* ");
}
System.out.println();
}

System.out.println("Hello World!");
}
}


这样打印出来就是
****
*****
******
*******

我们去掉右边的空缺,

3、我们再来研究坐标的空缺的规律
我们用x表示行, y表示列,我们总结出打印空格的列的规律
x    y 
0   (0-3)
1   (0-2)
2   (0-1)
3   (0-0)

看清了么?
说明满足
y<3-x  的列打印的是空格(一般就是要找出行列关系的函数、不等式表达式),否则就打印*

于是我们继续强化程序得到如下代码,就得出最终结论。


public class PrintAngle 
{
public static void main(String[] args) 
{
for (int i =0; i<4 ;i++ )


{
for (int j=0; j<(4+i) ;j++)
{
if (j<(3-i))
{
System.out.print(" ");
}
else
{
System.out.print("*");
}
}
System.out.println();
}

System.out.println("Hello World!");
}
}



分析结束。

当然,还可以通过别的规律来得出x,y函数表达式。效率不同罢了
然后,我们进一步挖掘规律,
那个4,和3,我们看的不太舒服,因为它限定了我们的循环次数
我们再强化一点。让其可以打印任意行的三角形。
我们发现表达式中。
行循环次数rows,需要制定。列数是由行产生的 (y<rows-x),打印空格的列要满足 y<(rows-1-x)表达式
于是我们再强化一点


[解决办法]



这个只是简化几个if而已...外层循环思想都一样的.
[解决办法]
这个主要要用两重循环来写,打印出的矩阵是由*和空格组成的,矩阵的行和列之间的关系如下所示:
每一行都有奇数个符号组成,打印的行数为:每行的符号数加1,然后取对半。
符号之间的规律是:打印*号的区间为从 列数/2-行数 到 列数/2+行数;剩余部分用空格填充

代码如下:
 


  void printMatrix(int n){
    if(n%2==0){
      System.out.println("please reset parameter");
    }else{
      for(int i=0;i<(n+1);i++){
         for(int j=0;j<n;j++){
           if(j<(n/2-i)
[解决办法]
j>(n/2+i)){
             System.out.printf(" ");
           }else{
             System.out.printf("*");
           }
         }
         System.out.println();//换行
      }
    }
  }


[解决办法]
小弟我要哭了,一个简单的for写了1小时,新手求教育
[解决办法]
这类程序,核心是算法,算法核心就是数学。

顺手贡献个另类的:

    public static void main(String[] args) {
        String line = "         *********"; // 奇数个空格,奇数个星
        for (int i = 0; i <= line.length() / 4; i++) {
            int a = line.length() / 4 + i + 1;
            System.out.println(line.substring(a, 2 * a));
        }
    }

[解决办法]

public class Test{
public static void main(String[] args) {
for(int i=1;i<=7;i++){
for(int j=1;j<=i;j++){
if(i%2==1){
System.out.print("*");
}else{
System.out.print("");
}
}
if(i%2==1){
System.out.println();
}

}
}
}

[解决办法]
我一开始也这样,慢慢练,思路一定要先理清,再写代码


[解决办法]

热点排行
Bad Request.