[TIL]制御文作成時の注意点、例



  • コード分析を容易にするために、カッコをできるだけ少なくします.

  • コードを解釈するときは誤解しないでください.

  • forのフレームワークを破るな.

  • コードの可読性を重視する.

  • 条件文に触れないでください.

  • 関数をツールとして使用します.
  • 	for(int y = 0; y<11; y++) {
    		for(int x = 0; x<11; x++) 
    			if(y==x || y==-x+10)
    				System.out.print("*");
    			else
    				System.out.print(" ");
    		
    	System.out.println();
    	}
        
  • に書かれたコードのように、for文では触れずに、他の条件を使用して結果をエクスポートします.
  • 関数を使用して結果予測を簡略化します.
  • 例1。個数

    
    	public static void main(String[] args) throws IOException {
        
    		//res/data.txt에 담겨진 성적의 개수를 알아보고
            
    		// 그 개수를 res/data-count.txt 파일에 저장하시오.
    		
    		File dataFile = new File("res/data.txt");
    		FileInputStream dataFis = new FileInputStream(dataFile);
    		Scanner fscan = new Scanner(dataFis);
    		
    		File countFile = new File("res/data-count.txt");
    		FileOutputStream countFos = new FileOutputStream(countFile);
    		PrintStream fout = new PrintStream(countFos);
    
    		int count = 0;
    		
    		while(fscan.hasNext()){
    			fscan.next();
    
    			count++;
    		}
    		
    		// count is 120 처럼 저장할 것
    
    		fout.printf("count is %d\n", count);
    		
    		fscan.close();
    		fout.close();		
    		dataFis.close();
    		countFos.close();
    		
    		System.out.println("프로그램 종료");
  • 入力バッファと出力バッファコードの位置を変更して、リソース消費を削減します.
  • 例2。最大値

    public class Program {
    
    	public static void main(String[] args) throws IOException {
    	
    	File dataFile = new File("res/data.txt");
    	FileInputStream dataFis = new FileInputStream(dataFile);
    	Scanner fscan = new Scanner(dataFis);
        
        
    	// --- count를 계산하기 -----
        
    	int max = 0;
    
    	while(fscan.hasNext()) {
    	
    		String x_ = scan.next();	
        	int x = Integer.parseInt(x_);
            
            
    		if(x>max)
    			max = x;
    
    	}
    	
    	fscan.close();
    	dataFis.close();
    	
    	// ---count를 출력하기 -------
    	
    	File countFile = new File("res/data-max.txt");
    	FileOutputStream countFos = new FileOutputStream(countFile);
    	PrintStream fout = new PrintStream(countFos);
    
    	fout.printf("max is %d", max);
    	
    	fout.close();
    	countFos.close();
       
  • int score = scan.nextInt()を使用すると、数値以外の値が中間に含まれている場合にエラーが発生する可能性があります.
  • 例3。へいきん

    
    		public static void main(String[] args) throws IOException {
    		
    		File dataFile = new File("res/data.txt");
    		FileInputStream dataFis = new FileInputStream(dataFile);
    		Scanner fscan = new Scanner(dataFis);
    		
            int sum = 0;
    		int count = 0;
    		float avg ;
    				
    		//---연산하기------
            
    		while(fscan.hasNext()) {
    		
    			String x_ = scan.next();	
            	int x = Integer.parseInt(x_);
    		
    			sum += x ;
    			count ++;
    	
    		}
    		avg = (float)sum/count;
    		
    		
    		fscan.close();
    		dataFis.close();
    		
    		//---출력하기----------
            
    		File countFile = new File("res/data-avg.txt");
    		FileOutputStream countFos = new FileOutputStream(countFile);
    		PrintStream fout = new PrintStream(countFos);
    		
    		fout.printf("avg is %f", avg);
    		
    		fout.close();
    		countFos.close();
    		
  • max、avgロジックをループに組み合わせることで、パフォーマンスを節約できます.
  • max、avgロジックは可読性がよく、コードメンテナンスに有利である.
  • 例4.「*」エプロン


    	for (int y = 0; y < 10; y++) {
    		for (int x = 0; x < 11; x++) {
    			if (y == -x+10 || y == x || (y>=-x+10 && y >= x))
    				System.out.print("*");
    			else
    				System.out.print(" ");
    
    		}
    		System.out.println();
    	}