본문 바로가기
국비지원/JAVA

[JAVA] 6. 중첩반복문(for)과 향상된 for loop

by cosmog 2022. 9. 27.
반응형

5-2. 반복문 마지막에 중첩반복문에 대해서 공부하였다.

오늘도 이어서 중첩반복문에 대해서 알아보았다.

중첩반복문

➰Quiz - 구구단을 3단씩 끊어서 출력하기

public class Quiz15 {
	public static void main(String[] args) {

		//힌트 -> 출력은 가로 or 세로로만 가능합니다.
		//정렬은 \t 8칸 띄어쓰기

		//한줄을 한번에 출력. 
		for(int i = 1; i <= 9; i+=3) {
			for(int j = 1; j <= 9; j++) {
				System.out.printf("%d X %d = %d\t", i, j, i*j);
				System.out.printf("%d X %d = %d\t", i+1, j, (i+1)*j);
				System.out.printf("%d X %d = %d\n", i+2, j, (i+2)*j);
			}
			System.out.println();
		}
		
		
	}
}

-> 어렵다고 생각했는데 막상 답을 보니 별거 아니었다.

-> 출력을 한줄만으로 사용하여 멋지게 만들고 싶었는데 나의 욕심이었나보다.

 

➰Quiz - 가로/세로 입력받아 박스만들기

import java.util.Scanner;

public class Quiz16 {
	
	public static void main(String[] args) {
		
		/*
		 * 정수형태로 입력을 2개 받는다.
		 * 첫번째 - 가로길이, 두번째 - 세로길이.
		 * 
		 * 입력받은 가로 세로 길이의 사각형을 출력하면됨.
		 * 단, 윤곽만 출력.
		 * 
		 * 힌트 -> 1행, 마지막행, 1열, 마지막열만 출력
		 * 공백도 문자.
		 */
		
		Scanner scan = new Scanner(System.in);
		
		System.out.print("가로>");
		int width = scan.nextInt();
		System.out.print("세로>");
		int height = scan.nextInt();
		
		for(int i = 1; i <= height; i++) {//세로(행)
			if( i == 1 || i == height) {//처음과 끝세로열만 모두 출력.
				for(int j = 1; j <= width; j++) {//가로(열)
					System.out.print("*");
				}
			}
			else { //중간열들..
				System.out.print("*");
				for(int space=1; space <= width-2; space++) { //가로 개수에서 -2한만큼 공백 출력
					System.out.print(" ");
				}
				System.out.print("*");
			}
			System.out.println();
		}		
		scan.close();
	}

}

나는 위에 처럼 코드를 구성해보았는데 

아래와 같이 더 간단하게 만들 수 있었다.

		for(int i = 1; i <= height; i++) {
			for(int j = 1; j <= width; j++) {
				if(i == 1 || i == height || j == 1 || j == width) {
					System.out.print("*");
				} else {
					System.out.print(" ");
				}
			}
			System.out.println();
		}

➰중첩반복문 - 피라미드 별 찍기

public class MultiForEx02 {

	public static void main(String[] args) {

		//회전할때마다 횟수가 변하는 중첩반복문
		/*
		 *     *   
		 *    ***
		 *   ******
		 *  ********
		 * **********
		 */

		int star = 5;//변수를 쓰는 이유 중 하나.
		//변수 값만 바꾸면 규칙에 맞게 출력값이 한번에 변함.

		for(int i = 1; i <= star; i++) {

			//공백
			for(int k = 1; k <= star-i; k++) {
				System.out.print(" ");
			}

			//별
			for(int j = 1; j <= i*2-1; j++) {
				//1일때 2바퀴,2일때 4바퀴 이런식으로 조건이 달라지는 반복문에 초점을 둔다.
				System.out.print("*");
			}

			System.out.println();
		}

		/*
		 * 뒤집은 피라미드.
		 * ex) 5열
		 * i - 공백j - 별j
		 * 1 -  0   -  9
		 * 2 -  1   -  7
		 * 3 -  2   -  5
		 * 4 -  3   -  3
		 * 5 -  4   -  1
		 *
		 * 규칙이 뭘까? 
		 * (열-i)*2+1
		 * 
		 */
		
		System.out.println("---------------");
		for(int i = 1; i <= star; i++) {//star(열)만큼 for문

			for(int k = 1; k < i; k++) { // 공백찍기. 2번째 줄부터 공백나오도록..
			//for(int k = 1; k <= i-1; K++) 강사님의 코드
				System.out.print(" ");
			}

			for (int j = 1; j <= 2*(star-i)+1; j++)//(열-i)*2+1 조건으로 계속 한개씩 별찍기.
			{
				System.out.print("*");
			}
			System.out.println();
		}



	}

}

💡 i가 1일때 2바퀴,2일때 4바퀴 이런식으로 조건이 달라지는 반복문에 초점을 둔다.
💡변수로 star값을 입력하면 star값만 변경하면 규칙에 맞게 출력값이 변한다.
= 변수를 쓰는 이유 중 한다.

 

➰입력받은 수까지의 소수를 출력.

import java.util.Scanner;

public class MultiForEx03 {

	public static void main(String[] args) {

		//입력받은 수까지 소수를 출력.
		//소수 -> 나누어 떨어지는 수가 1과 자기자신인 수.
		//예) 5 -> 2 3 5
		//입력받은 수까지 반복하고, 각 수를 자기 자신까지 나누면서 약수의 개수가 2개인 수
		Scanner scan = new Scanner(System.in);

		System.out.print("정수>");
		int input = scan.nextInt();
		int count = 0;

		for(int i = 1; i <= input; i++) {
			count = 0;
			for(int j = 1; j <= i; j++) {
				if(i%j == 0) { // j는 약수
					System.out.println(i+"-"+j);
					count ++;
				}
			}
			//System.out.println("count"+count);
			if(count == 2) {
				System.out.println(i);
			}
			
			scan.close();
		}
	}

}

 

향상된 for loop

향상된 for loop는 아래와 같이 사용할 수 있다.

for(받을 변수 타입과 변수이름 : 배열이름){
}

for(int a : arr){
}

➰향상된 for loop의 사용

package day06;

public class EnhanceForEx {
	
	public static void main(String[] args) {
		
		int[] arr = {1,2,3,4,5};
		
		//일반 for문으로 실행
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		
		//향상된 for문으로 실행
		//for(받을 변수 타입과 변수이름 : 배열이름)
		for(int a : arr) {
			System.out.println(a);
		}
		
		System.out.println("----------------------");
		
		String[] sArr = {"월", "화", "수", "목", "금"};
		for(String s : sArr) {
			System.out.println(s);
		}
		
		System.out.println("----------------------");
		
		//배열 요소들의 합계와 평균을 소수 2자리 까지만 출력
		int[] score = {34, 54, 23, 53, 65};
		double sum = 0;
		for(int num : score) {
			sum += num;
		}
		
		System.out.printf("합계: %.2f\n", sum);
		System.out.printf("평균: %.2f\n", sum/score.length);
		System.out.println("합계: "+ String.format("%.2f",  sum));
		System.out.println("평균: "+ String.format("%.2f",  sum/score.length));
		
	}

}
반응형