Java输出正反金字塔循环,空心菱形的显示
分类:微服架构

为了打印一个菱形,大概花掉了我一上午的时间去思考,不过做出来之后,感觉好多了,毕竟我只是初学者,而且是自学的那种,一定能够坚持下去的.

第五章String代码合集

public static void main(String[] args) {//菱形实心时,数量为1,2,3......
int a = 10;//菱形的边为10个 *
for (int i = 1; i <= a; i++) {
for (int j = 1; j <= a - i; j++) {
System.out.print(" ");//打印空格
}
for (int k = 1; k <= i; k++) {
if (k == 1 || k == i) {//只有第一个和最后一个位置输出 * ,其他位置输出空格
System.out.print("* ");
} else {
System.out.print(" ");// 2倍的空格
}
}
System.out.println();
}//打印上半部分菱形(即三角形)
for (int i = 1; i < a; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
for (int m = 1; m <= a - i; m++) {
if (m == 1 || m == a - i) {
System.out.print("* ");
} else {
System.out.print(" ");//2倍的空格
}
}
System.out.println();
}
}

1,问题分析

public class D4_6_2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//打印一个菱形
int s = 5;//定义一个sum总共需要打印的行数
for(int i = 1 ;i <= s;i++){//循环体,外层循环是核心,上半部分一共循环5次.每次循环为了保证后期的代码的可更改性,i务必;联系到后面
for(int k = 1;k <= s - i ;k++){//内层有两个循环,这个是打印空格的,空格打印是递减的
System.out.print("  ");//不加换行操作符
}
   for(int j = 1;j <= (i*2)-1;j++){ //这个打印*,每循环一次空格之后这个循环跟上接着打印输出*,不换行
    System.out.print("* ");
   }
   System.out.println();//打印完一次完整的行,接着就是换行输出了
}
for(int l = 1;l <= s-1;l++){//下面是菱形的下半部分,和上半部分操作相比,是一致的.
for(int m = 1;m <= l;m++){
System.out.print("  ");
}
for(int n = 1 ;n <= (s*2)-((l*2)+1);n++){
System.out.print("* ");
}
System.out.println();
}
}
//耗时接近一个上午,看来调整心态是必不可少的一部分.
}

 

}

  我们都知道,打印输出的时候,都是从最左端输出,而这里,第一个星号是在中间。这实际是因为星号之前有很多空格。当我们使用问号来表示空格,实际的输出效果应该是图1.2的形式。

 

              图片 11.1              图片 2  1.2

import java.util.Date;//导入时间这个需要用的包

  从图中分析,我们可以看到本次打印出的金字塔有5行,每一行都会打印出几个空格,然后再打印出几个★号,这样我们就知道该如何确认程序的框架了。

 

      public static void Triangle(){

public class D5StringDemo {

        for(int i = 1;i <= 5;i++){    //循环5次,打印5行

public static void main(String[] args) {

                        //打印空格数

// TODO 自动生成的方法存根

                        //打印★数

String str = " Hello World ";

          System.out.pringln();      //打印出行数

int i = str.length();//获取字符串的长度

        }

System.out.println(i);

      }

int size = str.indexOf("l");//查找首次出现某字符或者字符串的操作

  现在我们知道了需要的的行数,那么接下来我们需要确认空格数和★数有多少,我们来看它的规律。

int size2 = str.lastIndexOf("l");//查找最后一次出现某字符或者字符串的操作

2,寻找空格和★号的规律。

System.out.println("第一次出现l的位置是:"+size);

  从图中,我们可以发现:第1行的空格为4个,第2行是3个,第3行是2个,……,每行依次递减,直至最后一行空格数为0;而星号数目是第1行是1个,第2行是3,第3行是5,……,每行依次递增2,直至最后一行星号数为9。总结数据,我们可以得到表1.1所示的规律。

System.out.println("最后一次出现l的位置是:" + size2);

空格和星星的规律

char a = str.charAt(4);//指定位置的字符显示操作

行数

System.out.println(a);

空格数

String str2 = str.substring(3);//截取字符串的操作

星星数

System.out.println(str2);

1

String str3 = str.substring(3, 8);//指定位置截取,指定位置结束截取

System.out.println(str3);

5-1 

System.out.println("忽略空格之前的字符串长度是:"+str.length());

String last = str.trim();//去除字符串前后的空格的操作

1*2-1 

System.out.println(last);

2

System.out.println("忽略空格之后的字符串长度是:"+last.length());

String sre4 = str.replace("o","e");

5-2 

System.out.println(sre4);

String str5 = "董海,你好!";

2*2-1 

String str6 = str5.replace("你好", "你坏");//替换操作

3

System.out.println(str6);

String str7 = "你好!";

5-3 

String str8 = "你好!";//这种情况分配的内存空间相同的

boolean b = (str7 == str8);//

 3*2-1

System.out.println(b);

4

String str01 = new String("Hello,我");//开始分配内存空间

String str02 = new String("hello,我");

5-4 

boolean c = (str01 == str02);//这种情况字符串相同,得到的结果却是false

System.out.println(c);

 4*2-1

boolean d = str01.equals(str02);//中文的比较还是采用这种方法好一些

5

System.out.println(d);

boolean e = str01.equalsIgnoreCase(str02);//这种方法通常情况下用于数字和字母的组合验证码的操作,比较方便

5-5 

System.out.println(e);//操作显示,汉语中夹杂着字母也是可以完成这种操作的.所以,后面这种方法还是可以考虑用汉语夹杂着字母的验证码的操作

int f = str01.compareTo(str02);//操作得知,他只会截取第一个字母来进行比较.

 5*2-1

System.out.println(f);

规律 

String g[] = str.split("=");//没有达到预想的效果,不知道到底怎么分割

依次减1 

System.out.println(g);

5-行数 

//格式化字符串的相关操作

依次加2 

Date date = new Date();

行数*2-1 

String date1 = String.format("%tF", date);//中文试的年月日.当然也是最常用的一种

   根据图中我们可以发现这种规律,那么接下来是不是就简单了。

System.out.println(date1);

3,确定空格数

String date2 = String.format("%tD", date);//美式的年月日表达方法,开发跨国际的软件是需要这样的返回时间的方法的

  由于每行空格数有着“5–行数”的规律。所以在第i行的时候,空格数就为5–i。所以我们只要把5–i个空格打印出来即可。

System.out.println(date2);

    

String time1 = String.format("%tT", date);//精确试的时间表达方式,同样这种也是最常用的.

      public static void Triangle(){

System.out.println(time1);

        for(int i = 1;i <= 5;i++){    //循环5次,打印5行

String time2 = String.format("%tR", date);//初略的表示时间的一种方式,当然这种方法主要是考虑到占用到手机屏幕中的位置的问题,比较简洁.

           for(int j = 1;j <= 5-i;j++){

System.out.println(time2);

              System.out.print(" ");     //打印空格数

//常规类型的格式化,这种主要运用到之后的数据处理这一块,用户输入的转化成我们需要的,或者转化成用户需要的格式,非常实用

           }             

String aq = String.format("%d", 100/2);//这些操作的效果没有完成String到int的转化,暂时还不理解

 

System.out.println(aq);

                        //打印★数

String sw = String.format("%%", aq);//转化成字面%号,感觉毫无意义的一种操作

          System.out.pringln();      //打印出行数

System.out.println(sw);

        }

String de = String.format("%X", 20);//转化成十六进制,或许以后会有用处

      }

System.out.println(de);//特别强调,这里不能够转化aq的值,或许是因为aq为字符串类型的原因

  注意打印空格数的时候不要输成了println();这样会换行的。

//学会使用正则表达式

 

//接下来做一个识别qq邮箱的代码识别

4,打印星星数

String str001 = new String("745280440@vip.com.cn");//假设存在vip的客户

 

String Email = "\w+@(\w{3})?\.\w{3}\.\w{2}";//正则表达式看着难,其实超级简单的

  由于每行星号数有着“行数*2–1”的规律。所以在第i行的时候,星号数就为2*i–1。所以我们只要把2*i–1个星号打印出来即可。

if(str001.matches(Email)){

      

System.out.println("这是一个合法的Email地址");

      public static void Triangle(){

}else

        for(int i = 1;i <= 5;i++){    //循环5次,打印5行

{

           for(int j = 1;j <= 5-i;j++){

System.out.println("这不是一个合法的Email地址");//完成实验,有机会可以去试一下,等后面学了输入操作就可以完美的实验了

              System.out.print(" ");     //打印空格数

}

           }             

boolean h = str.startsWith("hello");//判断字符串开始的方法

           

System.out.println("没去空格之前:"+h);

           for(int k = 1; k <= 2 * i - 1;k++ ){

boolean n = str.endsWith("world");//判断结尾字符,如果出现空格的话,会按照空格计,所以在这里可以先使用去掉首尾空格的方法之后判断

              System.out.print("★");    //打印★数

System.out.println(n);

           }

//接下来试一下

                        

String str003 = str.trim();//去掉首尾空格

            System.out.pringln();      //打印出行数

System.out.println("这是去掉空格之后的字符串:"+str003);

          }

boolean o = str003.startsWith("Hello");//判断是否首字符串正确

        }

System.out.println("去掉空格之后"+o);//输出boolean表达式,从而得出结果

 

//字母大小写的转换,这种也是相当于用到验证码的转换,但是之前的有个不区分大小写的比较方法,这里有着相似的作用,但是这个方法更加灵活一点

  OK,程序到此分析完毕,而我们的正金字塔也打印出来了,我回顾了,你懂了吗?o( ̄▽ ̄)d

String str004 = new String();

  

str004 = str.toLowerCase();//将字符串转换成全部小写的格式

  正金字塔的思路就是这样,那么对应的倒金字塔的思路与此如出一辙,我就不在此一一写了,相信聪明的你能够很好的解决的,我就单纯的把倒金字塔空格和星星数的规律和我写的一个demo放在下面吧。

System.out.println(str004);

 

String str005 = new String();//将字符串全部转换成小写的格式

      

str005 = str.toUpperCase();

行数

System.out.println(str005);

空格数

boolean p = str004.equals(str005);//拥有独立内存空间的字符串比较是否相等时

星星数

System.out.println("判断两个字符串是否相等"+p);

1

boolean q = str005.equalsIgnoreCase(str005);//不管大小写的比较方法

0

System.out.println("不管大小写的比较方法"+q);//输出打印

1-1

//测试,使用StringBuffer方法将字符串的长度自动增加

9

StringBuffer str006 = new StringBuffer("春眠不觉晓,");//为str006分配一个独立的内存空间

5*2-1

str006.append("处处闻鸟");//向字符串生成器追加内容

2

System.out.println(str006);//打印结果

1

str006.insert(9, "啼");//插入字符或者字符串的方法

2-1

System.out.println(str006);

7

str006.delete( 6, 11);//删除指定位置的字符串

4*2-1

System.out.println(str006);

3

String str007 = new String("我们是一家人");//为何这里以StringBuilder对象为字符串创建对象的时候就不能够完成比较嘞

2

String str008 = new String("我们是一好朋友");

3-1

str007.substring(0,2);

5

str008.substring(0,2);

3*2-1

boolean l = str007.equals(str008);//使用equal方法来比较截取的字符串是否相等

4

System.out.println("比较截取字符串之后是不是相等的:"+l);

3

}

4-1

 

3

}

2*2-1

打印菱形

5

public class D4_6_2 {

4

 

5-1

public static void main(String[] args) {

1

// TODO 自动生成的方法存根

1*2-1

//打印一个菱形

规律

int s = 5;//定义一个sum总共需要打印的行数

依次递增1

for(int i = 1 ;i <= s;i++){//循环体,外层循环是核心,上半部分一共循环5次.每次循环为了保证后期的代码的可更改性,i务必;联系到后面

行数-1

for(int k = 1;k <= s - i ;k++){//内层有两个循环,这个是打印空格的,空格打印是递减的

依次递减2

System.out.print("  ");//不加换行操作符

行数*2-1(反向)

}

   

    for(int j = 1;j <= (i*2)-1;j++){ //这个打印*,每循环一次空格之后这个循环跟上接着打印输出*,不换行

  ****哒哒****:关于菱形,大家可以参考我的随笔 javaScript打印正倒直线 来做哦。O(∩_∩)O嗯!

     System.out.print("* ");

  我的例子

    }

  1,下面是我写的一个demo,大家可以参考看看哦。

    System.out.println();//打印完一次完整的行,接着就是换行输出了

package com.javase.demo;

}

import java.util.Scanner;

for(int l = 1;l <= s-1;l++){//下面是菱形的下半部分,和上半部分操作相比,是一致的.

 

for(int m = 1;m <= l;m++){

    /**
    * 金字塔
    * @author Mr.Zhang
    *
    */
    public class Pyramid {

System.out.print("  ");

      static Scanner input = new Scanner(System.in);
    /**
    * *****打印金字塔*****
    * 1,确定金字塔行数
    * 2,确认空格数
    * 3,确认星星数
    * @param args
    */
    public static void main(String[] args) {

}

      entrance();

for(int n = 1 ;n <= (s*2)-((l*2)+1);n++){

    }

System.out.print("* ");

    /**
    * 入口项
    */
    public static void entrance() {
      System.out.println("请选择(0--正金字塔,1--倒金字塔,2--菱形金字塔)");
      String select = input.nextLine();

}

      if(isNumber(select)){
        int selectInt = Integer.parseInt(select);

System.out.println();

        switch(selectInt){
          case 0:
            uprightPyramid();
            break;
          case 1:
            fallPyramid();
            break;
          case 2:
            System.out.println("该功能尚未完善!");
            break;
          default:
            System.out.println("请输入正确的选项!");
            entrance();
            break;
        }
      }else if(!select.equals(0) || !select.equals(1) || !select.equals(2)){
        nullSuccess();
      }
    }

}

    /**
    * 打印正金字塔
    * @param input
    */
    public static void uprightPyramid() {
      System.out.println("请输入行数:");
      String row = input.nextLine();

}

      if(isNumber(row)){
        int rows = Integer.parseInt(row);
        for(int i = 1;i <= rows;i++){ //循环输入的行数,

//耗时接近一个上午,看来调整心态是必不可少的一部分.

          for(int j = 1;j <= rows - i;j++){ //输出循环每行的空格
            System.out.print(" ");
          }

}

          for(int k = 1;k <= 2 * i - 1;k++){ // 输出循环每行的★
            System.out.print("★");
          }

 

          System.out.println();
        }
          System.out.println("打印完成,线程结束");
      }else{
        nullSuccess();
      }

    }
    /**
    * 打印倒金字塔
    */
    public static void fallPyramid(){
      System.out.println("请输入行数:");
      String row = input.nextLine();
      if(isNumber(row)){
        int rows = Integer.parseInt(row);

        for(int i = rows;i >= 1;i--){
          for(int j = 0;j < rows-i;j++){ //打印空格数
            System.out.print(" ");
          }

          for(int k = 0;k < i * 2 - 1;k++){ //打印★数
            System.out.print("★");
          }

          System.out.println();
        }

        System.out.println("打印完成,线程结束");
      }else{
        nullSuccess();
      }

    }

    /**
    * 判断是否为数字
    * @param str
    * @return
    */
    public static boolean isNumber(String str){
        boolean ok = false;
        if(null != str && str.matches("^[0-9]+$")){
          return true;
        }
      return ok;
    }

    /**
    * 调用错误结果
    */
    public static void nullSuccess(){
      System.out.println("您输入的不是数字,一遍浪去,不听话的孩子!");
    }

}

转载于:

本文由10bet手机官网发布于微服架构,转载请注明出处:Java输出正反金字塔循环,空心菱形的显示

上一篇:api指的是什么 下一篇:没有了
猜你喜欢
热门排行
精彩图文