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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Gonnaloveu 中级黑马   /  2015-1-6 22:55  /  3187 人查看  /  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 个回复

倒序浏览
最近发现以前学的都忘差不多了,看来还是代码敲得少. =.=
回复 使用道具 举报
不错,感谢分享了啊
回复 使用道具 举报
完全自学没人可以问太困难..
回复 使用道具 举报
要不要这么吊!
回复 使用道具 举报
李增宽 来自手机 中级黑马 2015-1-6 23:24:25
地板
厉害
回复 使用道具 举报
Gonnaloveu 发表于 2015-1-6 23:22
完全自学没人可以问太困难..

同感:hug:
回复 使用道具 举报
jun_03 发表于 2015-1-6 23:23
要不要这么吊!

最近打算报名,各种做基础题,无意间想到了这个,整体感觉我基础一点也不好...唉
回复 使用道具 举报

尤其许多问题度娘也不知道.一想想好长时间,太伤
回复 使用道具 举报
是这个吗?
  1.    *
  2.        *     *
  3.     *           *
  4. *                 *
  5.     *           *
  6.        *     *
  7.           *
复制代码
回复 使用道具 举报
大牛呀,学习了。。
回复 使用道具 举报
学习一下!琢磨琢磨
回复 使用道具 举报
厉害。。。
回复 使用道具 举报
强  还真没想过   
回复 使用道具 举报
感谢分享。
回复 使用道具 举报
很好,很强悍
回复 使用道具 举报

     *
    ***
   *****
  *******
*********
***********
*********
  *******
   *****
    ***
     *   两个都是这种的,如果想要空心的可以改
回复 使用道具 举报
看看大神们的学习
回复 使用道具 举报
好强大,学习了
回复 使用道具 举报
想报61期不知道现在走流程会不会太早
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马