java列印正金字塔,倒金字塔和“水影”金字塔,java水影
java列印正金字塔,倒金字塔和“水影”金字塔
-------噠噠~~~~~~~~~~
小小少年 閑來無事,想起自己初學java的時候做的經典的無非就是列印出一些有意思的圖形,心血來潮自己就寫了這麼一個列印金字塔的demo,自己回顧一下當初的感受,同時也 分享給初學java的同道中人,一起來培養編程的興趣<(^-^)>。
金字塔圖案 1,問題分析 我們都知道,列印輸出的時候,都是從最左端輸出,而這裡,第一個星號是在中間。這實際是因為星號之前有很多空格。當我們使用問號來表示空格,實際的輸出效果應該是圖1.2的形式。 1.1 1.2 分析,我們可以看到本次列印出的金字塔有5行,每一行都會列印出幾個空格,然後再列印出幾個★號,這樣我們就知道該如何確認程式的架構了。 public static void Triangle(){ for(int i = 1;i <= 5;i++){ //迴圈5次,列印5行 //列印空格數 //列印★數 System.
out.pringln(); //列印出行數 } } 現在我們知道了需要的的行數,那麼接下來我們需要確認空格數和★數有多少,我們來看它的規律。2,尋找空格和★號的規律。
,我們可以發現:第1行的空格為4個,第2行是3個,第3行是2個,……,每行依次遞減,直至最後一行空格數為0;而星號數目是第1行是1個,第2行是3,第3行是5,……,每行依次遞增2,直至最後一行星號數為9。總結資料,我們可以得到表1.1所示的規律。
空格和星星的規律
行數 |
空格數 |
星星數 |
1 |
4 |
5-1 |
1 |
1*2-1 |
2 |
3 |
5-2 |
3 |
2*2-1 |
3 |
2 |
5-3 |
5 |
3*2-1 |
4 |
1 |
5-4 |
7 |
4*2-1 |
5 |
0 |
5-5 |
9 |
5*2-1 |
規律 |
依次減1 |
5-行數 |
依次加2 |
行數*2-1 |
根據圖中我們可以發現這種規律,那麼接下來是不是就簡單了。
3,確定空格數
由於每行空格數有著“5–行數”的規律。所以在第i行的時候,空格數就為5–i。所以我們只要把5–i個空格列印出來即可。
public static void Triangle(){ for(int i = 1;i <= 5;i++){ //迴圈5次,列印5行 for(int j = 1;j <= 5-i;j++){ System.out.print(" "); //列印空格數 } //列印★數 System.
out.pringln(); //列印出行數 } } 注意列印空格數的時候不要輸成了println();這樣會換行的。 4,列印星星數 由於每行星號數有著“行數*2–1”的規律。所以在第i行的時候,星號數就為2*i–1。所以我們只要把2*i–1個星號列印出來即可。 public static void Triangle(){ for(int i = 1;i <= 5;i++){ //迴圈5次,列印5行 for(int j = 1;j <= 5-i;j++){ System.out.print(" "); //列印空格數 } for(int k = 1; k <= 2 * i - 1;k++ ){ System.out.print("★"); //列印★數 } System.
out.pringln(); //列印出行數 } } OK,程式到此分析完畢,而我們的正金字塔也列印出來了,我回顧了,你懂了嗎?o( ̄▽ ̄)d 正金字塔的思路就是這樣,那麼對應的倒金字塔的思路與此如出一轍,我就不在此一一寫了,相信聰明的你能夠很好的解決的,我就單純的把倒金字塔空格和星星數的規律和我寫的一個demo放在下面吧。
行數 |
空格數 |
星星數 |
1 |
0 |
1-1 |
9 |
5*2-1 |
2 |
1 |
2-1 |
7 |
4*2-1 |
3 |
2 |
3-1 |
5 |
3*2-1 |
4 |
3 |
4-1 |
3 |
2*2-1 |
5 |
4 |
5-1 |
1 |
1*2-1 |
規律 |
依次遞增1 |
行數-1 |
依次遞減2 |
行數*2-1(反向) |
****噠噠****:關於菱形,大家可以參考我的隨筆 javaScript列印正倒直線 來做哦。O(∩_∩)O嗯!
我的例子 1,下面是我寫的一個demo,大家可以參考看看哦。
package com.javase.demo;
import java.util.Scanner;
/**
* 金字塔
* @author Mr.Zhang
*
*/
public class Pyramid {
static Scanner input = new Scanner(System.in);
/**
* *****列印金字塔*****
* 1,確定金字塔行數
* 2,確認空格數
* 3,確認星星數
* @param args
*/
public static void main(String[] args) {
entrance();
}
/**
* 入口項
*/
public static void entrance() {
System.out.println("請選擇(0--正金字塔,1--倒金字塔,2--菱形金字塔)");
String select = input.nextLine();
if(isNumber(select)){
int selectInt = Integer.parseInt(select);
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("您輸入的不是數字,一遍浪去,不聽話的孩子!");
}
}