728x90
[ 2022년 9월 27일 화요일 ]
- 중첩 반복문 ★ 중첩 반복문을 구현할 때에는 범위를 정확하게 파악해야 함
[ for문의 이중 구조 ]
for ( 초기값; boolean형 조건식; 반복 표현식 ) {
for ( 초기값; boolean형 조건식; 반복 표현식 ) {
반복할 실행문; }
}
Example - (1) 중첩 반복문으로 통해 다음과 같은 모양을 출력
public class MultiForEx02 {
public static void main(String[] args) {
// 회전할 때마다 횟수가 변하는 중첩반복문
/*
*
* *
* ***
* *****
* *******
* *********
* 1행 1번 / 2행 3번 /3행 4번
*/
int star = 5;
for(int i =1 ; i<= star; i++) {
//공백
for(int j=1; j<=star-i; j++) {
System.out.print(" ");
}
//별
for(int j=1; j<=(i*2)-1; j++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("-----------------------------------------------");
for(int i =1 ; i<= star; i++) {
//공백
for(int j=1; j<=i-1; j++) {
System.out.print(" ");
}
//별 // j = 2(star-i)+1
for(int j=1; j<=(-2*i)+11; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
public class MultiForEx02 {
public static void main(String[] args) { i = 1 j = 1, 2, 3, 4 : 1층에 공백 4칸
int star = 5; i = 2 j = 1, 2, 3 : 2층에 공백 3칸
for ( int i = 1 ; i <= star; i++ ) { i = 3 j = 1, 2 : 3층에 공백 2칸
//공백 i = 4 j = 1 : 4층에 공백 1칸
<1> for ( int j = 1; j <= star-i; j++ ) { i = 5 j = 0 : 5층에 공백 0칸
System.out.print(" ");
}
//별 // 별의 갯수가 홀수개이기 때문에 범위 조정
<2> for ( int j = 1; j <= (i*2)-1; j++ ) { i = 1 j = 1 : 1층에 별 1개
System.out.print( " * " ); i = 2 j = 1, 2, 3 : 2층에 별 3개
} i = 3 j = 1,2, 3, 4, 5 : 3층에 별 5개
System.out.println(); i = 4 j = 1,2, 3, 4, 5, 6, 7 : 4층에 별 7개
} i = 5 j = 1,2, 3, 4, 5, 6, 7, 8, 9 : 5층에 별 9개
System.out.println("-----------------------------------------------");
for ( int i = 1 ; i <= star; i++ ) { i = 1 j = 0 : 1층에 공백 0칸
//공백 i = 2 j = 1 : 2층에 공백 1칸
<1> for ( int j = 1; j <= i-1; j++ ) { i = 3 j = 1, 2 : 3층에 공백 2칸
System.out.print(" "); i = 4 j = 1, 2, 3 : 4층에 공백 3칸
} i = 5 j = 1, 2 ,3, 4 : 5층에 공백 4칸
//별 // j의 범위 등차수열을 통해 구함
<2> for ( int j = 1; j <= ( -2*i )+11; j++ ) { i = 1 j = 1,2, 3, 4, 5, 6, 7, 8, 9 : 5층에 별 9개
System.out.print( " * " ); i = 2 j = 1,2, 3, 4, 5, 6, 7 : 4층에 별 7개
} i = 3 j = 1,2, 3, 4, 5 : 3층에 별 5개
System.out.println(); i = 4 j = 1,2, 3 : 2층에 별 3개
} i = 5 j = 1 : 1층에 별 1개
}
★★ 등차수열 : 연속하는 두 항의 차가 일정한 수열공차 d, 첫 항 a1일 때 a1 + ( n-1 ) d
Example (2) - 입력받은 수까지 소수 출력 예) 5 >> 2, 3, 5
( 입력받은 수까지 반복하고, 각 수를 자기자신까지 나누면서 약수의 개수가 2개인 수 )
import java.util.Scanner;
public class MultiForEx03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for(int i=1; i <= num; i++) {
int count = 0; // count에 대한 초기값을 0으로
for(int j =1; j <= i; j++) {
System.out.println(i + "-" + j);
if(i % j == 0) {
count++;
}
}
if(count == 2) {
System.out.println(i);
}
}
}
}
import java.util.Scanner;
public class MultiForEx03 {
public static void main(String[ ] args) {
1) 입력받은 수까지
Scanner sc = new Scanner(System.in); // Scanner로 정수 입력 받기
int num = sc.nextInt();
2) 소수 출력
for ( int i = 1; i <= num; i++ ) {
int count = 0; // 약수의 갯수를 의미하는 변수
for( int j = 1; j <= i; j++ ) { // j 가 i 까지인 이유: 자기 자신까지 나누기 위해
(즉, 소수는 1 포함 자기자신만을 약수로 가진 것을 의미하기 때문)
if ( i % j == 0 ) {
count++;
}
}
f ( count == 2 ) { // 소수는 1과 자기자신으로 이루어져 약수의 갯수가 총 2개
System.out.println(i);
}
}
}
}
- 향상된 for 루프 (Enhanced for loop)
[ 향상된 for문의 구조 ]
for ( 배열의 값을 담을 변수 : 배열의 이름 ) {
실행문;
}
int [ ] arr= {1,2,3,4,5};
// 일반 for
for ( int i = 0; i < arr.length; i++ ) { // 초기값; 조건식; 증감식
System.out.println(arr[i]);
}
// 향상된 for
for ( int a : arr ) { // arr의 배열의 요소들을 a에 저장
System.out.println(a);
}
// 향상된 for - 문자열 배열
String[ ] sArr = {"월", "화", "수", "목","금", "금", "금"};
for ( String s : sArr ) {
System.out.println(s);
}
Example (1) - 향상된 for문을 통해 배열의 합계와 평균 구하기
public class EnhanceForEx {
public static void main(String[] args) {
int [] score = {34, 54, 23, 53, 65};
int sum = 0;
double avg = 0;
for(int S : score) {
sum+= S; //누적
avg = (double)sum/score.length;//type casting
}
System.out.println(sum);
System.out.printf("%.2f", avg);
//소수 2자리까지 표현하는 방법
//1. printf 사용
//2. 문자열
}
}
int [ ] score = {34, 54, 23, 53, 65};
int sum = 0;
double avg = 0;
for ( int S : score ) { // 정수 S 변수에 score 배열 저장
sum+= S; // 누적
avg = (double) sum / score.length; // type casting
: 정수인 sum과 정수인 배열의 길이를 나누었을 때
실수가 나올 경우를 대비해 타입 캐스팅을 해야 함
}
System.out.println(sum);
System.out.printf("%.2f", avg);
'Java 기본 개념' 카테고리의 다른 글
자바를 잡아라 제 8장 - 믿을만한 게 없을 때는 나 자신을 믿자 (0) | 2022.10.11 |
---|---|
자바를 잡아라 제 7장 - 버겁다고 느낄 때 잠시 쉬어도 좋아 (0) | 2022.10.10 |
자바를 잡아라 제 5장 - 반복만이 살 길이다 (0) | 2022.10.04 |
자바를 잡아라 제 4장 - 세상사 쉬운 건 없다 (0) | 2022.10.03 |
자바를 잡아라 제 3장 - 느릴 순 있어도 놓치는 말자 (0) | 2022.10.03 |