2
2

More than 3 years have passed since last update.

研修でよく出てきそうな●とか■で図形描画10連発(Java)

Last updated at Posted at 2020-01-25

(共通部分)


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

image.png

// 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

image.png

// 入力された数値から開始して、その数が1になるまでデクリメントする               
// ※idxは現在の行数であると同時に、■の描画数を表す             
for(int line = num2; line >= 1 ; line--){               
    for(int idxOfMarks = line; idxOfMarks >= 1; idxOfMarks--){          
        System.out.print(square);       
    }           
    System.out.println("");         
}               

パターン3

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

    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

image.png

    // 行が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();               
    }                   

(きれいな書き方がありましたらご教授頂けると幸いです。)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2