A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© Gonnaloveu 中级黑马   /  2015-1-6 22:55  /  3578 人查看  /  26 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Gonnaloveu 于 2015-1-7 09:29 编辑

学java基础有一个月了,打算复习一下,无意间想到打印菱形了,以下是我自己写出来的两种方法,如果大家有什么其他方法欢迎分享.或者有什么其他有意思的拿出来大家一起做吧.
要求:只用一个for打印菱形"*"(当然其他的循环如while也不能用啦)
第一种方法:
  1. import java.util.Scanner;

  2. public class Test3 {
  3.         public static void main(String[] args) {
  4.                 Scanner sc =new Scanner(System.in);
  5.                 System.out.println("请输入菱形的行数(请输入单数,因为双数无法构成菱形):");
  6.                 int x=sc.nextInt();
  7.                 for (int i = 0, j = 0, k = 0; i < x;) {
  8.                         if (Math.abs(i - x/2) + j == x/2) { //判断输出是否是此行的最后一个"*"
  9.                                 if (Math.abs(i - x/2) > k) {        //用来制造第一行和最后一行的空格
  10.                                         System.out.print(" ");
  11.                                         k++;
  12.                                 } else {                                                //换行并初始化j和k
  13.                                         System.out.println("*");
  14.                                         j = 0;
  15.                                         k = 0;
  16.                                         i++;
  17.                                 }
  18.                         } else {
  19.                                 if (Math.abs(i - x/2) > k) {        //用来打印除第一行和最后一行的空格
  20.                                         System.out.print(" ");
  21.                                         k++;
  22.                                 } else {
  23.                                         System.out.print("**");                //后一个*可以改成空格
  24.                                         j++;
  25.                                 }
  26.                         }
  27.                 }
  28.         }
  29. }
复制代码

第二种方法:

  1. import java.util.Scanner;
  2. /**
  3. * 假设菱形x行
  4. * 因为是菱形x行x列一共需要循环x²次
  5. * i%x代表第几列 i/x代表第几行  然后判断应该打印什么就可以了
  6. * */
  7. public class Test4 {
  8.         public static void main(String[] args) {
  9.                 Scanner sc =new Scanner(System.in);
  10.                 System.out.println("请输入菱形的行数(请输入单数,因为双数无法构成菱形):");
  11.                 int x=sc.nextInt();
  12.                 for(int i =0;i<x*x;i++){               
  13.                         if(i%x<Math.abs(i/x-x/2)){               
  14.                                 System.out.print(" ");               
  15.                         }else if(i%x<x-1-Math.abs(i/x-x/2)){
  16.                                 System.out.print("*");
  17.                         }else if(i%x == x-1){
  18.                                 System.out.println("*");
  19.                         }
  20.                 }
  21.         }
  22. }
复制代码
补充:
以上两种执行效果例图:

看到有人想要空心菱形的实际添加一个判断语句即可:
  1. import java.util.Scanner;

  2. public class Test3 {
  3.         public static void main(String[] args) {
  4.                 Scanner sc =new Scanner(System.in);
  5.                 System.out.println("请输入菱形的行数(请输入单数,因为双数无法构成菱形):");
  6.                 int x=sc.nextInt();
  7.                 for (int i = 0, j = 0, k = 0; i < x;) {
  8.                         if (Math.abs(i - x/2) + j == x/2) { //判断输出是否是此行的最后一个"*"
  9.                                 if (Math.abs(i - x/2) > k) {        //用来制造第一行和最后一行的空格
  10.                                         System.out.print(" ");
  11.                                         k++;
  12.                                 } else {                                                //换行并初始化j和k
  13.                                         System.out.println("*");
  14.                                         j = 0;
  15.                                         k = 0;
  16.                                         i++;
  17.                                 }
  18.                         } else {
  19.                                 if (Math.abs(i - x/2) > k) {        //用来打印除第一行和最后一行的空格
  20.                                         System.out.print(" ");
  21.                                         k++;
  22.                                 }else if(j==0){
  23.                                         System.out.print("* ");
  24.                                         j++;
  25.                                 }
  26.                                 else {
  27.                                         System.out.print("  ");                //后一个*可以改成空格
  28.                                         j++;
  29.                                 }
  30.                         }
  31.                 }
复制代码
效果图:



评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

26 个回复

正序浏览
今天试着敲空心菱形,只用for循环,改了好多次才出来,把楼主的方法再试试看能加深理解吗
回复 使用道具 举报
好棒,今天刚好学到这里,非常感谢楼主的分享哦。我看看代码,自己敲一下
回复 使用道具 举报
高手呀!数学真奇妙,学习了。
回复 使用道具 举报
不错,感谢分享。
回复 使用道具 举报
学习下,回头试试
回复 使用道具 举报
why are you so diao?
学习了。。。。。。。
顺便问下基础测试题可以发一份么,谢谢楼主啦
回复 使用道具 举报

实心的我也会,空心的还不会改.
回复 使用道具 举报
想报61期不知道现在走流程会不会太早
回复 使用道具 举报
好强大,学习了
回复 使用道具 举报
看看大神们的学习
回复 使用道具 举报

     *
    ***
   *****
  *******
*********
***********
*********
  *******
   *****
    ***
     *   两个都是这种的,如果想要空心的可以改
回复 使用道具 举报
很好,很强悍
回复 使用道具 举报
感谢分享。
回复 使用道具 举报
强  还真没想过   
回复 使用道具 举报
厉害。。。
回复 使用道具 举报
学习一下!琢磨琢磨
回复 使用道具 举报
大牛呀,学习了。。
回复 使用道具 举报
是这个吗?
  1.    *
  2.        *     *
  3.     *           *
  4. *                 *
  5.     *           *
  6.        *     *
  7.           *
复制代码
回复 使用道具 举报

尤其许多问题度娘也不知道.一想想好长时间,太伤
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马