개발자
[java 7일차] for문/trim/isEmpty/isdigit/유효성검사(숫자,오류횟수,비밀번호) 본문
for 문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
==== 반복분(loop) ====
※ for 문의 형식
for(초기화; 조건식; 증감식) {
반복해서 실행할 문장;
} //end of for--------------------------
▣ 순서
1) 초기화;
2) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.
조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
} 을 빠져나간다.)
3) 증감식
4) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.
조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
} 을 빠져나간다.)
5) 증감식
6) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.
조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
} 을 빠져나간다.)
|
cs |
<for문 예제1>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
for(int i=0; i<10; i++) { // i+=1;은 i=i+1; 와 같다.
System.out.println((i+1)+".안녕자바~~"); //i가 int타입이라 +이다. i+1 =1나옴
}
/*
1.안녕자바~~
2.안녕자바~~
3.안녕자바~~
4.안녕자바~~
5.안녕자바~~
6.안녕자바~~
7.안녕자바~~
8.안녕자바~~
9.안녕자바~~
10.안녕자바~~
*/
|
cs |
<for문 예제 2 홀수만 나오게>
1
2
3
4
5
6
7
8
9
10
11
12
|
for(int i=0; i<10; i++) {
System.out.println(++i + ".안녕 이클립스~~");
}
/*
1.안녕 이클립스~~
3.안녕 이클립스~~
5.안녕 이클립스~~
7.안녕 이클립스~~
9.안녕 이클립스~~
*/
|
cs |
<위의 예제 다른 방법>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
for(int i=0; i<10; i+=2) { //i+=2; 는 i=i+2 와 같다.
System.out.println((i+1)+".안녕 Eclipse~~");
}
/*
1.안녕 Eclipse~~
3.안녕 Eclipse~~
5.안녕 Eclipse~~
7.안녕 Eclipse~~
9.안녕 Eclipse~~
*/
|
cs |
<for문 예제3>
1
2
3
4
5
6
7
8
9
10
11
12
|
for(int i=10; i<0; i--) {
if(i%2 !=0) // i%2는 i를 2로 나누었을때의 나머지를 구해주는 것이다.
System.out.println(i+".안녕 Spring~~");
}
/*9.안녕 Spring~~
7.안녕 Spring~~
5.안녕 Spring~~
3.안녕 Spring~~
1.안녕 Spring~~
*/
|
cs |
<위의 예제 다른 방법들>
1
2
3
4
5
6
7
8
9
10
|
for(int i=10; i>0; i-=2) {
System.out.println((i-1)+".안녕하십니까?");
}
/*
9.안녕하십니까?
7.안녕하십니까?
5.안녕하십니까?
3.안녕하십니까?
1.안녕하십니까?
*/
|
cs |
1
2
3
4
5
6
7
8
9
10
|
for(int i=10; i>0; i--) {
System.out.println(--i+".Hello~~");
}
/*
9.Hello~~
7.Hello~~
5.Hello~~
3.Hello~~
1.Hello~~
*/
|
cs |
1
2
3
4
5
6
7
8
9
10
|
for(int i=0, j=9; i<5; i++, j-=2) {
System.out.println(j+".헬로~~~");
}
/*
9.헬로~~~~~
7.안녕하십니까?
5.안녕하십니까?
3.안녕하십니까?
1.안녕하십니까?
*/
|
cs |
1
2
3
|
for(int i=9; i>0; i-=2) {
System.out.println(i+".안녕 Spring~~"); // 내가코딩한거 9,7,5,3,1
}
|
cs |
for문 break
반복문에서 break;를 만나면 가장 가까운 반복문을 벗어나는 것이다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
for(int i=0; i<10; i++) {
if(i==5) {
break; //반복문에서 break;를 만나면 가장 가까운 반복문을 벗어나는 것이다.
}
System.out.println(i+1);
} // end of for---------------------
/*
>>> 1. break <<<
1
2
3
4
5
*/
|
cs |
<for(;;)은 무한반복> : unreachable code는 for문 빠져나오지 못함 for문 조건없어서
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
for(;;) {
System.out.println(++cnt + "번째 반복"); //cnt++ 후이면 0번쨰부터 반복
if(cnt == 10) {
break; // 반복문에서 break;를 만나면 가장 가까운 반복문을 벗어나는 것이다. 10이라면 빠져나와라
} // {}하나만있으면 생략가능
}// end of for-------------------------
/*
1번째 반복
2번째 반복
3번째 반복
4번째 반복
5번째 반복
6번째 반복
7번째 반복
8번째 반복
9번째 반복
10번째 반복
*/
|
cs |
for문 continue
continue; 를 만나면 실행순서가 밑으로 내려가지 않고 가장 가까운 반복문의 증감식으로 이동시켜준다
1
2
3
4
5
6
7
8
9
|
System.out.println("\n>>> 2. continue <<<"); //unreachable code는 for문 빠져나오지 못함 for문 조건없어서
for(int i=0; i<10; i++) {
if( (i+1)%2 == 0 ) { //출력하고자 하는 값이 짝수 이라면
continue; // continue; 를 만나면 실행순서가 밑으로 내려가지 않고 가장 가까운 반복문의 증감식으로 이동시켜준다.
}
System.out.print( (i+1)+" " );
}// end of for-----------------
// 1 3 5 7 9
|
cs |
trim/ isEmpty()
trim() : 입력된 문자열중 좌,우에 공백이 있으면 공백을 모두 제거되어진 문자열을 나타내준다
isEmpty() : 문자열의 길이가 0이면 true, 아니라면 false를 리턴해준다
1
2
3
4
5
6
7
8
9
10
|
String hakbun = sc.nextLine();
System.out.println("hakbun =>" + hakbun.trim().isEmpty());
hakbun.trim() 은 hakbun 에 입력된 문자열중 좌,우에 공백이 있으면 공백을 모두 제거되어진 문자열을 나타내는 것이다.
hakbun.trim().isEmpty()은 hakbun에 입력된 문자열에서 좌우에 공백을 제거한 이후에 아무것도 없는 것이라면 true 를 나타내어주고,
뭔가 들어온 경우라면 false를 나타내어주는 것이다.
if(hakbun.trim().isEmpty()) {// hakbun.trim().isEmpty()값이 true이면 학번 입력시 그냥 엔터했거나 아니면 공백만을 입력한 경우이다.
System.out.println("[경고] 학번을 올바르게 입력하세요!!\n");
}
|
cs |
함께쓰면
객체.trim().isEmpty() 성명에 그냥 엔터나 공백만으로 입력한 경우
< 숫자인지 유효성 검사 메소드>
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
|
//학번이 6글자로 이루어진 숫자인지 아닌지를 검사해주는 메소드-----------------------------
boolean checkHaKbun(String hakbun) {
int hakbun_length = hakbun.length(); //haknun은 nill값이아니다 위에서 입력받은 값이 있기 때문이다
if ( hakbun_length !=6 ) {
return false;
}
else { //학번의 길이가 6인 경우
// "091234" "0a1234"
boolean is_all_digit = true;
for(int i=0; i<6; i++) {
char ch = hakbun.charAt(i); //입력된 hakbun 중 한글자만 받아온다 i만?
if ( !Character.isDigit(ch)) {// 입력받은게 숫자입니까 -> !쓰면 반대로 입력받은게 숫자가 아닙니까? digit맞는지 확인좀 Define이라 되어있었음
is_all_digit = false;
break;
//return false; //!false = !Character.isDefined(ch) = break;?
}
}//end of for--------------------
return is_all_digit; //초기치 넘겨주지 true값
}
}//end of checkHaKbun(String hakbun)-----------------------
|
cs |
Character.isDigit() : 명시된 char 값이 숫자이면 true 아니면 false를 리턴한다
Character.isUpperCase : 대문자 인지
Character.isLowerCase : 소문자 인지
<오류횟수 3회초과 유효성검사>
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
|
int kor_fail_cnt = 0; // 국어점수 입력시 틀린 횟수 용도
for(;;) {
if(kor_fail_cnt < 3) { //국어점수 입력시 틀린 횟수가 3 미만 이라면
try {
System.out.print("3. 국어점수 :");
int kor = Integer.parseInt(sc.nextLine().trim()); //int kor = sc.nextInt(); sc.nextLine(); 되나보기
//키보드로 입력한 문자열에서 좌,우에 공백이 있을 경우라면 좌,우 공백을 제거한 이후에 int 타입으로변경해주겠다는 말이다.
//입력받은 점수가 0이상 100 이하인지 아닌지 검사를 해야한다.
if(0<= kor && kor<=100) { //int이지만 벗어난 숫자일때 떨어지는곳
this.kor=kor;
break;
}
else //else 있어도 없어도 그만
System.out.println("[경고] 점수는 0 이상 100 이하 이어야 합니다!");
System.out.println( ">>> "+ ++kor_fail_cnt + "번 틀림!!"); //같이쓰면 중요 전위,후위 ++
} catch(NumberFormatException e) { //int 아닐때 떨어지는곳
System.out.println("[경고] 점수는 정수로만 입력하세요!!\n");
System.out.println( ">>>"+ ++kor_fail_cnt + "번 틀림!!");
//전위는 후위든 상관없음 하지만다른거랑 같이쓰면 중요함
}// end of catch --------
}//end of fail if
else {
System.out.println(">> 국어점수 입력이 3회 이상 틀렸으므로 프로그램을 종료합니다. <<");
System.exit(0); //프로그램 종료
}//end of else
}// end of for------
|
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
|
// 암호는 대문자,소문사,숫자,특수기호가 혼합된 8글자 이상 15글자 이하인지 아닌지 검사를 해주는 메소드 생성하기
// 파라미터 String pwd 값이 대문자,소문사,숫자,특수기호가 혼합된 8글자 이상 15글자 이하이라면 true 를 리턴해주고,
// 파라미터 String pwd 값이 위의 조건에 만족하지 않으면 false를 리턴해주겠다.
public static boolean checkPwd(String pwd) {
//boolean result = false; 필요없어짐
//입력받은 String pwd의 글자수 알아오기
//System.out.println("입력받은 암호 길이 : " + pwd.length());
boolean upperFlag = false; // 대문자인지 기록하는 용도
boolean lowerFlag = false; // 소문자인지 기록하는 용도
boolean digitFlag = false; // 숫자인지 기록하는 용도
boolean specaialFlag = false;// 특수기호인지 인지 기록하는 용도
int pwd_length = pwd.length(); // 비밀번호의 글자수
if( pwd_length < 8 || pwd_length > 15) {
return false;
}
else { // 비밀번호의 글자수가 8글자 이상 15글자 이하인 경우
//암호가 어떤글자로 이루어졌는지 검사를 시도해야 한다.
// pwd ==> "qwEr1234$"
// index ==> "012345678"
for(int i=0; i<pwd_length; i++) { //입력받은 글자의 길이 만큼 검사를 해야 한다. qwEr1234$넣으면 9번반복 할거임
char ch = pwd.charAt(i); //입력된 pwd 중 한글자만 받아온다 i만?
if( Character.isUpperCase(ch)) { //대문자라면
upperFlag = true; //true라는 흔적남기기
}
else if( Character.isLowerCase(ch)) {//소문자라면
lowerFlag = true; // true라고 기록남기기
}
else if( Character.isDigit(ch)) { //숫자이라면
digitFlag = true;
}
else { // 특수문자인 경우
specaialFlag = true;
}
}//end of for---------------------------
if ( upperFlag && lowerFlag && digitFlag && specaialFlag ) {
return true;
}
else {
return false;
}
}//end of else--------------
// return result; //boolean checkPwd(String pwd) 메소드의 리턴값 어디갔지???
}// end of boolean checkPwd(String pwd)---------------------
|
cs |
'개발자 > JAVA' 카테고리의 다른 글
[JAVA 9일차] 다중 for문/continue/구구단/레이블사용하여break/equalsIgnoreCase/별찍기/while문/do while문 (0) | 2022.08.16 |
---|---|
[JAVA 8일차] sum/대,소문자,특수문자 개수 알아오기/계좌번호 유효성검사 (0) | 2022.08.16 |
[JAVA 6일차]wrapper/tpUppercase/chatAt/Math(반올림등)/equals/switch (0) | 2022.08.15 |
[java 5일차]파라미터 좀 더 이해해보기 (0) | 2022.08.15 |
[JAVA 4일차]연산자(산술,증감,논리,비교,할당,삼항)/연산메소드/Scanner/try catch(예외)/Integer(변환)/NumberFormatExceptio (0) | 2022.08.15 |