저번시간까지는 단항, 이항 연산자를 배워봤다. 이번 시간부터는 삼항 연산자를 공부하면서 조건문의 필요성에 대해서
알아볼 것 이다.
>삼항 연산자
조건식? 참이면 오는 부분: 거짓이면 오는 부분
조건식? 참일때의 값 : 거짓일때의 값
ex) number>0? "양수입니다" : "음수입니다"
:삼항연산자는 사용부분 통째로 값
ex) result = number>0? "양수입니다" : "음수입니다" // result라는 공간에 값이기 때문에 넣을 수 있다.
경우의 수가 단 두가지의 값으로 나올 경우에 사용
(why? 너무 길어지고 복잡해진다)
ex) 정수를 입력하면 양수 or 0 or 음수인지 출력해줘야 하는경우
result = num>0? "양수입니다" : num==0? "0입니다" : " 음수입니다 "
System.out.prinln(num+ "은(는)" +result);
그러므로 삼항 연산자대신 보통 우리는 제어문을 사용하게 된다. 지금 부터는 제어문에 대해 알아보자.
>제어문
:위에서 아래로만 흐르던 코드의 흐름을 제어하기 위한 문장
1) 조건문(선택제어문)
if ~ else if ~else
switch ~ case ~dedault
2) 반복문(반복제어문)
while, do~while
for
>조건문
:사용하는 때
1)조건에 따라 경우의 수를 나눌 때 (a>0 a<0?)
2)흐름을 여러가지로 나눌 때
3)선택지를 주어줄 때 (너 A형이야 B형이야?)
4)특정한 상태를 물어볼 때 (입력한게 3이니? 입력한 비밀번호가 abcd니?)
>>if문
if(조건식){
조건식의 연산결과가 true일때 수행할 문장
...
}else if(조건식 2){
조건식 2의 연산결과가 true 일때 수행할 문장
...
}else{
위의 조건식들이 모두 false일때 수행할 문장
}
조건식 중 하나가 참이라면 내부 내용을 수행하고 세트를 탈출한다.(아래 내용은 하지 않는 다).모든 조건식들이 거짓이라면 else 문까지 내려가서 그 내부를 수행한다.
* 또한 출력할 조건식이 한개이고 false인 경우 아무것도 출력을 안한다면 else if 와 else문은 생략이 가능하다.
ex1)분기처리(하나하나 나눠서 출력한다)
int num = 0;
System.out.println("정수: ");
num = sc.nextInt();
if(num>0) {
System.out.println("양수입니다");
}else if(num<0) {
System.out.println("음수입니다");
}else {
System.out.println("0입니다");
}
ex2)일괄처리
String result ="0입니다";
if(num > 0) {
result ="양수입니다";
}else if(num<0) {
result = "음수입니다";
}
System.out.println(result);
}
}
2)문자열 맞는지 비교할때 "문자열1".equals("문자열2)
Scanner sc = new Scanner(System.in);
String msg1 = "Hello";
String msg2 = "";
System.out.println("인사 해주세요 ~");
msg2 = sc.next();
if(msg1.equals(msg2) ) {
System.out.println("인사받아줘서 고마워요♥");
}else {
System.out.println("성격이 참 좋으시네요^^");
}
3)선택지를 줄 때
Scanner sc = new Scanner(System.in);
int choice = 0;
System.out.println("다음 중 프로그래밍 언어가 아닌것은? \n1. C언어\n2. Java\n3. 망둥어 \n4.파이썬 ");
choice = sc.nextInt();
//
if (choice == 3) {
System.out.println("정답입니다.");
} else if (choice == 1 || choice == 2 || choice == 4) {
System.out.println("오답입니다.");
} else {
System.out.println("잘못 입력하셨습니다.");
}
>>switch문
:경우의 수가 변수에 담긴 값 등가 비교(==)로 인해 나뉠 때 사용.
변수에 담긴 값에 따라 알맞는 case로 이동하고 문장을 실행한다. (진입점 선택)
하지만 그 밑에 case가 더 있다면 그 안에 있는 문장들도 실행된다.
따라서 각 케이스들을 나눠어 주려면 알맞게 break;를 사용해야한다.
switch(변수){
case 값1:
변수에 답긴 값이 값1일때 수행
break;
case 값2:
변수에 답긴 값이 값2일때 수행
break;
...
default:
위의 값들이 아닐 때 수행
}
-->기타 제어 break : 속해있는 switch문이나 반복문을 탈출한다.(if문은 탈출하지 않는다)
continue
ex)예제1
Scanner sc = new Scanner(System.in);
int choice = 0;
System.out.println("다음 중 프로그래밍 언어가 아닌것은? \n1. C언어\n2. Java\n3. 망둥어 \n4.파이썬 ");
choice = sc.nextInt();
switch (choice) {
case 3:
System.out.println("정답입니다");
break;
case 1:
case 2:
case 4:
System.out.println("오답입니다.");
break;
default:
System.out.println("잘못 입력하셨습니다.");
}
ex)위의 문자열 switch로 바꿔보기
String hi = "";
String hi1 ="Hello";
System.out.println("인사해주세요~");
hi = sc.next();
switch(hi) {
case "Hello":
System.out.println("반가워요");
break;
default:
System.out.println("이쁘게 말씀해보세요");
}
}
>>누적 대입 연산자(복합 대입 연산자, 누적 연산자)
+= -= /= %= *=
여기서 하나의 문제를 보자.
int data = 5;
System.out.print(data+5);
system.out.print(data); --> 이값은 5이다.
data+5 한다고 10이 추가가 되지 않는다. 왜냐하면 data = 10이라고 정의 하지 않는다면 값이 아니기 때문이다.
그래서 값을 추가하고 싶을때는 data = date +5 라는 식을 적어주어야 한다.
또한 우리는 이 식을 짧게 표현 할 수 있다.
data += 5; (data 공간에 5만큼 더해서 넣어라!) 의 의미이다.
ex)문자열의 누적 대입 연산
String msg = "A";
msg = msg + "B"; //"AB" (msg += "B" 가능)
*주의
msg = "B" +msg; //"BA" (msg += "B" 불가능)
>>증감 연산자
data += 1 ----> data++;
data - = 1 -----> data--;
1) 전위형
: 해당 줄부터 적용
int data = 10;
System.out.println(++data); // 이것은 1 + data = data 의 의미
그러므로 10을 대입하여 바로 11이 됨.
System.out.println(data); // 11
2) 후위형 :다음 줄 부터 적용 int data = 10; System.out.println(data++); // 이 경우는 data = data +1 이므로 data 만 그대로 출력후 다음 단계에서 11이 된다. System.out.println(data); // 11
>>반복문
: 특정한 코드나 행위를 반복해야 할 때 사용하는 문장
조건에 의한 반복문: while , do~while
횟수에 의한 반복문: for
>>while
while(조건식){
조건식이 참일동안 반복할 문장
}
조건식 검사 -> 참이라면 내부수행, 거짓이면 탈출
->조건식 재검사 -> 참이라면 내부수행,거짓이면 탈출
->조건식 재검사 ...
ex)
int choice =0;
while(choice != 3) {
System.out.println("다음 중 프로그래밍 언어가 아닌것은? \n1. C언어\n2. Java\n3. 망둥어 \n4.파이썬 ");
choice = sc.nextInt();
if(choice == 3) {
System.out.println("정답입니다.");
}else if(choice == 1 || choice == 2 || choice== 4 ){
//~이고,~고,~하고, 그리고,~이며, ~하며 : &&
//~또는, ~혹은, ~거나 : ||
System.out.println("오답입니다.");
}else {
System.out.println("잘못 입력하셨습니다.");
}
>>do ~while문
:while문과 동일하지만 처음 한번은 무조건 실행한다.
(값을 초기화 했는데 입력값이 0이면 값이 0으로 들어가서 조건식으로 들어가기 전에
끝나버린다 그래서 do가 처음에 한번 먼저 실행하게 만들게 함으로써 그런 오류를 막을수 있다.)
do{
}while(조건식);
내부수행 -> 조건식 검사 -> 참이라면 내부수행, 거짓이면 탈출
->조건식 재검사 ->참이라면 내부수행, 거짓이면 탈출
->조건식 재검사...
ex)
int choice =0;
do {
System.out.println("다음 중 프로그래밍 언어가 아닌것은? \n1. C언어\n2. Java\n3. 망둥어 \n4.파이썬\n0.나가기");
choice = sc.nextInt();
if(choice == 3) {
System.out.println("정답입니다.");
}else if(choice == 1 || choice == 2 || choice== 4 ){
System.out.println("오답입니다.");
}else if(choice==0) {
System.out.println("안녕히 가세요....");
}else {
System.out.println("잘못 입력하셨습니다.");
}
}while(choice != 0);
>>무한반복 while(true)
while(true){
무한반복할 문장
}
while 문 뒤에 ()안에 조건식, 즉 boolean 타입의 값이 와야한다.
따라서 그 안에 true라는 값을 넣을 수 있고, 그 값은 상수로 작성했기
때문에 변하지 않는다. 따라서 그 while문은 무한정으로 반복하게 된다.
안에서 특정한 조건을 if문으로 만들어 주고 그 떄 break를 통한
탈출구 하나 이상을 만들어 주어야 한다.
ex)
while(true) {
System.out.println("다음 중 프로그래밍 언어가 아닌것은? \n1. C언어\n2. Java\n3. 망둥어 \n4.파이썬\n0.나가기");
choice = sc.nextInt();
if(choice == 3) {
System.out.println("정답입니다.");
break;
}else if(choice == 1 || choice == 2 || choice== 4 ){
System.out.println("오답입니다.");
}else if(choice==0) {
System.out.println("안녕히 가세요....");
break;
}else {
System.out.println("잘못 입력하셨습니다.");
}
}
'프로그래밍 > Java 정리' 카테고리의 다른 글
Java 6일차 -메소드 (0) | 2021.11.23 |
---|---|
Java 4일차 -for문 (0) | 2021.11.23 |
Java 5일차 -배열 (0) | 2021.11.22 |
Java 2일차 -변수 (0) | 2021.11.17 |
Java 1일차 (1) | 2021.11.16 |