[英]Printing a triangle in Java
我正在練習基本的編碼練習並嘗試在Java中打印以下三角形:
*
***
*****
***
*
以下代碼給出了結果,但我覺得必須有一個更優雅的解決方案
for (int i = 1; i <= 5; i++) {
if (i % 2 == 1) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println("");
}
}
for (int i = 3; i > 0; i--) {
if (i % 2 == 1) {
for (int j = 1; j < i + 1; j++) {
System.out.print("*");
}
System.out.println("");
}
}
任何人都可以提供一些有關如何以更好的方式使這項工作的見解?
好的,這里有一些代碼可以生成只使用兩個for循環的正確結果,但它看起來更加丑陋:
for (int i = 1; i <= 10; i += 2) {
if (i <= 5) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println("");
}
else if(i > 5 && i < 8){
for(int j = i/2; j > 0; j--){
System.out.print("*");
}
System.out.println("");
}
else{
for(int j = 1; j > 0; j--){
System.out.print("*");
}
System.out.println("");
}
}
首先,您正在跳過循環的每個第二次迭代,因為您希望一次增加兩個步驟。 您可以通過將循環中的“i ++”更改為“i + = 2”並將“i--”更改為“i - = 2”來實現此目的,這將具有相同的效果並允許您刪除兩個循環中的if 。
另一個改進是使用單個外環並確定內環是應該增加還是減少星號的數量。 也許你可以想出一個方程式,根據i的值給出你的星號數量? (我不想完全解決它,所以你還有一些練習,如果你想要一個完整的解決方案,請發表評論)
更新了一個可能被認為是優雅的解決方案,因為您可以更改三角形的高度,並且沒有重復:
int height = 5;
for (int i = 1; i <= 2 * height; i += 2) {
int numAsterisks;
if (i <= height) {
numAsterisks = i;
} else {
numAsterisks = 2 * height - i;
}
for (int j = 0; j < numAsterisks; j++) {
System.out.print("*");
}
System.out.println();
}
以下怎么樣?
public void printTriangle(int size) {
int half = size / 2;
for (int i = 0; i < size; i++) {
int stars = 1 + 2 * (i <= half ? i : size - 1 - i);
char[] a = new char[stars];
Arrays.fill(a, '*');
System.out.println(new String(a));
}
}
或者只是稍微優化一下:
public void printTriangle(int size) {
int half = size / 2;
char[] a = new char[size];
Arrays.fill(a, '*');
for (int i = 0; i < size; i++) {
int stars = 1 + 2 * (i <= half ? i : size - 1 - i);
System.out.println(new String(a, 0, stars));
}
}
for(int i = 0; i < 7; i++) {
for(int j = 0; j < i; j++) {
print("*");
}
print("\n");
}
這可以是打印常規直角三角形的另一種解決方案......
這是查看問題的另一種方式。 通過使用整數數組,我可以通過更改數組中的值來解決許多形狀繪制問題。
解決更難的問題時,可以使用模型類而不是簡單的整數。 然而,這個想法是一樣的。
這是輸出。
*
***
*****
***
*
這是代碼:
public class Triangle {
public static void main(String[] args) {
int[] heights = {1, 3, 5, 3, 1};
for (int i = 0; i < heights.length; i++) {
for (int j = 0; j < heights[i]; j++) {
System.out.print("*");
}
System.out.println("");
}
}
}
怎么樣...
int width = 5;
for (int i = 1; i <= width; i+=2){
System.out.println(String.format("%"+i+"s", "").replaceAll(" ", "*"));
}
for (int i = width-2; i > 0; i-=2){
System.out.println(String.format("%"+i+"s", "").replaceAll(" ", "*"));
}
或者,甚至更好......
int width = 7;
double half = width / 2
for (int i = 0; i < width; i++){
System.out.println(String.format("%"+((i < half ? i : (width-i-1))*2+1)+"s", "").replaceAll(" ", "*"));
}
給
*
***
*****
***
*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.