3 回答

TA貢獻1862條經驗 獲得超7個贊
這是我將如何進行
編寫一個
printAsterisks
將 int N 作為參數并寫入一行 N 個星號的方法。您將需要一個for
循環來執行此操作。printAsterisks
在從 1 計數到 COUNT的for
循環中調用調用
printAsterisks
從 COUNT-1 倒數到 1 的第二個循環
這應該夠了吧。
另外,作為旁注,您應該關閉掃描儀。這樣做的簡單方法是將 ot 包含在 try-with-resource 中,如下所示:
try (Scanner keyboard = new Scanner(System.in);) {
// your code here
}
讓我們知道可以運行的程序版本(或您仍然有的問題):)

TA貢獻1830條經驗 獲得超3個贊
這是你想要的:
public class Asterisk {
private static final String ASTERISK = "*";
private static final String SPACE = "";
private static int LENGTH;
public static void main(String[] args) {
try{
readLength();
for (int i=1; i<=LENGTH; i++) {
if (i == LENGTH) {
for (int j=LENGTH; j>=1; j--) {
drawLine(j);
}
break;
}
drawLine(i);
}
}catch (Exception e) {
System.out.println("You must enter a number between 1 and 50.");
}
}
static void readLength(){
System.out.println("Enter asterisk's length (1-50)");
LENGTH = Integer.parseInt(System.console().readLine());
if (LENGTH<=0 || LENGTH>50)
throw new NumberFormatException();
}
static void drawLine(int asterisks){
StringBuilder line = new StringBuilder();
int spacesLeft = getLeftSpaceCount(asterisks);
int spacesRight = getRightSpaceCount(asterisks);
for (int i=0; i<spacesLeft; i++) {
line.append(SPACE);
}
for (int i=0; i<asterisks; i++) {
line.append(ASTERISK);
}
for (int i=0; i<spacesRight; i++) {
line.append(SPACE);
}
System.out.println(line.toString()+"\n");
}
static int getLeftSpaceCount(int asterisks){
int spaces = LENGTH - asterisks;
int mod = spaces%2;
return spaces/2 + mod;
}
static int getRightSpaceCount(int asterisks){
int spaces = LENGTH - asterisks;
return spaces/2;
}
}
我需要使用嵌套的 for 循環
是的,主要邏輯就在那里……
for (int i=1; i<=LENGTH; i++) {
if (i == LENGTH) {
for (int j=LENGTH; j>=1; j--) {
drawLine(j);
}
break;
}
drawLine(i);
}
使用 5 作為輸入的三角形。
*
**
***
****
*****
****
***
**
*
小費:
有一種更簡單的方法可以使用System.console().readLine().

TA貢獻1805條經驗 獲得超9個贊
關于打印部分,我想稍微整理一下答案:
int input = 3; //just an example, you can hook in user input I'm sure!
for (int i = 1; i < (input * 2); i++) {
int amount = i > input ? i / 2 : i;
for (int a = 0; a < amount; a++)
System.out.print("*");
}
System.out.println();
}
對于我們的循環條件,稍微解釋一下:
i < (input * 2): 因為i從 1 開始,我們可以考慮一些情況。如果我們輸入 1,我們需要 1 行。輸入 2、3 行。4:5行。簡而言之,長度與行數的關系是row count = (length * 2) - 1,所以我從 1 而不是 0 開始另外偏移 1。
i > input ? i / 2 : i:這稱為三元語句,它基本上是一個 if 語句,您可以在其中獲取表單中的值boolean/if ? value_if_true : value_if_false。因此,如果行數大于您請求的長度(超過一半),則長度除以 2。
此外,該循環中的所有內容都可能是一行:
System.out.println(new String(new char[i > input ? i / 2 : i]).replace('\0', '*'));
是的,從技術上講,使用 IntStream 我們可以將整個事情變成一條線,盡管那時我會為了清楚起見而換行
請記住,我不會將其稱為“初學者的解決方案”,但希望它可以激發您學習有關編程的其他一些有用的小知識,例如為什么我\0在單行示例中將其替換。
添加回答
舉報