java打印出菱形圖案實例詳解
第一步:首先對圖像進行解析
想要打印該圖形必須要進行多層循環(huán)嵌套,分兩個部分進行打印。
第一部分為上半部分前四行,他們是遞增的關(guān)系,后半部分后三行為遞減關(guān)系,由此可以得出我們需要寫兩個打的循環(huán)。并且由于“*”位置的關(guān)系,我們必須帶入空格同時打印。所以每個部分需要兩個循環(huán)控制,即兩個大循環(huán)每個里面嵌套兩個小循環(huán)總計四個循環(huán)。
第二部:對數(shù)字進行分析
在分析之前,我們必須明白外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列數(shù),因此我們需要分析他的行和列。
示例代碼如下:
class ForForTest { public static void main(String[] args) { /* 輸出如下圖形: 行數(shù)i: 空格數(shù)j: “*”數(shù)目z: * 1 3 1 *** 2 2 3 ***** 3 1 5 ******* 4 0 7 ***** 1 1 5 6 *** 2 2 3 5 * 3 3 1 4 */ for (int i = 1;i <= 4;i++){ for (int j = 1;j <= 4 - i;j++) { System.out.print(" "); } for (int z = 1;z <= i*2-1;z++){ System.out.print("*"); } System.out.println(); } for (int i = 1;i <= 3;i++){ for (int j = 1;j <= i;j++){ System.out.print(" "); } int y = 3; for (int z = 5;z >= 2*i-1;z--){ System.out.print("*"); } System.out.println(); } } }
實例補充:
import java.util.Scanner; import java.util.regex.Matcher; public class test01 { private static int i; private String ch; public static void main(String[] args) { runTest(); } private void printBlank(int blank){//打空格 for(int i=blank;i>=1;i--){ System.out.print(" "); } } private void printStar( int sum,String ch){ //打圖形 for(int i=sum;i>=1;i--){ System.out.print(ch); } } private void printTab(){ //打回車 System.out.println(); } private void run(int level,String ch){//綜合打 if(ch.length()==1){ for(i=1;i<=(level+1)/2;i++){ if(i==1){ printBlank((level+1)/2-i); printStar(1,ch); printTab(); }else{ printBlank((level+1)/2-i); printStar(1,ch); printBlank(((level+1)/2+i-1)-((level+1)/2-i)-2); //總元素為 層數(shù)+i-1,再減去打印的空格和*號數(shù)量. printStar(1,ch); printTab(); } } for(i=(level+1)/2-1;i>=1;i--){ if(i==1){ printBlank((level+1)/2-i); printStar(1,ch); printTab(); }else{ printBlank((level+1)/2-i); printStar(1,ch); printBlank((level+1)/2+i-1-((level+1)/2-i)-2); printStar(1,ch); printTab(); } } }else{ for(i=1;i<=(level+1)/2;i++){ if(i==1){ printBlank((level+1)/2-i+ch.length()/2); printStar(1,ch); printTab(); }else{ printBlank((level+1)/2-i); printStar(1,ch); printBlank(((level+1)/2+i-1)-((level+1)/2-i)-2); //總元素為 層數(shù)+i-1,再減去打印的空格和*號數(shù)量. printStar(1,ch); printTab(); } } for(i=(level+1)/2-1;i>=1;i--){ if(i==1){ printBlank((level+1)/2-i+ch.length()/2); printStar(1,ch); printTab(); }else{ printBlank((level+1)/2-i); printStar(1,ch); printBlank((level+1)/2+i-1-((level+1)/2-i)-2); printStar(1,ch); printTab(); } } } } public static void runTest() { //判斷條件 Scanner s = new Scanner(System.in); try{ System.out.println("請輸入要打印的層數(shù),只能輸入大于等于3的奇數(shù) :" ); int level = s.nextInt(); String str = String.valueOf(level); if(str.matches("[1-9]\\d*")&&Integer.parseInt(str)%2!=0&&Integer.parseInt(str)!=1){ System.out.println("請輸入要打印的形狀:" ); String ch = s.next(); try{ if(ch.matches("[^\u4e00-\u9fa5]+" )){ new test01().run(level, ch); }else { throw new Exception();} }catch (Exception e) { System.out.println("輸入有誤!!!不能包含漢字字符,請重新輸入"); System.out.println("***********************************"); runTest(); //遞歸 } }else if(str.matches("[-9-0]+")){ // throw new Exception(); } }catch (Exception e) { System.out.println(" 輸入有誤!!!只能輸入大于等于3的奇數(shù),請重新輸入"); System.out.println("***********************************"); runTest(); //遞歸 } } }
以上就是java打印出菱形圖案實例詳解的詳細內(nèi)容,更多關(guān)于java打印菱形圖案的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Spring cloud使用Ribbon進行Restful請求
這篇文章主要介紹了詳解Spring cloud使用Ribbon進行Restful請求,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案
實體類中有一個 List<String> 類型的屬性,對應(yīng)于 MySQL 表里的 varchar 字段,使用 MyBatis 添加或查詢時能互相轉(zhuǎn)換,本文給大家介紹Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案,需要的朋友可以參考下2024-06-06使用eclipse導(dǎo)入javaWeb項目的圖文教程
這篇文章主要介紹了如何使用eclipse導(dǎo)入別人的javaWeb項目,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07JAVA后端學(xué)習(xí)精華之網(wǎng)絡(luò)通信項目進階
不同項目之間的通信方式分為,http、socket、webservice;其中socket通信的效率最高,youtube就采用的是原始的socket通信,他們信奉的原則是簡單有效2021-09-09SpringBoot集成RabbitMQ實現(xiàn)用戶注冊的示例代碼
這篇文章主要介紹了SpringBoot集成RabbitMQ實現(xiàn)用戶注冊的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12