public static void main(String[] args) { int c=7; int r=(c+1)/2; int midle=c/2; int j=1; int left=midle-j; int right=midle+j; for(int i=0;i<c*r;i++){ int index=i%c; if(i!=0&&index==0){System.out.println();j++;left=midle-j;right=midle+j;} if(left<index&&index<right) System.out.print("*"); else System.out.print(" "); } }
public static void printStar(int line){ int maxNum = 2*(line-1)+1; for(int i=0; i < line; i++){ int curStarNum = 2*i+1; int curBlankNum = (maxNum-curStarNum)/2; int totalNum = curBlankNum+curStarNum; StringBuffer buffer = new StringBuffer(totalNum); for(int j =0; j < totalNum; j++){ if(j < curBlankNum){ buffer.append(" "); } else{ buffer.append("*"); } } System.out.println(buffer.toString()); }
}
int n = 4; //行数 for(int i = 1; i <= n; i++){ for(int j = 1; j <= 2*n-1; j++){ System.out.print(j >= (n-i) + 1 && j<= (n+i) -1 ? "*" : " "); } System.out.println(); }
public void printRhombus(){
if(len%2==0) --len;
for (int i =len/2; i >=-len/2; i--) {
System.out.print(repeatStr(" ", Math.abs(i)));
System.out.print(repeatStr("*", len-Math.abs(i)*2));
System.out.println(repeatStr(" ", Math.abs(i)));
}
}
public String repeatStr(String str,int repeatCount){
if(str==null || str.length()==0 || repeatCount<=0) return "";
StringBuffer buf=new StringBuffer();
for (int i = 0; i < repeatCount; i++) buf.append(str);
return buf.toString();
}
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();
}
System.out.print(" *** ");
System.out.print(" ***** ");
System.out.print("*******");
// 输出几行
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();
}
前导空格: 3-i
星号个数: i*2 + 1
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)表达式
于是我们再强化一点public class PrintAngle
{
public static void main(String[] args)
{
final int rows = 7;
//为了节约CPU时间,将这个常量单独拿出来。免得每次都要计算。
final int cols = rows-1; for (int i =0; i<rows ;i++ )
{
for (int j=0; j<(rows+i) ;j++)
{
if (j<(cols-i))
{
System.out.print(" ");
}
else
{
System.out.print("*");
}
}
System.out.println();
} System.out.println("Hello World!");
}
}
感谢分享!!!
感谢分享!!!
这个只是简化几个if而已...外层循环思想都一样的.
public class Test01 {
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();
}
}
}
}
感谢分享!!!
这个只是简化几个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();//换行
}
}
}
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();
}
}
}
}
// TODO Auto-generated method stub
int row=4;
for(int i=0;i<row;i++){
for(int j=0;j<row-(i+1);j++){
System.out.print(" ");
}
for(int b=0;b<(2*(i+1)-1);b++){
System.out.print("*");
}
System.out.println();
}
}
printf(" *** "/n);
printf(" ***** "/n);
printf("*******"/n);
public class Hello {
public static void main(String[] args) {
int n = 10;
char[] array = new char[n * 2 * n];
for (int j = 1; j <= array.length; j++) {
array[j - 1] = j % (2 * n) > n - j/(2 * n)
&& j % (2 * n) < (2 * n) - n + j / (2 * n) ? '*'
: j % (2 * n) == 0 ? '\n' : ' ';
}
System.out.println(array);
}
}
for (int i = 1; i < level; i++) {
System.out.print(" ");
}
for (int i = 0; i < count && level >= 1; i++) {
System.out.print("*");
}
if (level >= 1) {
System.out.println();
show(level - 1, count + 2);
}
} public static void main(String[] args) {
show(10, 1);
}用递归写就行了罢。
for (int j = 0; j < i; j++) {
System.out.print(" "); } for (int j = 0; j < 9 - i * 2; j++) {
System.out.print("*");
} System.out.println();
}
当年初学c语言的时候和楼主一样对for循环的二维打印不知所措,甚至觉得自己不是编程的料。最后坚持下来,这一路走来觉得不要去想着自己到底行不行,用心去做就行了
for(int i=1;i<=4;i++){
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
for(int z=1;z<=2*i-1;z++){
System.out.print("*");
}
System.out.println("\n");
} }
public class Test01 {
public static void main(String[] args) {
printMatrix(21);
}
static void printMatrix(int n){
if(n%2==0){
System.out.println("please reset parameter");
}else{
for(int i=0;i<(n+1)/2;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 (int i=n/2-1; i>=0; 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里面就加进去 没思路 然后就在下面再写了一个for
System.out.print(" *\n ***\n *****\n*******");
for(int i=1;i<=4;i++)
{
for(int j = 4-i;j>0;j--)
System.out.print(" ");
for(int k = 2*i-1;k>0;k-- )
System.out.print("*");
System.out.println(); }
public class Main {
public static void main(String[] args) {
printStar(1,9);
}
//3 4
public static void printStar(int firstRowCount,int rowNum){
String star = "*";
int lastRowCount = firstRowCount+2*(rowNum-1);
int maxSpace = Math.round((float)lastRowCount/2f);
int space;
int i = 0;
int count = firstRowCount;
int j;
for(;i<rowNum;i++){
j = 0;
space = maxSpace-Math.round((float)count/2f);
for(;j<space;j++){
System.out.print(" ");
}
j = 0;
for(;j<count;j++){
System.out.print(star);
}
System.out.println(count);
count+=2;
}
}
}给你一个万能的方法 这个方法第一个参数指的是第一行有多少颗星星 第二个参数是一共有多少行
if((row%2==0)||(col%2==0)||(step%2==1)){
System.out.println("please reset parameter!")
}else{
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(i<row/2&&(j<(row/2-step/2*i)||j>(row/2+step/2*i))){//找到上部分的空白区
System.out.print(" ");
}else if(i>=row/2&&(j<(step/2*(i-row/2))||j>(row-step/2*(i-row/2)))){//找到下部分的空白区
System.out.print(" ");
}else{
System.out.print("*");
}
}
System.out.println();
}
}
}
if((row%2==0)||(col%2==0)||(step%2==1)){
System.out.println("please reset parameter!")
}else{
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(i<row/2&&(j<(col/2-step/2*i)||j>(col/2+step/2*i))){//找到上部分的空白区
System.out.print(" ");
}else if(i>=row/2&&(j<(step/2*(i-col/2))||j>(col-step/2*(i-col/2)))){//找到下部分的空白区
System.out.print(" ");
}else{
System.out.print("*");
}
}
System.out.println();
}
}
}上面的回复有问题,这是修改过的
int c=7;
int r=(c+1)/2;
int midle=c/2;
int j=1;
int left=midle-j;
int right=midle+j;
for(int i=0;i<c*r;i++){
int index=i%c;
if(i!=0&&index==0){System.out.println();j++;left=midle-j;right=midle+j;}
if(left<index&&index<right) System.out.print("*");
else System.out.print(" ");
} }
int maxNum = 2*(line-1)+1;
for(int i=0; i < line; i++){
int curStarNum = 2*i+1;
int curBlankNum = (maxNum-curStarNum)/2;
int totalNum = curBlankNum+curStarNum;
StringBuffer buffer = new StringBuffer(totalNum);
for(int j =0; j < totalNum; j++){
if(j < curBlankNum){
buffer.append(" ");
}
else{
buffer.append("*");
}
}
System.out.println(buffer.toString());
}
}
int n = 4; //行数
for(int i = 1; i <= n; i++){
for(int j = 1; j <= 2*n-1; j++){
System.out.print(j >= (n-i) + 1 && j<= (n+i) -1 ? "*" : " ");
}
System.out.println();
}