Java筆試的常見題型,在console試著依據傳入的數使用星號(*)畫出三角形,階梯或金字塔。
例如傳入的數為5,則畫階梯的結果印出如下
*
**
***
****
*****
因為傳入的數為5,所以要印出5階。這是最簡單的題型,因為只要印出星號即可,且每一階的星號數以公差為1遞增
public static void main(String[] args) {
printStairs(5);
}
public static void printStairs(int n) {
if (n < 1) {
System.out.println("n要大於0");
}
for (int i = 0; i < n; i++) { // 第一層迴圈負責印斷行(\n)
for (int j = 0; j <= i; j++) { // 第二層迴圈負責印星號(*)
System.out.print("*");
}
System.out.print("\n");
}
}
重點在第二層迴圈。
當第一層迴圈i=0時,第二層的迴圈次數上限為i,也就是0,所以第二層迴圈的j從0開始會跑1次,也就是印出1個星號。
當第一層迴圈i=1時,第二層的迴圈次數上限為i,也就是1,所以第二層迴圈的j從0開始會跑2次,也就是印出2個星號。
當第一層迴圈i=2時,第二層的迴圈次數上限為i,也就是2,所以第二層迴圈的j從0開始會跑3次,也就是印出3個星號。
了解以上規則以後就可以依照傳入的數印出對應的階梯了。
下面是印出一個箭頭,例如傳入的數為5印出的箭頭如下
*
**
***
****
*****
****
***
**
*
其實只是多印了下半邊的部分。
public static void main(String[] args) throws InterruptedException {
printArrowHead(5);
}
public static void printArrowHead(int n) {
if (n < 1) {
System.out.println("n要大於0");
}
for (int i = 0; i < n; i++) { // 第一層迴圈負責印斷行(\n)
for (int j = 0; j <= i; j++) { // 第二層迴圈負責印星號(*)
System.out.print("*");
}
System.out.print("\n");
}
for (int i = 1; i < n; i++) { // 第一層迴圈負責印斷行(\n)
for (int j = (n - i); j > 0; j--) { // 第二層迴圈負責印星號(*)
System.out.print("*");
}
System.out.print("\n");
}
}
下面也是印出一個箭頭,但可以決定每階星號的公差,如傳入的數為2, 5印出的箭頭如下
*
***
*****
*******
*********
*******
*****
***
*
public static void main(String[] args) {
printArrow(2, 5);
}
public static void printArrow(int d, int n) {
if (n < 1) {
System.out.println("要大於0");
}
for (int i = 0; i < n; i++) { // 第一層迴圈負責印斷行(\n)
for (int j = 0; j <= i; j++) { // 第二層迴圈負責印星號(*)
if (j == 0) {
System.out.print("*");
} else if (j > 0) {
for (int k = 0; k < d; k++) {
System.out.print("*");
}
}
}
System.out.print("\n");
}
for (int i = 1; i < n; i++) { // 第一層迴圈負責印斷行(\n)
for (int j = (n - i); j > 0; j--) { // 第二層迴圈負責印星號(*)
if (j > 1) {
for (int k = 0; k < d; k++) {
System.out.print("*");
}
} else if (j == 1) {
System.out.print("*");
}
}
System.out.print("\n");
}
}
下面是難一點的題型,也就是印出反向的階梯,例如傳入的數為5印出的階梯如下
*
**
***
****
*****
仔細觀察可知,星號前面要填入空白,所以多了印出空白的程序。而空白的數量剛好是傳入數值-1並以公差為1遞減。
public static void main(String[] args) {
printStairs(5);
}
public static void printStairs(int n){
if(n < 1){
System.out.println("n要大於0");
}
for(int i = 0; i < n ; i++) { // 第一層迴圈負責印斷行(\n)
for(int k = (n-1); k > i; k--) { // 第二層迴圈負責印空白( )
System.out.print(" ");
}
for(int j = 0; j <= i; j++) { // 第二層迴圈負責印星號(*)
System.out.print("*");
}
System.out.print("\n");
}
}
上面範例只在第一個範例中加了印出空白這個迴圈程序。
當第一層迴圈i=0時,第二層印空白的迴圈次數下限為i,也就是0,所以第二層迴圈的k從(n-1)開始遞減到0會跑n-1次,也就是印出n-1個空白。
當第一層迴圈i=1時,第二層印空白的迴圈次數上限為i,也就是1,所以第二層迴圈的k從(n-1)開始遞減到1會跑n-2次,也就是印出n-2個空白。
當第一層迴圈i=2時,第二層印空白的迴圈次數上限為i,也就是2,所以第二層迴圈的k從(n-1)開始遞減到2會跑n-3次,也就是印出n-3個空白。
以此類推,印出空白後接著印出星號。
下面是再進階一點的題型,印出金字塔,例如傳入的數為5印出如下
*
***
*****
*******
*********
其實基本上與第二個範例一樣,差別在於星號印出的數量是以公差2為來遞增,例如第一層1個星號,第二層3個星號,第三層5個星號。至於空白的遞減方式仍然不變。
public static void main(String[] args) {
printPyramid(5);
}
public static void printPyramid(int n){
if(n < 1) {
System.out.println("n要大於0");
}
int x = 0;
for(int i = 0; i < n ; i++) { // 第一層迴圈負責印斷行(\n)
for(int k = (n-1); k > i; k--) { // 第二層迴圈負責印空白( )
System.out.print(" ");
}
for(int j = 0; j <= x; j++) { // 第二層迴圈負責印星號(*)
System.out.print("*");
}
System.out.print("\n");
x+=2;
}
}
在印星號的迴圈上限不是每次以1遞增,而是要以2遞增,所以要改以遞增2的x來達成。
留言有人問怎麼用for迴圈在jsp畫出九宮格,其實jsp是Java後端渲染出來的畫面,能直接在jsp裡寫Java程式,又稱為Scriptlet。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<!-- JSP Scriptlet -->
<%
for(int i = 0; i < 3; i++) {
out.println("<div style=\"height:52px;\">");
for (int j = 0; j < 3; j++) {
%>
<div style="border:solid 1px; width:50px; height:50px; float:left"></div>
<%
}
out.println("</div>");
}
%>
</body>
</html>
顯示結果如下。
如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。
你好 我想請問一下
回覆刪除我想用scanner print出箭頭
例如我打:
1
5
5
1
會print出
*
**
***
****
*****
****
***
**
*
這樣要如何打
@Justin
回覆刪除不太懂您的問題,您的意思是說你的輸入參數是1,5,5,1,而印出一個箭頭是嗎? 如果是的話我不太清楚1,5,5,1與箭頭間有什麼關係,這邊要請您說明清楚一點。
1 是 公差 ,5是加到5
刪除@Justin 是這樣嗎?
回覆刪除public static void pringArrow(int d, int n) {
if (n < 1) {
System.out.println("要大於0");
}
for (int i = 0; i < n; i++) { // 第一層迴圈負責印斷行(\n)
for (int j = 0; j <= i; j++) { // 第二層迴圈負責印星號(*)
if (j == 0) {
System.out.print("*");
} else if (j > 0) {
for (int k = 0; k < d; k++) {
System.out.print("*");
}
}
}
System.out.print("\n");
}
for (int i = 1; i < n; i++) { // 第一層迴圈負責印斷行(\n)
for (int j = (n - i); j > 0; j--) { // 第二層迴圈負責印星號(*)
if (j > 0) {
for (int k = 0; k < d; k++) {
System.out.print("*");
}
} else if (j == 1) {
System.out.print("*");
}
}
System.out.print("\n");
}
}
你好 我先處理上半部
回覆刪除public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int d;
int n;
d=scanner.nextInt();
n=scanner.nextInt();
printArrow(d,n);
}
public static void printArrow(int d, int n) {
if (n < 1) {
System.out.println("要大於0");
}
for (int i = 0; i < n; i++) { // 第一層迴圈負責印斷行(\n)
for (int j = 0; j <= i; j++) { // 第二層迴圈負責印星號(*)
if (j == 0) {
System.out.print("*");
System.out.print("*");
} else if (j > 0) {
for (int k = 0; k < d; k++) {
}
}
}
System.out.print("\n");
}
}
}
會 print出
回覆刪除2
9
**
**
**
**
**
**
**
**
**
怎麼撰寫一個 JSP 程式,使用 for 迴圈,顯示一個九宮格
回覆刪除您好
回覆刪除如要要印出一個反向箭頭要怎麼用呢