4-1. 조건문과 반복문

62780 단어 22/4/1822/4/18

반복문 만들때 조심할것 계속 실행되는지 확인

open perspective -> debug -> disconnect all

나중에 sql 과 같이쓰면 자원이 모자라 실행 안될수도있다

조건문 if - > 연속 데이터(>, <...)의 비교, 비교가 단순한 경우(1,2개 끼리 비교 100점 ~ 90점 A등급)

if(조건) 처리문;

if (조건) 처리문; else 처리문; <-- 1개 처리문일때 {} 없이 해도 괜찮다~

(조건)? 처리문:처리문; <--삼항연산자

if(조건) 처리문; else if (조건) else 처리문;

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

		int score = -100;

		// 100 넘는값, -값 이 들어오면 -> 잘못된값이 들어왔습니다.
		// 실제로는 100 넘을때 예외처리 해줘야함
		// score 100 ~ 90 : A

		
//		if (score > 100 || score < 0) {
//			System.out.println("점수오류 (점수는" + ((score > 100)? "100점 이상이":"0점 미만이") + "될 수 없습니다");
//			System.out.println("점수 : " + score);
//		}
//		else {
			
		// if (score > 100) { if(score >= 90) ~~ } 연속되 if문 가능
		//-> if (score > 100 && score >= 90) {  ~~ } 따로 비교할것이 더 없다면 동시에 가능

		if (score > 100) {
			System.out.println("점수오류(점수는 100점 이상이 될 수 없습니다.)");
			System.out.println("점수 : " + score);
		}

		else if (score >= 90) {
			System.out.println("점수가 100~90 입니다.");
			System.out.println("점수 : " + score + ", A ");
		} 
		else if (score >= 80) { // else if : 위에 if가 아니면 = 90보다 작다
			// else if 문은 90 > score >= 80 이다
			System.out.println("점수가 90~80 입니다.");
			System.out.println("점수 : " + score + ", B ");

		}
		else if (score >= 70) { // else if : 위에 if가 아니면 = 80보다 작다
			// else if 문은 80 > score >= 70 이다
			System.out.println("점수가 80~70 입니다.");
			System.out.println("점수 : " + score + ", C ");
		}
		else if(score >= 0){
			System.out.println("점수가 70 미만 입니다.");
			System.out.println("점수 : " + score + ", D ");
		}
		else {
			System.out.println("점수오류(점수는 0점 미만이 될 수 없습니다.");
			System.out.println("점수 : " + score);
		
		}

	}
}

switch : 비연속 데이터, 숫자비교, boolean, char, String(== 으로 비교 가능 java1.6 이상 가능)

swich(num){

case 1: ~ // num ==1 // 비연속 데이터(같다== 비교)

case 2: ~

default : // 그외 해당 if 로 치면 else에 해당

}

// : <- 라벨 - 특정 위치로 이동하고 싶을 때 위치 지정 -구조화된 프로그램과는 거리가 있어서 잘 안씀

// break; switch 문 밖으로 나감 없으면 시작된 case 다음 순차대로 계속 실행됨

//break 는 프로그램 진행을 멈추고 빠져나간다 -> switch, 반복(for, while) 에서 사용됨

// if는 사용 안됨

break = switch, for, while 만 해당됨 // if 안에 있어도 바로 밖에 while 이 있다면 while 문이 나가짐


public class SwitchExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//주사위놀이
		//1~6까지의 숫자중 하나를 랜덤으로 나오게 만들어서 나타난 숫자를 출력해 보자.
		// == 비교(비연속 데이터) : if ~ else if~ 처리 가능, switch case1: case2: ~ default 로도 가능
		//여러개 일때는 switch가 효과적 
		
		//랜덤 숫자 만들기 Math.random() <-- java.lang 안에 기본으로 있어서 import 없어도 가능
		//0~ 1보다 적은 값(실수포함)을 선언 / 0 <= n < 1   / 0.xx
		//얻고 싶은 수까지 곱하기 해라 / 1~10까지면 곱하기10 + 1
		//double 인 Math.random()값을 정수로 캐스팅 
		//1~6까지 숫자 + 1  // 로또 *45 +1
 		int num = (int)(Math.random()*6) + 1;
		System.out.println(num);
		
		// : <- 라벨 - 특정 위치로 이동하고 싶을 때 위치 지정 -구조화된 프로그램과는 거리가 있어서 잘 안씀
		// break; switch 문 밖으로 나감 없으면 시작된 case 다음 순차대로 계속 실행됨
		//break 는 프로그램 진행을 멈추고 빠져나간다 -> switch, 반복(for, while) 에서 사용됨 
       // if는 사용 안됨
		switch(num) {
		//nun == 1 때 이동 위치 case 1
		case 1:
			System.out.println("1번이 나왔습니다.");
			break;
		case 2:
			System.out.println("2번이 나왔습니다.");
			break;
		case 3:
			System.out.println("3번이 나왔습니다.");
			break;
		case 4:
			System.out.println("4번이 나왔습니다.");
			break;
		case 5:
			System.out.println("5번이 나왔습니다.");
			break;
		case 6:
			System.out.println("6번이 나왔습니다.");
			break;
			
		default :
			//위 조건에 다 맞지 않거나 break가 없는 경우 실행
			System.out.println("주사위 번호가 아닙니다.");
			break;
		}
	}

}

문자열은 "" 해줘야 됨

case "list" :{ }

*ALT + 방향키 : 선택한 줄 코드 움직임

문자열 4개중 1개 만 받는다

list

view

write

update

delete

그외 - 잘못된 명령어 입니다. -


import java.util.Scanner;

public class StringSwitchExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// 1. Scanner 생성
		Scanner sc = new Scanner(System.in);
		
		// 2. 명령어 입력 안내 출력
		System.out.println("명령어를 입력해주세요 (list, view, write, update, delete)");
		
		// 3.명령어 입력 받기 nextLine -> string변수에 저장
		String command = sc.nextLine();
		
		// 4. switch -> 게시판 리스트(보기,쓰기,업데이트,삭제) 처리
		// 4-1. 잘못된 명령을 입력하였습니다
		switch(command) {
		case "list":
			System.out.println("게시판 리스트 처리");
			break;
			
		case "view":
			System.out.println("게시판 보기 처리");
			break;
		case "write":
			System.out.println("게시판 쓰기 처리");
			break;
		case "update":
			System.out.println("게시판 수정 처리");
			break;
		case "delete":
			System.out.println("게시판 삭제 처리");
			break;
			
		default:
			System.out.println("잘못된 명령어 입니다");
			break;
		}
		sc.close();
		
		// 5. scanner 를 닫기 - 자원 회수 / 데이터베이스 사용시에도 같이 닫아라
	}

}

메인 메뉴 - MainExample 숫자 입력받아 문자열로 처리(입력을 String으로) / 한번 출력/ 숫자를 입력하면 들어가진다

  1. 공지사항 2. 게시판

  2. 질문답변 0. 종료

  • 그외 잘못된 메뉴를 선택하셨습니다.

  1. Scanner 생성

  2. 메뉴출력

  3. 메뉴 입력

  4. 입력된 메뉴 처리

  5. Scanner 닫기

import java.util.Scanner;

public class MainExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc =new Scanner(System.in);
		
		System.out.println("메뉴를 선택해 주세요 "+ "\n" +"1. 공지사항   2. 게시판" + "\n" + "3. 질문답변   0. 종료");
		
		String str = sc.nextLine();
		
		switch (str) {
			
		case "1":
			System.out.println("1. 공지사항");
			break;
			
		case "2":
			System.out.println("2. 게시판");
			break;
			
		case "3":
			System.out.println("3. 질문답변");
			break;
			
		case "0":
			System.out.println("0. 종료");
			break;
			
			default :
				System.out.println("잘못된 메뉴를 선택하셨습니다.");
		}
		
		sc.close();
	}

}

try ,catch 로 문자열 -> 숫자로 안바뀌는것 잡는 것 잡았는데 아직 뭔가 잘못됨 -> continue; 로 catch 발생할때 for 문 으로 돌아가 출력됨

에러 발생하지 않고 억지로 실행시키니 숫자중 아무거나 실행되는 문제 발생

문자 입력시 0번눌른것으로 출력됨

실제 필요는 없지만... 궁금해서 해봄

import java.util.Scanner;

public class MainExample3TryCatchFor {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int num1 = 0;
		Scanner sc = new Scanner(System.in);

		loop_while: while (true) {

			System.out.println("메뉴를 선택해 주세요 " + "\n" + "1. 공지사항   2. 게시판" + "\n" + "3. 질문답변   0. 종료");

			// if 로 문자입력시 line , 숫자입력시 int 로 구분이 먼저
			// 의미가 있는가? 결국 받는것은 String으로 들어옴 / int 로 들어오면 에러 나서
			String str = sc.nextLine();

			try {
				num1 = Integer.parseInt(str);

			} catch (NumberFormatException e) {
				System.out.println("문자를 입력");
				continue;
				// 다시 위로 올라가서 입력해라 라는 명령문이 필요함 -> default로 안감
				// 처음으로 가면 0.이 안뜸 continue 로 사용
				// return 안넣으면 0. 종료 가 같이 뜸 메소드 끝내버리는 return 넣으면 종료시킬수 있음
				// 그럼 다시 반복이 안됨
			}

			switch (num1) {

			case 1:
				System.out.println("1. 공지사항");
				break;

			case 2:
				System.out.println("2. 게시판");
				break;

			case 3:
				System.out.println("3. 질문답변");
				break;

			case 0:
				System.out.println("0. 종료");
				break loop_while;

			default:
				System.out.println("잘못된 메뉴를 선택하셨습니다.");
				break;

			}

		}
		sc.close();

	}

}

반복문 for(1. 초기값 ; 2 .반복 조건; 4. 증감) {3. 처리문;}

1.표준

int i = 0;

for( i ; 2 .반복 조건; 4. 증감) {3. 처리문;}

  1. 변형 (1)

int i = 0;

for( i ; 2 .반복 조건;) {

  1. 처리문;

  2. 증감; - 밖으로 뺄수있음

}

-> while 문으로 사용 가능

int i = 0; -1번

while( 2 .반복 조건) {

  1. 처리문;

  2. 증감; - 밖으로 뺄수있음

}


for(;;) 잘 안씀 모양이 이상해서

int i = 0; 1. 조건 (없을때도 있음)

for( ; ; ) <- 무한 반복처리{

2 .반복 조건 의 반대 ( 빠져나갈 조건 주고 break; 사용해서 종료)

  1. 처리문;

  2. 증감; - 밖으로 뺄수있음

}

->while 로 무한반복

int i = 0; 1. 조건 (없을때도 있음)

while(true) <- 무한 반복처리{

2 .반복 조건 의 반대 ( 빠져나갈 조건 주고 break; 사용해서 종료)

  1. 처리문;

  2. 증감; - 밖으로 뺄수있음

}

수열 = 숫자를 나열하여 일정한 규칙 을 만든다

1 + 2 + .... + 10

점수 데이터 비연속적이다 ( 여러 데이터 가 비연속적이면 배열로 처리)

100, 95, 70

초기값을 알고있는경우 바로 쓸수있다

int score[] = {100, 95, 70}

{100, 95, 70} 저장하고 저장한 주소를 score 에 넣는다

for 문 length -1 로 인덱스 검색

i = [0]

double 소수점 끝자리 표시 반올림으로 올린것이 아니다

int 로 i 두번 선언해도 지역변수로 for 안에서만 활동 가능하고 삭제되어 에러 안난다

알고리즘 수열 문제~~ 기본 나옴 for 문 쓰지 않고 써라

메소드로 조건문 만들어서 써라 이런 문제도 나옴

public class ForArrayExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//100, 95, 70 점 총합
		int score[] = {100, 95, 70};
		
		
		for(int i = 0 ; i <= score.length-1; i++) {
			
			System.out.println(score[i]);
		}
		// int 로 i 두번 선언해도 지역변수로 for 안에서만 활동 가능하고 삭제되어 에러 안난다
		int sum = 0;
		for(int i = 0 ; i < score.length; i++) {
			sum += score[i];
			
		}
		System.out.println(sum);
		System.out.println("sum / length = " + ((double)sum/score.length));    
		//평균 구하기 앞에 문자열 있어서 () 무끙ㅁ
		// double 끝자리 에 반올림으로 올린것이 아니다
	}

}

foreach (foreach 쓰고 alt + space)

배열에 들어간 전체 데이터에 대해서 처리를 해야하는 경우

=> foreach : 배열 데이터를 순서적으로 반복할 때마다 한개씩 꺼내서 선언한 변수에 넣고 처리한다

score 를 만들어 scores 배열을 순차로 넣는다

맨 위에서[0] 부터 배열을 꺼내줌

for (int score : scores) {
			System.out.println(score);
		}
		
		// foreach 를 이용해서 sum 을 구해라
		sum = 0;
		for (int score : scores) {
			sum += score;
						
		}
		System.out.println("foreach 를 활용한 합계 : " + sum);

while 무한 반복문

나오는법

  1. while 반복문을 빠져 나가게 해서 자연 종료 되게 한다.

1-1 break 사용 -> loop_while:

while 빠져나가서 메인 끝나는 곳으로 빠져나감

//switch, for ,while 중 소속되어 있는곳 빠져나가는 코드

//switch 만 빠져나감 -> 밖에서 while 한번더 빠져나가야함

//while문 시작 전에 loop_while: 지정 -> case 0 번 에 break loop_while; 해주면 라벨 붙이면 break 로 종료됨

2.main()을 빠져 나가게 return 시킨다

sc.close();

return; 스케너 close 를 리턴 위에 해줘야함 메인까지 안넘어가서

  1. 프로그램 종료하는 처리를 시킨다 JRE 강제 종료

    sc.close();

    System.exit(0); 프로그램 종료 시킨다. 0은 정상종료 나머지는 비정상

import java.io.IOException;
import java.util.Scanner;

public class WhileExample {

	public static void main(String[] args) throws IOException {
//		int i = 1;
//		
//		
//		while(i <= 10) {
//			System.out.println(i);
//			i++;
//			//증가 시켜줘야 무한루프 안돈다ㅋㅋㅋㅋ
//		}
//		for(int j = 1; j<= 10; j++) {
//			System.out.println(j);
//		}
		
		//메뉴 만들기 반복문을 이용하여
		//사이트의 시작입니다. <- 출력
		
		
		System.out.println("사이트의 시작입니다.");
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("========== [ 사이트에 방문하신 것을 환영합니다. ] =============");
		
		
		//메뉴 처리한다.
		//메뉴 출력~ 입력 처리 까지 무한반복
		
		//while 문 안에 이름표 붙여높음
		loop_while:    //-1번 방법
		
		while(true) {
			//메뉴 출력
			System.out.println("<< Main menu >>");
			System.out.println("-----------------------------------------------------");
			System.out.println("메뉴를 선택해 주세요" + "\n" +"1. 공지사항   2. 게시판  3. 이미지" + "\n" + "4. 질문답변  5. 회원관리  0. 종료");
			System.out.println("-----------------------------------------------------");

			//메뉴 입력 받는다.
			System.out.println("메뉴 입력 ->");
			String menu = sc.nextLine();
			//if 문은 equals 로 비교한다
			
			
			switch (menu) {
			case "1":
				System.out.println("1. 공지사항 처리함.");
				break;
			case "2":
				System.out.println("2. 게시판 처리함");
				break;
			case "3":
				System.out.println("3. 이미지 처리함.");
				break;
			case "4" :
				System.out.println("4. 질문답변 처리함");
				
				break;
			case "5" :
				System.out.println("5. 회원관리 처리함");
				
				break;
			case "0" :
				System.out.println("0. 프로그램 종료");
				
				break loop_while;   //-- 1번 방법  
				
				//switch, for ,while 중 소속되어 있는곳 빠져나가는 코드
						//switch 만 빠져나감 -> 밖에서 while 한번더 빠져나가야함
	//while문 시작 전에 loop_while: 지정 -> case 0 번 에 break loop_while; 해주면 라벨 붙이면 break 로 종료됨
				

				
				
				//while 무한 반복문
				//나오는법
				//1. while 반복문을 빠져 나가게 해서 자연 종료 되게 한다.
				//1-1 break 사용 -> loop_while:
				//while 빠져나가서 메인 끝나는 곳으로 빠져나감 
				
				//2.main()을 빠져 나가게 return 시킨다
				//sc.close();
				//return;  2번 리턴 쓰는방법 스케너 close 를 리턴 위에 해줘야함 메인까지 안넘어가서 
				
				
				//3. 프로그램 종료하는 처리를 시킨다 JRE 강제 종료
//				sc.close();
//				System.exit(0);// 프로그램 종료 시킨다. 0은 정상종료 나머지는 비정상
 
			default :
				
				System.out.println("***************************************");
				System.out.println("메뉴를 잘못 입력하였습니다.1~5, 0 중에서 하나를 입력해 주세요.");
				System.out.println("***************************************");
				break;
			}//end of switch case
			//1번 방법
			//빈줄 한개 넣기
			System.out.println();
			
			
			
		}// end of while(true)
		sc.close();
		
	}// end of main()
}

다시 반복문의 처음으로 돌아가는 코드(while, for) switch, if

continue;

--데이터 통신에서 자주 쓰임 (저장소가 꽉차면 한번 올라가라~ 이런느낌)

버퍼 에서 도 쓰임 데이터가 꽉찰때까지 안나가서 위로 올라가라고 할때


public class ContinueExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//1~10 숫자 중에서 짝수를 출력하는 프로그램 작성
		// 수열 은 for 가 쓰기 좋음
		
		
		for (int i = 1; i <= 10; i++) {

			// 홀수이면 아래를 실행하지 말고 반복문의 맨처음 으로 이동하자 -continue
			if (i % 2 != 0)
				continue;
			
			System.out.println(i);
		}

		//2의 배수를 출력
		for (int i = 2; i <= 10; i += 2) System.out.println(i);
		
		// 1~10까지 출력한다 - 3개씩 한줄에
		for (int i = 1; i <= 10; i += 1) {
			System.out.print(i + "  ");
			//i 가 3까지는 찍혀야함
//			if(i % 3 == 0){
//				System.out.println();
//			}
			
			if(i % 3 != 0)continue; {
				System.out.println();
			}
		}
	}
}

좋은 웹페이지 즐겨찾기