개발자
[JAVA 9일차] 다중 for문/continue/구구단/레이블사용하여break/equalsIgnoreCase/별찍기/while문/do while문 본문
개발자/JAVA
[JAVA 9일차] 다중 for문/continue/구구단/레이블사용하여break/equalsIgnoreCase/별찍기/while문/do while문
GoGo개발 2022. 8. 16. 23:44다중 for문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/*
열
1234567열
abcdefg 1행
hijklmn 2행
opqrstu 3행
*/
char ch = 'a';
for(int i=0; i<'u'-'a'+1; i++) {
System.out.print(ch++); //후위면 a먼저찍어주고 1 증가
if ( (i+1)%7 == 0 ) {
System.out.println("\n"); //7번째 일때 줄바꿈
}
}// end of for ----------------------
System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
ch = 'a';
for(int i=0; i<3; i++) { // 바깥 for 문 ==> 행 3행
for(int j=0; j<7; j++) { // 내부 for 문 ==> 열 7열
System.out.print(ch++);
}// end of for------------
System.out.println("\n");
}// end of for--------
|
cs |
continie
for문 실행 중 continue를 만나면 아래로 내려가지않고 반복문의 증감식으로 이동하는 것이다.
<행 건너뛰기>
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/*
[0,0][0,1][0,2] 4행 3열인데 3행은 하지 말고 건어띄어라 라고 하겠습니다.
[1,0][1,1][1,2]
[3,0][3,1][3,2]
*/
for(int i=0; i<4; i++) {
if(i==2) continue; //continue;를 만나면 아래로 내려가지 않고 반복분의 증감식으로 이동하는 것 (첫번째 for문의 i++ 로 이동)
for(int j=0; j<3; j++) {
System.out.print("["+i+","+j+"]");
}// end of for---------------
System.out.println("\n");
}// end of for-----------------
|
cs |
<열 건너뛰기>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/*
[0,0][0,2] 4행 3열 인데 2열은 하지말고 건너띄어라 라고 하겠습니다.
[1,0][1,2]
[2,0][2,2]
[3,0][3,2]
*/
//내가한 코딩
for(int i=0; i<4; i++) {
for(int j=0; j<3; j++) {
if(j==1) continue;
System.out.print("["+i+","+j+"]");
}
System.out.println("\n");
}
|
cs |
구구단을 통해 레이블사용하여 break 하는 법과 equalsIgnoreCase 을 알아보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/*
>>몇단 볼래? =? 8엔터
===8단===
8*1=1
8*2=16
8*3=24
8*4=32
8*5=40
8*6=48
8*7=56
8*8=64
8*9=72
>> 또 하시겠습니까?[Y/N] => y엔터 또는 Y엔터
>> 몇단 볼래? => 1.34엔터 또는 똘똘이 엔터
[경고] 2단부터 9단까지만 가능합니다.
>> 몇단 볼래? =>345엔터
[경고] 2단부터 9단까지만 가능합니다.
>> 몇단 볼래? => 4엔터
== 3단 ==
3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27
>> 또 하시겠습니까?[Y/N] => s엔터 또는 S엔터
[경고] Y 또는 N만 가능합ㅈ니다.
>> 또 하시겠습니까?[Y/N] => n엔터 또는 N엔터
== 프로그램 종료 ==
*/
Scanner sc = new Scanner(System.in);
/*
=== 레이블을 사용하여 break; 하기 ==
레이블 명뒤에는 : 을 붙이며 반드시 반복문 앞에 써야한다.!!! 이름은 개발자 마음
*/
outer: //oter: 을 레이블 이라고 부르는데 그 레이블명이 지금은 outer 일 뿐이다.
for(;;) {
try {
System.out.print(">> 몇단 볼래? => ");
String str_dan = sc.nextLine();
int dan = Integer.parseInt(str_dan);
if(2 <= dan && dan <= 9 ) {
//입력받은 단을 출력해주기
System.out.println("\n===" + dan+"단 ===");
for(int i=0; i<9; i++) {
System.out.println(dan+"*"+(i+1)+"="+dan*(i+1));
}// end of for------------------------
for(;;) {
System.out.print("\n>> 또 하시겠습니까?[Y/N] => ");
String yn = sc.nextLine();
//yn <== "y" 또는 "Y"
//if("y".equals(yn) || "Y".equals(yn)) 또는
if("y".equalsIgnoreCase(yn)) { //대소문자 구분없이 y이라면
break; // break;를 만나면 break;와 가장 가까운 반복문을 빠져나오는 것이다.
}
//yn <== "n" 또는 "N"
else if("n".equalsIgnoreCase(yn)) { //대소문자 구분없이 n이라면
sc.close();
break outer; // outer 라는 레이블명으로 선언되어진 for문을 빠져나가는 것이다.
// outer 가 레이블명이다.
}
//yn <== ("y" 또는 "Y" 또는 "n" 또는 "N")를 제외한 나머지인 경우
else{System.out.println("[경고] Y또는 N만 가능합니다");
}
}//end of for
}
else {
System.out.println("[경고] 2단부터 9단까지만 가능합니다.\n");
}
} catch(NumberFormatException e) {
System.out.println("[경고] 2단부터 9단까지만 가능합니다.\n");
}
}//end of for---------------
//sc.close(); ,break out 있는 곳에 써주기 노란줄 생기니까
System.out.println("==프로그램 종료==");
}
|
cs |
레이블을 사용하여 break; 하기 : 레이블 명뒤에는 : 을 붙이며 반드시 반복문 앞에 써야한다. 이름은 개발자 마음
사용 할때는 break 레이블명; 하게되면 레이블명으로 선언되어진 for문을 빠져나가는 것이다.
equalsIgnoreCase : 대,소문자 구분없이 비교해준다.
<구구단 정렬>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/*
== 구구단 ==
2*1=2 3*1=3 4*1=4 ......... 9*1=9
2*2=2 3*2=3 4*2=8 ......... 9*2=18
2*3=2 3*3=3 4*3=12 ......... 9*3=27
2*4=2 3*4=3 4*4=16 ......... 9*4=36
2*5=2 3*5=3 4*5=20 ......... 9*5=45
2*6=2 3*6=3 4*6=24 ......... 9*6=54
2*7=2 3*7=3 4*7=28 ......... 9*7=63
2*8=2 3*8=3 4*8=32 ......... 9*8=72
2*9=2 3*9=3 4*9=36 ......... 9*9=81
*/
// 위의 구구단은 9행 8열 이다.
// row(행) => 줄, col(열) => 단
System.out.println("== 구구단 ==\n");
System.out.printf("%30s\n","== 구구단 =="); // "%30s" 자리에 "==구구단==" 넣는다.
// %s는 문자열이 들어오는 것이다.
// %30s는 문자열 30글자가 들어오게끔 공간을 확보하는 것이다.
// 기본은 오른쪽 정렬로 들어온다.
// _____________________== 구구단 == 30개중에 9개차지 21개 비워져있다 , 오른쪽 맞춤 (-붙이면 왼쪽맞)
// 21개 공백"== 구구단 =="
for(int row=1; row<=9; row++) { // 9행
for(int col=2; col<=9; col++) { // 8열
// System.out.print(col+"*"+row+"="+(col*row)+"\t");
System.out.printf(col+"*"+row+"=%-4d", (col*row));
// %d는 정수가 들어오은 것이다. 참고로 %f는 실수가 들어오는 것이다.
// %-4d 는 정수 4자리가 들어오게끔 공간을 확보하는데 왼쪽정렬(-)로 들어오는 것이다.
}// end of for-------------
System.out.println("\n");
}// end of for----------------
} // end of main
|
cs |
별 찍기 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public static void main(String[] args) {
/*
== 입사문제 ==
*********1
********2
*******3
******4
*****5
****6
***7
**8
*9
*/
내가한 코딩
int j=0;
for(int i=1; i<=9; i++) {
for(j=10-i; j>=1; j--) {
System.out.print("*");
}
System.out.print(j+i+"\n");
}
|
cs |
while 문
1
2
3
4
5
6
7
8
9
10
11
|
=== while 문 형식 ===
변수의 초기화;
while(조건식) {
조건식이 참(true)이라면 반복해서 실행할 명령문; 을 실행하고,
조건식이 거짓(false)이라면 while 의 { } 부분을 빠져나간다.
반복해서 실행할 명령문;
증감식;
}
|
cs |
<예시>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public static void main(String[] args) {
int cnt=5, loop=0;
while(loop < cnt) { // 0<5 1<5 2<5 3<5 4<5 5<5(거짓)
System.out.println((loop+1)+".안녕자바~~");
loop++; // 1 2 3 4 5
}// end of while-----------------------------------
/*
1.안녕자바~~
2.안녕자바~~
3.안녕자바~~
4.안녕자바~~
5.안녕자바~~
*/
|
cs |
<예시2>
1
2
3
4
5
6
7
|
System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
cnt=5; loop=0;
while(loop++ < cnt) { // 0<5 1<5 2<5 3<5 4<5 5<5(거짓)
System.out.println(loop+".Hello Java~~");
}// end of while-----------------------------------
|
cs |
1.Hello Java~~~~ 5까지 나온다
<예시3>
1
2
3
4
5
|
loop=0;
while(!(++loop > 5)) {
// !( ) ==> 괄호( ) 속에는 while 반복문을 빠져나갈 조건식을 넣어준다.
System.out.println(loop+".안녕 오라클~~");
}// end of while--------------------------------
|
cs |
<예시4 홀수만>
1
2
3
4
5
6
7
8
9
10
11
|
loop=0;
while(true) {
if(++loop > 10) // 탈출조건
break;
if(loop%2 == 0)
continue; // continue; 를 만나면 아래로 내려가지 않고 while() 의 괄호( )속의 조건식으로 이동한다.
System.out.println(loop+".Hi Oracle~~");
}
|
cs |
<구구단 예시>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
int jul=0, dan=1;
while(!(++jul > 9)) { // 9행
while(!(++dan > 9)) { // 8열
String str = (dan<9)?"\t":"\n";
System.out.print(dan+"*"+jul+"="+(dan*jul)+str);
/*
== 구구단 ==
2*1=2 3*1=3 4*1=4 ..... 9*1=9
2*2=4 3*2=6 4*2=8 ..... 9*2=18
2*3=6 3*3=9 4*3=12 ..... 9*3=27
2*4=8 3*4=12 4*4=16 ..... 9*4=36
2*5=10 3*5=15 4*5=20 ..... 9*5=45
2*6=12 3*6=18 4*6=24 ..... 9*6=54
2*7=14 3*7=21 4*7=28 ..... 9*7=63
2*8=16 3*8=24 4*8=32 ..... 9*8=72
2*9=18 3*9=27 4*9=36 ..... 9*9=81
*/
}// end of while-----------------
dan=1;
}// end of while--------------------
|
cs |
do while 문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
=== do ~ while() ===
변수초기화;
do {
반복해서 실행할 명령문;
증감식;
} while(조건식);
while 문의 경우 조건식이 true 일때만 반복 실행하지만,
do ~while 문의 경우는 조건식이 false 일지라도
무조건 do { } 속에 있는 명령문은 1번은 실행하고서 반복문을 벗어난다.
그러므로 do ~ while 문은 무조건 do { } 속에 있는 명령문을 실행하고서
|
cs |
<팩토리얼 구하기>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
// == 입사문제 == //
/*
>> 알고싶은 팩토리얼 수 입력 => 5엔터
>> 5! = 120
>> 알고싶은 팩토리얼 수 입력 => 5엔터
>> 5! => 5*4*3*2*1 => 120
>> 또 할래?[Y/N] => y엔터
>> 알고싶은 팩토리얼 수 입력 => 0엔터
[경고] 자연수만 입력하세요!!
>> 알고싶은 팩토리얼 수 입력 => 강아지엔터
[경고] 자연수만 입력하세요!!
>> 알고싶은 팩토리얼 수 입력 => 7엔터
>> 7! => 7*6*5*4*3*2*1 => 5040
== 프로그램 종료 ==
*/
Scanner sc = new Scanner(System.in);
outer: // 레이블 만들어주기 do while문 빠져나가기 위해서 이름 지어주기
do {
try {
System.out.print(">> 알고싶은 팩토리얼 수 입력 => ");
int num = Integer.parseInt(sc.nextLine());
if(num <= 0) {
System.out.println("[경고] 자연수만 입력하세요!!\n");
}
else {
long result = 1;
String str = "";
for(int i=num; i>0; i--) { // 5*4*3*2*1
//result = result * i; 아래와 같은말
result *= i; // result = 1*5 = 5
// result = 5*4;
// result = 5*4*3;
// result = 5*4*3*2;
// result = 5*4*3*2*1;
if(i>1)
str += i+"*";
else
str += i;
}// end of for---------------
System.out.println(num+"! => " +str + "=>" + result);
// >> 5! => 5*4*3*2*1 => 120
do {
System.out.print("\n >> 또 할래?[Y/N] => ");
String yn = sc.nextLine();
if("y".equalsIgnoreCase(yn)) { // 또 할래? 물었을 때 "y" "Y" 을 입력한 경우
break; // 이번 do while문 빠져나가는 것 다시 처음 do while 문으로 돌아감
}
else if("n".equalsIgnoreCase(yn)) { // 또 할래? 물었을 때 "n" "N" 을 입력한 경우
break outer; // 가장 바깥의 do while문을 빠져나간다
}
else { // 또 할래? 물었을 때 "y" "Y" "n" "N" 을 제외한나머지를 입력한 경우
System.out.println("[경고] Y 또는 N 만 입력하세요!!");
}
} while(true);
} // end of else (first)
} catch(NumberFormatException e) {
System.out.println("[경고] 자연수만 입력하세요!!\n");
}
} while (true);
// end of do~while--------------------------
sc.close();
System.out.println("\n==프로그램 종료 ==");
}//end of main()--------------------------
|
cs |
<내가 짠 코드>
'개발자 > JAVA' 카테고리의 다른 글
[JAVA 10일차]array(배열)/회원가입 (0) | 2022.08.18 |
---|---|
[JAVA 10일차] random(랜덤정수,랜덤알파벳,인증키,랜덤홀짝맞추기, 가위바위보,정수 맞히기 게임) (0) | 2022.08.17 |
[JAVA 8일차] sum/대,소문자,특수문자 개수 알아오기/계좌번호 유효성검사 (0) | 2022.08.16 |
[java 7일차] for문/trim/isEmpty/isdigit/유효성검사(숫자,오류횟수,비밀번호) (0) | 2022.08.15 |
[JAVA 6일차]wrapper/tpUppercase/chatAt/Math(반올림등)/equals/switch (0) | 2022.08.15 |