java打印出菱形圖案實(shí)例詳解

第一步:首先對(duì)圖像進(jìn)行解析
想要打印該圖形必須要進(jìn)行多層循環(huán)嵌套,分兩個(gè)部分進(jìn)行打印。
第一部分為上半部分前四行,他們是遞增的關(guān)系,后半部分后三行為遞減關(guān)系,由此可以得出我們需要寫兩個(gè)打的循環(huán)。并且由于“*”位置的關(guān)系,我們必須帶入空格同時(shí)打印。所以每個(gè)部分需要兩個(gè)循環(huán)控制,即兩個(gè)大循環(huán)每個(gè)里面嵌套兩個(gè)小循環(huán)總計(jì)四個(gè)循環(huán)。
第二部:對(duì)數(shù)字進(jìn)行分析
在分析之前,我們必須明白外層循環(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();
}
}
}
實(shí)例補(bǔ)充:
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,再減去打印的空格和*號(hào)數(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,再減去打印的空格和*號(hào)數(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("請(qǐng)輸入要打印的層數(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("請(qǐng)輸入要打印的形狀:" );
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("輸入有誤!!!不能包含漢字字符,請(qǐng)重新輸入");
System.out.println("***********************************");
runTest(); //遞歸
}
}else if(str.matches("[-9-0]+")){ //
throw new Exception();
}
}catch (Exception e) {
System.out.println(" 輸入有誤!!!只能輸入大于等于3的奇數(shù),請(qǐng)重新輸入");
System.out.println("***********************************");
runTest(); //遞歸
}
}
}
以上就是java打印出菱形圖案實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于java打印菱形圖案的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談Java中ThreadLocal內(nèi)存泄露的原因及處理方式
內(nèi)存泄漏就是我們申請(qǐng)了內(nèi)存,但是該內(nèi)存一直無(wú)法釋放,就會(huì)導(dǎo)致內(nèi)存溢出問(wèn)題,本文詳細(xì)的介紹了ThreadLocal內(nèi)存泄露的原因及處理方式,感興趣的可以了解一下2023-05-05
SpringBoot接口路徑重復(fù),啟動(dòng)服務(wù)器失敗的解決
這篇文章主要介紹了SpringBoot接口路徑重復(fù),啟動(dòng)服務(wù)器失敗的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
解析Java多線程之常見(jiàn)鎖策略與CAS中的ABA問(wèn)題
本篇文章介紹了常見(jiàn)的鎖策略,并說(shuō)明了synchronized關(guān)鍵字加的鎖類型不是單一一種鎖類型的,根據(jù)可重入鎖與非可重入鎖引出了死鎖的概念與死鎖條件,最后介紹了CAS指令以及CAS鎖產(chǎn)生的ABA問(wèn)題及其解決方案,需要的朋友可以參考下2022-06-06
SpringBoot集成Knife4j報(bào)錯(cuò):文件上傳不顯示文件域問(wèn)題的解決方案
在使用 Knife4j 為 Spring Boot 項(xiàng)目生成 API 文檔時(shí),開(kāi)發(fā)者可能會(huì)遇到文件上傳功能不顯示文件域的問(wèn)題,本文將詳細(xì)介紹如何解決這一問(wèn)題,并提供完整的解決方案,需要的朋友可以參考下2025-05-05
IDEA新建javaWeb以及Servlet簡(jiǎn)單實(shí)現(xiàn)小結(jié)
這篇文章主要介紹了IDEA新建javaWeb以及Servlet簡(jiǎn)單實(shí)現(xiàn)小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
解決spring cloud gateway 獲取body內(nèi)容并修改的問(wèn)題
這篇文章主要介紹了解決spring cloud gateway 獲取body內(nèi)容并修改的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
MyBatis 中 type-aliases-package的作用(簡(jiǎn)化類型映射)
MyBatis中type-aliases-package的作用是簡(jiǎn)化類型映射,通過(guò)指定包路徑,MyBatis會(huì)自動(dòng)掃描該包下的所有類并為這些類生成類型別名,減少XML配置文件中的冗長(zhǎng)代碼,感興趣的朋友跟隨小編一起看看吧2024-11-11
Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解
這篇文章主要介紹了使用Sentinel對(duì)熱門詞匯進(jìn)行限流的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

