(共通部分)
package test;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num2 = scan.nextInt();
String square = "■";
// コード
}
}
スクショは、全て入力値が9の場合です。
パターン1
// 1から開始して、入力された数になるまでインクリメントする
// ※lineは現在の行数であると同時に、■の描画数を表す
for(int line = 1; line <= num2; line++ ){
// 1から開始して、この行の描画数以下の間は繰り返す
for(int idxOfMarks = 1; idxOfMarks <= line; idxOfMarks++){
System.out.print(square);
}
// 次の行に行くために改行する
System.out.println("");
}
簡潔に書くなら以下。
StringBuilder sb = new StringBuilder();
for (int line = 0; line < num2; line++) {
System.out.println(sb.append(square));
}
パターン2
// 入力された数値から開始して、その数が1になるまでデクリメントする
// ※idxは現在の行数であると同時に、■の描画数を表す
for(int line = num2; line >= 1 ; line--){
for(int idxOfMarks = line; idxOfMarks >= 1; idxOfMarks--){
System.out.print(square);
}
System.out.println("");
}
パターン3
String batsu = "×";
for(int line = 1; line <= num2; line++ ){
// 1から開始して、この行の描画数以下の間は繰り返す
for(int idxOfMarks = 1; idxOfMarks <= line; idxOfMarks++){
if(idxOfMarks % 2 !=0){
System.out.print(square);
}else{
System.out.print(batsu);
}
}
System.out.println("");
}
パターン4
for(int line = 1; line <= num2; line++){
for(int idxOfMarks = 1; idxOfMarks <= line; idxOfMarks++){
// 行が奇数である場合
if(line % 2 != 0){
// 奇数個目の印になる場合
if(idxOfMarks % 2 != 0){
System.out.print(square);
// 偶数個目の印になる場合
}else{
System.out.print(batsu);
}
// 行が偶数である場合
}else{
// 奇数個目の印になる場合
if(idxOfMarks % 2 == 0){
System.out.print(square);
// 偶数個目の印になる場合
}else{
System.out.print(batsu);
}
}
}
System.out.println("");
}
パターン5
for(int line = num2; line >=1; line--){
// 空白表示数は、入力数-現在の行で求める
int empty = num2 - line;
// まず空白分を出力する
for(int n=1 ;n <=empty; n++){
System.out.print(" ");
}
// その後、印を出力する
for(int idxOfMarks = line; idxOfMarks >= 1 ; idxOfMarks--){
System.out.print(square);
}
System.out.println("");
}
パターン6
for(int line = 1 ; line<= num2 ; line++){
System.out.print(square);
}
System.out.println("");
int emptyLines = num2 - 2;
for(int line2 = 1; line2 <= emptyLines; line2++){
for (int index2 = 1 ; index2 <= num2; index2++){
if(index2 == 1 || index2 == num2){
System.out.print(square);
}else{
System.out.print(" ");
}
}
System.out.println("");
}
for(int line = 1 ; line<= num2 ; line++){
System.out.print(square);
}
パターン7
for(int idx = 1; idx <= num2; idx++){
for(int i = 1; i <= num2-idx; i++){
System.out.print(" ");
}
for(int idxOfMarks = 1; idxOfMarks <= idx*2-1; idxOfMarks++){
System.out.print(square);
}
for(int i = 1; i <= num2-idx; i++){
System.out.print(" ");
}
System.out.println();
}
パターン8
StringBuilder sb3 = new StringBuilder();
for (int line = 0; line < num2; line++) {
System.out.println(sb3.append(square));
}
for (int line = 0; line < num2; ++line){
System.out.println(sb3.deleteCharAt(0));
}
パターン9
for(int line = 1 ; line <= num2; line++){
for(int idxOfNum=1; idxOfNum<=line; idxOfNum++){
if(line == 1 || line == 2 || line == num2){
System.out.print("●");
}else{
if(idxOfNum == 1 || idxOfNum == line){
System.out.print("●");
}else{
System.out.print("○");
}
}
}
System.out.println();
}
パターン10
// 行が1増えると、左の●の位置が+1、右の●の位置が-1となる。
int idxOfBlack1 = 1;
int idxOfBlack2 = num2;
for(int line = 1 ; line <= num2; line++){
for(int idxOfNum = 1; idxOfNum<=num2; idxOfNum++){
if(idxOfNum == idxOfBlack1 | idxOfNum == idxOfBlack2){
System.out.print("●");
}else{
System.out.print("○");
}
}
idxOfBlack1++;
idxOfBlack2--;
System.out.println();
}
(きれいな書き方がありましたらご教授頂けると幸いです。)