当前位置:编程学习 > JAVA >>

一个for循环就能打印出一个空心菱形!

public class Testing {

public static void main(String[] args) {
for (int i = 1; i <= 7; i++) {
if (i <= 3) {
for (int j = 1; j <= 7; j++) {
if (j == i + 3 || j == 5 - i) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
} else {
for (int k = 1; k <= 7; k++) {
if (k == i - 3 || k == 11 - i) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
}
System.out.println();
}

}

} --------------------编程问答-------------------- 来学习 --------------------编程问答-------------------- 学习了~ --------------------编程问答--------------------    一个for循环内嵌了两个for循环还能说出:一个for循环就能打印出一个空心菱形! --------------------编程问答--------------------
System.out.print("空心菱形");

:) --------------------编程问答-------------------- 被骗了哦 --------------------编程问答-------------------- 1个for循环??? --------------------编程问答-------------------- 明显的自欺欺人 --------------------编程问答-------------------- 这是来刷积分的1  --------------------编程问答-------------------- 数了没?你有几个for循环? --------------------编程问答-------------------- LZ哦  我数学不太好啊,几个for啊 --------------------编程问答--------------------
引用 4 楼 michaellufhl 的回复:
Java code
System.out.print("空心菱形");

:)

頂 --------------------编程问答-------------------- public class Testing {
static int NUM = 14;
public static void main(String[] args){
int i;
int num = NUM/2;
for(i=0 ;i < NUM*NUM-NUM; ++i){
if((i+1) == ((i+1)/NUM)*NUM +num || (i+1) == ((i+1)/NUM)*NUM+NUM-num)
System.out.print("*");
else
System.out.print(" ");
if((i+1) % NUM == 0 && (i+1)/NUM < NUM/2){
num--;
System.out.println();
}
if((i+1) % NUM == 0 && (i+1)/NUM >= NUM/2){
num++;
System.out.println();
}
}
}
} --------------------编程问答-------------------- 你的这个大括号 也太难看了   对的也太齐了吧 --------------------编程问答-------------------- 挺简单的,调NUM的值改变菱形的大小
public class Testing {
    static int NUM = 14;
    public static void main(String[] args){
        int i;
        int num = NUM/2;
        for(i=0 ;i < NUM*NUM-NUM; ++i){
            if((i+1) == ((i+1)/NUM)*NUM +num || (i+1) == ((i+1)/NUM)*NUM+NUM-num)
                System.out.print("*");
            else
                System.out.print(" ");
            if((i+1) % NUM == 0 && (i+1)/NUM < NUM/2){
                num--;
                System.out.println();
            }
            if((i+1) % NUM == 0 && (i+1)/NUM >= NUM/2){
                num++;
                System.out.println();
            }
        }
    }
} --------------------编程问答-------------------- 重新对齐了一下 --------------------编程问答--------------------
引用 12 楼 luckli 的回复:
public class Testing {
static int NUM = 14;
public static void main(String[] args){
int i;
int num = NUM/2;
for(i=0 ;i < NUM*NUM-NUM; ++i){
if((i+1) == ((i+1)/NUM)*NUM +num || (i+1) == ((i+1)/NU……

程序里是用的制表符,贴上去后给消去了,还得输入空格对齐 --------------------编程问答--------------------
引用 4 楼 michaellufhl 的回复:
Java code
System.out.print("空心菱形");


mark --------------------编程问答-------------------- 不用for循环打出空心菱形

public class Test {
public static void main(String[] args) {
System.out.println("   *   ");
        System.out.println("  * *  ");
        System.out.println(" *   * ");
        System.out.println("*     *");
        System.out.println("*     *");
        System.out.println(" *   * ");
        System.out.println("  * *  ");
        System.out.println("   *   ");
        
}
}
--------------------编程问答--------------------
引用 4 楼 michaellufhl 的回复:
Java code
System.out.print("空心菱形");

:)

顶,这才是高手,for循环都不用就打出了空心菱形!!! --------------------编程问答--------------------
引用 4 楼 michaellufhl 的回复:
Java code
System.out.print("空心菱形");

:)

囧 --------------------编程问答-------------------- 学习了,4楼和18楼。。。。强悍 --------------------编程问答-------------------- 楼主是个sb,小学数学没学好,装逼 --------------------编程问答-------------------- 楼主是个sb,小学数学没学好,装逼 --------------------编程问答-------------------- 楼主是个sb,小学数学没学好,装逼 --------------------编程问答--------------------
   
public class Testing {
public static void main(String[] args){
for(int i=1;i<=7;i++){

if(i<=3){
for(int j=1;j<=7;j++){
if (j == i + 3 || j == 5 - i) {
System.out.print("*");
}else{
System.out.print(" ");
}

}
}

else{
for (int k = 1; k <= 7; k++) {
if (k == i - 3 || k == 11 - i) {
System.out.print("*");
}else{
System.out.print(" ");
}
}
}


System.out.println();
}
}

}
     


对齐下,学习了........... --------------------编程问答-------------------- 这样的代码让你老大看到了不K你才怪

代码复杂度忒高了 --------------------编程问答--------------------

public static void main(String[] args) {
print(5);
}

public static void print(int n) {
if(n % 2 == 0) n ++;

int row = 0;
int r = 0;
int col = 0;
for(int i = 0; i < n * n ; i ++) {

if(col == (n/2-r) || col == (n/2+r))
System.out.print("*");
else
System.out.print(" ");

if(++col == n)
col = 0;

if(i + 1 == n * (row+1)) {
System.out.println();
row ++;
if(row <= n/2)
r ++;
else 
r --;
}
}
}
--------------------编程问答-------------------- 来学习了,偶是新手,要是有哪位大虾解释下那就更好了 --------------------编程问答--------------------
引用 16 楼 luckli 的回复:
引用 12 楼 luckli 的回复:
public class Testing {
static int NUM = 14;
public static void main(String[] args){
int i;
int num = NUM/2;
for(i=0 ;i < NUM*NUM-NUM; ++i){
if((i+1) == ((i+1)/NUM)*NUM +num ……
选择代码,再贴上去,就没那么麻烦了。 --------------------编程问答-------------------- 呵呵 mark下  最近欢乐比较多~ --------------------编程问答--------------------         我可以 很实际的告诉你
 你这种代码没有任何实际意义 --------------------编程问答--------------------
引用 4 楼 michaellufhl 的回复:
Java code

System.out.print("空心菱形");

:)

这才是高手啊 --------------------编程问答--------------------

public static void main(String[] args) {
int type=0;//0代表打印中部以上,1代表打印中部分,2代表打印下部分
int param=3;//param代表行数
int j=0;
label: for (int i=1; i<2*param-1; i+=2) {
switch (type) {
case 0:
j=0;
do{
System.out.print("*");
j++;
}while(j!=i);
System.out.println();
if(j==param){
type++;
i=0;
continue label;
}
break;

case 1:
j=0;
do{
System.out.print("*");
j++;
}while(j!=2*param-1);
System.out.println();
type++;
i=-1;
continue label;
case 2:
j=2*param-1;
do{
System.out.print("*");
j-=2;
}while(j!=(i*2-3));
System.out.println();
if(j==1)
break label;
default:
break;
}
}
}

有兴趣的可以改下,写的差不多了 --------------------编程问答-------------------- 输出这玩意有意思吗???
--------------------编程问答--------------------
引用 33 楼 jayyounger 的回复:
Java code

public static void main(String[] args) {
        int type=0;//0代表打印中部以上,1代表打印中部分,2代表打印下部分
        int param=3;//param代表行数
        int j=0;
        label: for (int i=1; i<2*param-1; i+=2) ……


输出结果:
是菱形吗??好像是什么,不知道。
*
***
*****
***
*
--------------------编程问答-------------------- 我说写的差不多了,有兴趣的可以改下 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 34 楼 angeith 的回复:
输出这玩意有意思吗???

图形输出是数、形转换的基础,如果连这些基本的转换都弄不好,上升到三维空间后只可能是一头雾水。

还有楼上的各位,LZ的问题是要输出空心菱形吧……
其实弄清楚菱形边与行数的函数关系其实并不难:


public static void main(String[] args) {
System.out.print("请输入菱形的半轴长(小于11个字符):");

try {
int n = new Scanner(System.in).nextInt();

if (n <= 0 || n > 10) {
System.out.println("输入数据无效!");
return;
}

int num = 2 * n - 1;
for (int i = 0; i < 4 * n * n - 4 * n + 1; i++) {
int row = i / num + 1, col = i % num + 1;

if (col == Math.abs(row - n) + 1
|| num - col == Math.abs(row - n))
System.out.print("*");
else
System.out.print(" ");

if (col == num)
System.out.println();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}


另外,在C#下找出了个投机取巧的方法(Java下面还没发现这样的功能):


        static void Main(string[] args)
        {
            int n;
            string temp;

            Console.Write("请输入菱形的半轴长(小于11个字符):");
            temp = Console.ReadLine();

            if (!(int.TryParse(temp, out n)))
            {
                Console.WriteLine("输入数据至少是个数吧……");
                return;
            }

if (n <= 0 || n > 10)
            {
Console.WriteLine("输入数据无效!");
return;
}

            for (int i = 1; i <= 2 * n - 1; i++)
            {
                int num = Math.Abs(i - n);

                Console.Write(new string(' ', num) + '*');

                if (num < n - 1)
                    Console.Write(new string(' ', 2 * (n - num - 1) - 1) + '*');

                Console.WriteLine();
            }
        }
--------------------编程问答--------------------

public static void main(String[] args) {
int type=0;//0代表打印中部以上,1代表打印中部分,2代表打印下部分
int param=1;//param代表行数
int j=0;
label: for (int i=1; i<=param; i++) {
switch (type) {
case 0:
j=1;
do{
if(j==param-i-(param/2-1) || j == param/2+i)
System.out.print("*");
else 
System.out.print(" ");
j++;
}while(j!=param);
System.out.println();
if(i==param/2){
type++;
i=0;
continue label;
}
break;
case 1:
j=0;
do{
if(j==0 || j==param-1)
System.out.print("*");
else
System.out.print(" ");
j++;
}while(j!=param);
System.out.println();
type++;
i=param/2+1;
continue label;
case 2:
j=1;            
do{
if (j == param+param/2 +1- i || j == i- param/2)
System.out.print("*");
else
System.out.print(" ");
j++;
}while(j!=param+1);
System.out.println();
if(i==param)
break label;
default:
break;
}
}
}


写了不能白写,自知不如38楼 --------------------编程问答-------------------- IF(菱形)PRINT(空心)~~~~ --------------------编程问答-------------------- lz果然厉害 果然是三无代码   无信用、无技术、无标准的三无代码 --------------------编程问答-------------------- 倒,我怎么排在38楼这个搞笑的位置…… --------------------编程问答--------------------

public static void main(String[] args) throws Exception {
int size = 5;
if (size % 2 == 0) {
size++;
}
int p = size / 2;
for (int i = 0; i < 5; i++) {
byte[] tmp = new byte[size];
if (i <= p) {
tmp[p - i] = '*';
tmp[p + i] = '*';
} else {
tmp[p - (size - 1 - i)] = '*';
tmp[p + (size - 1 - i)] = '*';
}
System.out.println(new String(tmp));
}
}
--------------------编程问答-------------------- 更正一下,循环的范围要改成size

public static void main(String[] args) throws Exception {
int size = 10;
if (size % 2 == 0) {
size++;
}
int p = size / 2;
for (int i = 0; i < size; i++) {
byte[] tmp = new byte[size];
if (i <= p) {
tmp[p - i] = '*';
tmp[p + i] = '*';
} else {
tmp[p - (size - 1 - i)] = '*';
tmp[p + (size - 1 - i)] = '*';
}
System.out.println(new String(tmp));
}
}
--------------------编程问答-------------------- 被骗了 --------------------编程问答--------------------
引用 44 楼 x19881216 的回复:
更正一下,循环的范围要改成size
Java code

    public static void main(String[] args) throws Exception {
        int size = 10;
        if (size % 2 == 0) {
            size++;
        }
        int p = size / 2……

思路不错,利用Java会自动初始化数组的特性。 --------------------编程问答-------------------- 擦,写个菱形,switch结构都出来勒,强悍啊 --------------------编程问答--------------------
import java.util.Scanner;

public class Test1
{
  public static void main(String[] args) 
{
  int num = 4;//行数等于num*2+1
  for(int y = num;Math.abs(y)<num+1;y--)
  {
  for(int x=-num;Math.abs(x)<num+1;x++)
  {
  if(Math.abs(x)+Math.abs(y)==num)
  {
  System.out.print("*");
  }
  else
  {
  System.out.print(" ");
  }
  }
  System.out.println();
  }
}
  
}

--------------------编程问答-------------------- --------------------编程问答-------------------- 我是根据坐标轴的对称性写的

import java.util.Scanner;

public class Test1
{
  public static void main(String[] args) 
{
  int num = 4; //行数等于num*2+1
  for(int y = num;Math.abs(y)<num+1;y--)
  {
  for(int x=-num;Math.abs(x)<num+1;x++)
  {
  if(Math.abs(x)+Math.abs(y)==num)
  {
  System.out.print("*");
  }
  else
  {
  System.out.print(" ");
  }
  }
  System.out.println();
  }
}
  
}

--------------------编程问答-------------------- 这种游戏对新手很有帮助啊 --------------------编程问答-------------------- 似乎都很强大啊,呵呵
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,