亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Java 創建用戶輸入星號三角形

使用 Java 創建用戶輸入星號三角形

料青山看我應如是 2022-07-06 17:01:31
我想要...使用 Java創建一個星號三角形,它與用戶輸入的任何數字(1-50 之間)的長度相匹配。細節第一行總是以星號開頭。下一行將增加一個星號,直到它與用戶的輸入相匹配。然后以下行將遞減,直到它回到一個星號。例如,如果用戶輸入 3,則輸出將在第一行有一個星號,在第二行有兩個星號,在第三行有三個星號,然后在結束前恢復為下一行的兩個星號最后一行帶有星號。到目前為止我嘗試過的我需要使用嵌套的 for 循環。到目前為止,我嘗試使用我在下面制作的這個練習示例對其進行測試。我只能在數字的輸出上創建。我也有一些輸出星號三角形的概念。如何應用此代碼的概念來跟隨用戶輸入的數字? import java.util.Scanner;public class Program{    public static void main(String[] args) {        Scanner keyboard = new Scanner(System.in);        int count, index = 0, value, number;        System.out.println("This program creates a pattern of numbers " );        System.out.println("Based on a number you enter." );            System.out.println("Please enter a positive integer. " );        count = keyboard.nextInt();        value = count;        for (index = 1; index <= count; index++)        {            for (number = value; number >= 1; number--)            {                System.out.println(number);            }            value--;            System.out.println();        }        }}
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

這是我將如何進行

  1. 編寫一個printAsterisks將 int N 作為參數并寫入一行 N 個星號的方法。您將需要一個for循環來執行此操作。

  2. printAsterisks在從 1 計數到 COUNT的for循環中調用

  3. 調用printAsterisks從 COUNT-1 倒數到 1 的第二個循環

這應該夠了吧。

另外,作為旁注,您應該關閉掃描儀。這樣做的簡單方法是將 ot 包含在 try-with-resource 中,如下所示:

try (Scanner keyboard = new Scanner(System.in);) {

 // your code here

}

讓我們知道可以運行的程序版本(或您仍然有的問題):)


查看完整回答
反對 回復 2022-07-06
?
牛魔王的故事

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().


查看完整回答
反對 回復 2022-07-06
?
Cats萌萌

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在單行示例中將其替換。


查看完整回答
反對 回復 2022-07-06
  • 3 回答
  • 0 關注
  • 230 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號