יצירת משולש עם לולאות בג'אווה

1. הקדמה

במדריך זה נבדוק מספר דרכים להדפיס משולש בג'אווה.

ישנם, באופן טבעי, סוגים רבים של משולשים. פה, אנחנו הולכים לחקור רק כמה מהם: משולשים נכונים ושווים.

2. בניית משולש ימני

המשולש הנכון הוא הסוג הפשוט ביותר של המשולש שנלמד. בואו נסתכל במהירות על הפלט שאנו רוצים להשיג:

* ** *** **** *****

כאן, אנו מבחינים כי המשולש עשוי מחמש שורות, שלכל אחת מספר כוכבים השווה למספר השורה הנוכחי. כמובן שניתן להכליל תצפית זו: עבור כל שורה מ -1 עד נ, אנחנו חייבים להדפיס ר כוכבים, איפה ר היא השורה הנוכחית ו נ הוא המספר הכולל של השורות.

אז בואו נבנה את המשולש בעזרת שניים ל לולאות:

מחרוזת סטטית ציבורית printARightTriangle (int N) {StringBuilder result = StringBuilder new (); עבור (int r = 1; r <= N; r ++) {for (int j = 1; j <= r; j ++) {result.append ("*"); } result.append (System.lineSeparator ()); } להחזיר result.toString (); }

3. בניית משולש שווה שוקיים

עכשיו, בואו נסתכל על הצורה של משולש שווה שוקיים:

 * *** ***** ******* *********

מה אנו רואים במקרה זה? אנו שמים לב לכך, בנוסף לכוכבים, עלינו גם להדפיס רווחים לכל שורה. אז עלינו להבין כמה רווחים וכוכבים יש לנו להדפיס עבור כל שורה. כמובן שמספר החללים והכוכבים תלוי בשורה הנוכחית.

ראשית אנו רואים כי עלינו להדפיס 4 רווחים עבור השורה הראשונה וכאשר אנו יורדים למשולש אנו זקוקים ל -3 רווחים, 2 רווחים, רווח אחד וללא רווחים כלל בשורה האחרונה. הכללה, עלינו להדפיס N - r רווחים לכל שורה.

שנית, בהשוואה לדוגמא הראשונה, אנו מבינים שכאן אנו זקוקים למספר אי זוגי של כוכבים: 1, 3, 5, 7 ...

כך, אנחנו צריכים להדפיס r x 2 - 1 כוכבים לכל שורה.

3.1. באמצעות מקונן ל לולאות

בהתבסס על התצפיות שלעיל, בואו ניצור את הדוגמה השנייה שלנו:

מחרוזת סטטית ציבורית printAnIsoscelesTriangle (int N) {StringBuilder result = new StringBuilder (); עבור (int r = 1; r <= N; r ++) {for (int sp = 1; sp <= N - r; sp ++) {result.append (""); } עבור (int c = 1; c <= (r * 2) - 1; c ++) {result.append ("*"); } result.append (System.lineSeparator ()); } להחזיר result.toString (); }

3.2. באמצעות סינגל ל לוּלָאָה

למעשה, יש לנו דרך אחרת מורכב רק מסינגל ל לולאה - היא משתמשת בספריית Apache Commons Lang 3.

אנו נשתמש בלולאה for לחזור על שורות המשולש כפי שעשינו בדוגמאות הקודמות. ואז נשתמש ב- StringUtils.repeat () שיטה על מנת ליצור את התווים הדרושים לכל שורה:

מחרוזת סטטית ציבורית printAnIsoscelesTriangleUsingStringUtils (int N) {StringBuilder result = new StringBuilder (); עבור (int r = 1; r <= N; r ++) {result.append (StringUtils.repeat ('', N - r)); result.append (StringUtils.repeat ('*', 2 * r - 1)); result.append (System.lineSeparator ()); } להחזיר result.toString (); }

לחלופין, אנו יכולים לעשות טריק מסודר עם ה תשתית () שיטה.

אנחנו יכולים לחלץ את StringUtils.repeat () שיטות לעיל כדי לבנות מחרוזת עוזר ואז להחיל את String.substring () שיטה עליו. מחרוזת העוזר היא שרשור של מספר המרווחים המרבי ומספר הכוכבים המרבי הדרוש לנו כדי להדפיס את שורות המשולש.

בהתבוננות בדוגמאות הקודמות, אנו מבחינים כי אנו זקוקים למספר מקסימלי של N - 1 רווחים לשורה הראשונה ומספר מרבי של N x 2 - 1 כוכבים לשורה האחרונה:

String helperString = StringUtils.repeat ('', N - 1) + StringUtils.repeat ('*', N * 2 - 1); // עבור N = 10, helperString = "*********"

למשל מתי N = 5 ו r = 3, עלינו להדפיס "*****", הכלול ב- helperString מִשְׁתַנֶה. כל שעלינו לעשות הוא למצוא את הנוסחה המתאימה ל- תשתית () שיטה.

עכשיו, בואו נראה את הדוגמה המלאה:

מחרוזת סטטית ציבורית printAnIsoscelesTriangleUsingSubstring (int N) {StringBuilder result = StringBuilder new (); String helperString = StringUtils.repeat ('', N - 1) + StringUtils.repeat ('*', N * 2 - 1); עבור (int r = 0; r <N; r ++) {result.append (helperString.substring (r, N + 2 * r)); result.append (System.lineSeparator ()); } להחזיר result.toString (); }

באופן דומה, עם קצת יותר עבודה, נוכל להפוך את המשולש להדפיס הפוך.

4. מורכבות

אם נסתכל שוב על הדוגמה הראשונה, נבחין בלולאה חיצונית ולולאה פנימית שלכל אחת מהן מקסימום נ צעדים. לכן, יש לנו O (N ^ 2) מורכבות זמן, היכן נ הוא מספר השורות של המשולש.

הדוגמה השנייה דומה - ההבדל היחיד הוא שיש לנו שתי לולאות פנימיות, שהן רצופות ולא מגדילות את מורכבות הזמן.

הדוגמה השלישית, לעומת זאת, משתמשת רק ב- ל לולאה עם נ צעדים. אבל, בכל שלב, אנו קוראים ל - StringUtils.repeat () שיטה או תשתית () שיטה על מחרוזת העוזר, כל אחת מהן עַל) מוּרכָּבוּת. לכן, מורכבות הזמן הכוללת נשארת זהה.

לבסוף, אם אנחנו מדברים על מרחב העזר, נוכל להבין במהירות שלכל הדוגמאות, המורכבות נשארת בתוך StringBuilder מִשְׁתַנֶה. על ידי הוספת המשולש כולו ל- תוֹצָאָה משתנה, אנחנו לא יכולים לקבל פחות מ- O (N ^ 2) מוּרכָּבוּת.

כמובן שאם נדפיס את הדמויות ישירות, תהיה לנו מורכבות שטח מתמדת לשתי הדוגמאות הראשונות. אבל, הדוגמה השלישית משתמשת במחרוזת העוזרת ומורכבות החלל תהיה עַל).

5. מסקנה

במדריך זה למדנו כיצד להדפיס שני סוגים נפוצים של משולשים ב- Java.

ראשון, למדנו את המשולש הנכון, שהוא סוג המשולש הפשוט ביותר שנוכל להדפיס ב- Java. לאחר מכן, בדקנו שתי דרכים לבנות משולש שווה שוקיים. הראשון משתמש רק ל לולאות והשני מנצל את StringUtils.repeat () וה String.substring () שיטה ועוזר לנו לכתוב פחות קוד.

לבסוף ניתחנו את מורכבות הזמן והמרחב עבור כל דוגמה.

כמו תמיד, ניתן למצוא את כל הדוגמאות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found