4-1. 조건문과 반복문
반복문 만들때 조심할것 계속 실행되는지 확인
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으로) / 한번 출력/ 숫자를 입력하면 들어가진다
-
공지사항 2. 게시판
-
질문답변 0. 종료
- 그외 잘못된 메뉴를 선택하셨습니다.
-
Scanner 생성
-
메뉴출력
-
메뉴 입력
-
입력된 메뉴 처리
-
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)
int i = 0;
for( i ; 2 .반복 조건;) {
-
처리문;
-
증감; - 밖으로 뺄수있음
}
-> while 문으로 사용 가능
int i = 0; -1번
while( 2 .반복 조건) {
-
처리문;
-
증감; - 밖으로 뺄수있음
}
for(;;) 잘 안씀 모양이 이상해서
int i = 0; 1. 조건 (없을때도 있음)
for( ; ; ) <- 무한 반복처리{
2 .반복 조건 의 반대 ( 빠져나갈 조건 주고 break; 사용해서 종료)
-
처리문;
-
증감; - 밖으로 뺄수있음
}
->while 로 무한반복
int i = 0; 1. 조건 (없을때도 있음)
while(true) <- 무한 반복처리{
2 .반복 조건 의 반대 ( 빠져나갈 조건 주고 break; 사용해서 종료)
-
처리문;
-
증감; - 밖으로 뺄수있음
}
수열 = 숫자를 나열하여 일정한 규칙 을 만든다
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 무한 반복문
나오는법
- 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 를 리턴 위에 해줘야함 메인까지 안넘어가서
-
프로그램 종료하는 처리를 시킨다 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();
}
}
}
}
Author And Source
이 문제에 관하여(4-1. 조건문과 반복문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hoan0418/4-1.-조건문과-반복문저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)