[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();
	}

좋은 웹페이지 즐겨찾기