[필기정리] Day2 - 연산자, 반복문 등
for(i=0;i<3;i++)
{
System.out.println("Hi");
System.out.println("Bye");
}
/* Hi
Bye 출력
*/
#Boolean : true와 false로 이루어진 논리형 데이터타입
boolean result;
result=5>3; //true
result=5<3; //false
System.out.println(result);
# 연산자의 종류
- == : 같다
↕
- != : 같지 않다
- ! : not의 의미 (true → false로 false → true로 반대로 만들어준다)
i=i+2; // i+=2;
i=i-2; // i-=2;
i=i*2; // i*=2;
i=i/2; // i/=2;
i=i%2; // i%=2;
- 좌측과 주석 내용은 의미가 동일하다.
- %는 나머지 를 구할 때 사용한다.
// Tip : i=i+1과 i++;은 의미 상 동일하나 후자가 더 효율이 좋다.
# 증감연산식
ex)
int num1=10;
num1++;
System.out.println(num1);
int num1=10, num2=10;
int result1=0, result2=0;
result1=++num1;
result2=num2++;
System.out.println(num1+" "+num2);
System.out.println(result1+" "+result2);
★ 증감연산식 : 대입과 함께 쓰일 때 선치 - 증가 후 대입
후치 - 증가 전 대입
// Tip : 변수나 클래스명은 숫자로 시작할 수 없다($, _ 제외)
#do ~ while문
int i=10;
do
{
System.out.println("Hi");
}
while(i<3);
// 결과 : Hi 1번 출력
- 순서
① do
② {} : 블럭 내의 내용
③ while(조건);
- ① → ② → ③ → ② → ③ 순으로 조건이 거짓이 될 때까지 반복된다.
★ for, while 선체크반복문(조건이 맞지 않으면 1번도 실행하지 않는다)
do while 후체크반복문(조건이 맞지 않아도 1번은 반드시 실행된다)
- 반복문 예시문제
ex1)
int i=0;
for(i=0;i<3;i++)
System.outprintln("Hi");
System.outprintln("Bye");
/* 결과 : Hi
Hi
Hi
Bye 출력
*/
- 반복문에 {}가 없으면 바로 아래 한 문장만 소속되었다고 인지하여 가장 첫 줄만 실행됨
ex2)
int i=0;
for(i=0;i<3;i++);
{
System.outprintln("Hi");
System.outprintln("Bye");
}
/* 결과 : Hi
Bye 출력
*/
- for문 뒤를 바로 ;로 닫아주는 경우 )와 ; 사이에 빈 명령문이 있다고 자바가 판단함
★ for( ; ; ) : 조건이 없는 경우 true로 인식
( )안에 내용이 없는 것은 가능하나 ;가 없으면 컴파일 에러 발생함
while( ); : 반드시 조건이 필요함, 비워진 경우 컴파일 에러 발생함
증감식이 밖에 존재하기 때문에 while( );나 while(true) 시 무한루프 발생함
// Tip : 조건에는 true, false, 저 둘을 반환하는 조건만 가능하다.
#상수 : 변하지 않는 수
- 리터럴 콘스탄트(literal constant) ex) 5 3 2.2 -5
심볼릭 콘스탄트(simbolic constant) : 변수를 상수로 만드는 것
- 상수는 딱 한 번만 초기화가 가능하다 (이후 시도 시 에러 발생)
final int MAX=5;
- final : 상수를 지정하는 키워드
- 상수명은 전체를 대문자로 표기해야 한다.
# if, else if, else
if(5>3)
System.out.println("Hi");
else if
else
-if : 가장 먼저 작성해줘야 한다
- else if : if가 거짓인 경우 실행된다.
위의 if가 참이면 else if가 참이어도 실행되지 않는다. (if와 하나로 묶이는 것)
- else : if와 else if가 거짓인 경우 실행된다. 조건이 붙지 않는다.
//Tip : else if와 else는 반드시 위에 if가 존재해야 사용이 가능하다(단독 사용불가)
#스캐너 사용방법
import java.util.Scanner;
class SCTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in); //스캐너를 생성
int n1=0, n2=0;
System.out.println("첫 번째 숫자를 입력하세요");
n1=sc.nextInt(); //Int는 반드시 대문자로 작성할 것
System.out.println("두 번째 숫자를 입력하세요");
n2=sc.nextInt();
System.out.println("입력한 두 수는"+n1+","+n2+"입니다.");
sc.close();
}
}
Q. 임의로 주어진 5개의 수를 오름차순으로 정렬하시오.
A.
int n1=5, n2=4, n3=1, n4=3, n5=2;
int temp=0;
if(n1>n2)
{
temp=n1;
n1=n2;
n2=temp;
}
if(n1>n3)
{
temp=n1;
n1=n3;
n3=temp;
}
if(n1>n4)
{
temp=n1;
n1=n4;
n4=temp;
}
if(n2>n3)
{
temp=n2;
n2=n3;
n3=temp;
}
if(n2>n4)
{
temp=n2;
n2=n4;
n4=temp;
}
if(n3>n4)
{
temp=n3;
n3=n4;
n4=temp;
}
if(n3>n5)
{
temp=n3;
n3=n5;
n5=temp;
}
if(n4>n5)
{
temp=n4;
n4=n5;
n5=temp;
}
System.out.println(n1+" "+n2+" "+n3+" "+n4+" "+n5);
- 선택정렬(셀렉션소트)
ex) 음료 위치 옮기기
A음료와 B음료의 서로의 위치를 바꾸려고 할 때 빈 잔이 필요하듯이 temp를 빈 잔처럼 변수선언하여 사용하는 것
//Tip : 문자열과 숫자가 혼용되어 사용된 경우
System.out.println("Hi"+5+3);
/* "Hi"+"5"+"3"
결과 : Hi53 */
System.out.println("Hi"+(5+3));
/* "Hi"+(5+3)
결과 : Hi8 */
- 소괄호가 연산자 중 우선순위가 가장 높기 때문!
#continue vs break
- continue : 반복문 안에서 흐름을 바꾸어주는 것, 스킵(해당 라인을 실행하지 않기 때문)
continue를 만나면 아래 문장들을 실행되지 않는다.
ex1) for문 + continue
int i=0;
for(i=0;i<10;i++)
{
if(i>5) continue;
System.out.println("Hi");
}
System.out.println(i);
ex2) while문 + continue
int i=0;
while(i<10)
{
if(i>5) continue;
System.out.println("Hi");
i++;
}
- break : 반복문 종료
ex1)
int i=0;
for(i=0;i<10;i++)
{
if(i>5) break;
System.out.println("Hi");
}
//결과 : Hi 6번 출력 후 반복문 종료
ex2)
int i=0, sum=0;
for(i=1;true;i++)
{
sum+=i;
if(sum>5000)
System.out.println(sum);
break;
}
#&&연산자 vs ||연산자
- &&(and 연산자) : 둘 다 참일 때 참으로 인식하는 연산자
ex)
int i=1;
for(i=1;true;i++)
{
if(i%5==0)
{
if(i%7==0)
{
System.out.println(i);
break;
}
}
}
- if(i%5==0 && i%7==0)로 &&연산자를 사용하여 동일하게 표현할 수 있다.
(병렬구조는 논리이므로 묶어서 표현 가능, or도 마찬가지로 가능하다)
- ||(or 연산자) : 둘 중 하나만 참이어도 참으로 인식하는 연산자, 거짓은 전체가 거짓이어야 함!
int i=0;
for(i=1;i<=20;i++)
{
if(i%2==0)continue;
if(i%3==0)continue;
System.out.println(i);
}
- !(not 연산자)
int i=1, cnt=0;
for(i=1;i<=100;i++)
{
if(i%5!=0)continue;
if(i%7!=0)continue;
cnt++
System.out.println(cnt+" "+i);
}
#주석
- //(한 줄 주석) : 필요한 내용을 적는 메모 기능, 컴파일에서 무시된다
- /* ~ */(여러 줄 주석) : /*와 */ 사이의 내용은 컴파일에서 무시된다
ㄴ ex) 개발자 : ㅇㅇㅇ
버전 : v0.1
최종수정일 : 2020.06.11