- 식(expression) - 변수,연산자,메서드 호출로 구성되며 단일값으로 평가된다.
- 문(statement) - 실행이 완료되는 프로그램의 단위
- (expression 문, 선언문, 흐름제어문 등)
- 블럭(block) - {}안에서 0개이상의 그룹을 이루는 것.
문(statement)
조건문,반복문,그리고 변수선언문,대입문,호출문 등
프로그램을 구성하는 실행이 완료되는 가장 작은 단위의 코드.
프로그램은 한개 이상의 일련의 문(statement)들로 구성되어 있음.
- statement 의 종류
- 실행문
- 선언문 - 변수를 선언하는 문
- expression문
- 대입식,단일항연산자,메서드 호출,객체생성식 등,
- 실행이 완료가능한 식으로 구성됨.
- 제어문 - 프로그램의 실행흐름을 제어하는 문
- 비실행문
- 주석문,프로그램의 설명을 기술한 statement
- Doc-comment : /** ..*/ javadoc 에서 사용
- Block-comment : /* .. */
- End-Of-line comment : //
- 제어문
- 프로그램의 실행순서를 제어하는 문
- 의사결정문(조건문) - 조건에 따라서 실행할 문들을 결정.
- if, switch
- 반복문 - 반복해서 실행하게 하는 문
- for, while, do-while
- 분기문 - 진행순서를 바꾸는 문.
- break, continue, return 문
[제어문]
- 의사결정문(조건문), 조건에 따라서 실행할 문들을 결정.
- if문
- 단순if문 - if (조건식) {}
- if else문 - if (조건식) {} else {}
- 다중 if문 - 조건이 여러개인 경우
- if (조건식1) {} else if (조건식2) {} else if(조건식3) {} else {}
- 중첩 if문 - if 문 안에 if 문
- * dangling else 처리 - brace 없는 if문- 중첩 if문에서 사용된 else는 가장 안쪽에 있는 if문에 속한 것으로 약속한다.예) if ( a<10 )if ( b<10 ){...}else { ...} //else 는 안쪽 if문에 속한다.
- switch문
- 식의 결과에 따라 수행되는 실행경로를 가질수 있는 문 (# 아래 참조)
- 반복문 - 반복해서 실행하게 하는 문
- for, while, do-while
- 분기문 - 진행순서를 바꾸는 문.(break, continue, return 문)
- break
- 반복문(for,while,do-while)의 block을 벗어나기 위해 사용
- if, switch 블럭을 빠져나오기 위해 사용.
- 실행중인 statement의 블록이 종료되고,블록 바로 다음의 문이 실행.
- 실행중인 문의 블록이 if 문인 경우, 상위 반복문의 블럭까지 빠져나옴.
- continue
- 반복문의 블럭내에서 다음 문들을 수행하지 않고 조건식으로 돌아가기 위해서 사용
- while(조건식) {
- 문장1;
- if(조건식) { // if 조건식이 만족된 경우 문장2를 건너뜀.
- continue;
- }
- 문장2;
- }
- return
- 프로그램의 제어가, 호출된 메서드에서 호출한 메서드로 이동.
- 반환값이 있는 경우 값이 전달됨.
- 메서드의 일부를 실행하지 않고 빠져나오기 위해 사용.
====================================================
문자열의 비교(String 클래스의 사용)
1. 값의 비교
String a= args[0]; //args "나철수"
if(a.equals("나철수")) {...} // true
2. 인스턴스의 비교
String a= new String("나");//객체의생성
String b= new String("나");//또다른 객체의생성
String res = "다르다";
if (a==b) res = "같다";
System.out.println(" == 비교결과 : " + res + "입니다.");
if (a.equals(b)) res = "같다";
System.out.println(" equals 비교결과 : " + res + "입니다.");
==================================
== 비교결과 : 다르다입니다.
equals 비교결과 : 같다입니다.
* java는 문자열을 class로 생성한 객체처리
== 는 주소값 비교
equals는 값 value 비교
# switch문
식의 결과에 따라 수행되는 실행경로를 많이 가질 수 있는 문
switch식의 결과와 일치하는 case label문들을 실행
- 조건으로 사용할 수 있는 자료형으로 4가지 정수형(byte,short,int,char) enum타입, Wrapper클래스가 사용됨.
(jdk1.7 에서는 String형도 허용함.)
- 일단 switch블럭 내에서 실행되면
일치되는 case label이 아니더라도 계속해서 끝까지 실행됨.
- 중간에 빠져나오기 위해9서, break문을 사용
- break와 default는 필요에 따라 삭제 가능.
# if문과 switch문의 비교
- if문은 조건식의 결과값이 true/false 이고,
- switch문의 조건식의 데이터 타입으로 4가지 정수 enum,Wrapper,그리고 String형을 허용
- if 문은 값 또는 범위를 표현 가능
- switch문은 값을 표현하는 식만 test 가능
- 실행 경로가 많은 경우에는 switch문이 가독성이 좋음.
# 반복문
- 조건식의 결과에 따랄서 실행문(들)의 반복수행을 가능하게 하는 문
- 반복횟수의 지정 및 무한루프도 가능
- for 문
- 조건식이 만족되는 동안 블럭내의 문들을 실행
- *단일 for (초기화식; 조건식; 증감식) { }
- 실행순서
- 초기화식
- 조건식<---ㄱ
- 증감식 ____」
- *중첩 for문도 가능
- *향상된 for문 : Collection이나 배열과 함께 사용
- for (변수선언 : Collection또는 배열명) {}
- collection 또는 배열의 각 item이 그 변수에 대입되며 블록내에서 그 변수를 활용
- 집합체로부터 원소를 얻어서 반복수행가능.
- while 문
- 조건식만 지정되 있고,초기식과 증감식은 별도 위치에 지정.
- 초기식;
- while(조건식) {
- 증감식;
- }
- do while 문
- 루프의 맨 아래에서 조건식을 평가
- 반복되는 문장을 반드시 한번은 실행하고 조건을 검사
- while문 마지막에는 반드시 ; 을 붙여야 함
- 초기식;
- do {...
- }(조건식)
- for - 반복횟수가 정해져 있거나,예측하기 쉬운경우
- while 이나 do-while문은 반복횟수가 정해져 있지 않은 경우.
# test21 => Scanner 등장.
- Scanner class - 사용자로부터의 입력
- java.util.Scanner 를 import 한다.
- import java.util.Scanner;
- 표준입력으로부터 입력값을 전달받도록 객체생성
- Scanner sc = new Scanner(System.in);
- 생성된 Scanner로부터, 하나의 입력된 문자열을 얻기
- String s = sc.next();
- 입력된 문자열이 정수형태의 문자열이면, next() 사용해서 변환된 정수로 얻을수 있다.
- int i = sc.nextInt(); //"100" → 10
- Enter Key를 치기전까지 한 라인의 모든 문자열을 입력받음
- String s = sc.nextLine();
- 분기문
- break
- 반복문(for,while,do-while)의 block을 벗어나기 위해 사용
- if, switch 블럭을 빠져나오기 위해 사용.
- 실행중인 statement의 블록이 종료되고,블록 바로 다음의 문이 실행.
- 실행중인 문의 블록이 if 문인 경우, 상위 반복문의 블럭까지 빠져나옴.
- continue
- 반복문의 블럭내에서 다음 문들을 수행하지 않고 조건식으로 돌아가기 위해서 사용
- while(조건식) {
- 문장1;
- if(조건식) { // if 조건식이 만족된 경우 문장2를 건너뜀.
- continue;
- }
- 문장2;
- }
- return
- 프로그램의 제어가, 호출된 메서드에서 호출한 메서드로 이동.
- 반환값이 있는 경우 값이 전달됨.
- 메서드의 일부를 실행하지 않고 빠져나오기 위해 사용.
- Lable문
- 어떤 문들은 label을 가질수도 있다.
- - for, while, do-while, switch, if문, 블럭
- labeled break문은 중첩된 labeled-반복문 또는 labeled-if문, labeled-블럭을 벗어나기 위해 사용.
- labeled continue 문은 실행을 건너뛰고,labeled-반복문으로 가기위해 사용된다.
- label은 scope내에 sub문장의 label명과 일치해서는 안된다.
--------------------------------------------------------------------
[문제1] dangling else 문제
number=3, 아래 코드의결과?
int n = 3;
if (n >= 0)
if (n == 0)
System.out.println("A");
else
System.out.println("B");
System.out.println("C");
==> 결과
B
C
number=3, 아래 코드의결과?
int n = 3;
if (n >= 0)
if (n == 0)
System.out.println("A");
else
System.out.println("B");
System.out.println("C");
==> 결과
B
C
[문제2] mm=22 일때 결과?
int mm=22;
switch (mm/2) {
default: System.out.println("@1"); //break;
case 10: System.out.println("@2"); //break;
case 20: System.out.println("@3"); //break;
case 30: System.out.println("@4"); //break;
}
int mm=22;
switch (mm/2) {
default: System.out.println("@1"); //break;
case 10: System.out.println("@2"); //break;
case 20: System.out.println("@3"); //break;
case 30: System.out.println("@4"); //break;
}
==>
@1 ---- 이거지만 break가 없어서 아래있는 모든 경우가 다 실행됨.
@2
@3
@4
[문제3] 실행문1은 각각 몇번 실행되는가?
public static void main(String[] args) {
int cnt = 0;
int i = 0;
//1 -- 100
for (i = 1; i <= 10; i++) {
for (int j = 1; j <=10; j++) {
cnt++;
}
}
System.out.println("@1_"+cnt);
//2 -- 1~10 합계 -- 55
cnt = 0;
for (i = 1; i <= 10; i++) {
for (int j = i; j <=10; j++) {
cnt++;
}
}
System.out.println("@2_"+cnt);
//3 --10*(5+4+3+2+1) / 5 ==> 30
cnt = 0;
for (i = 1; i <= 10; i++) {
for (int j = i; j <=10; j+=2) {
cnt++;
}
}
System.out.println("@3_"+cnt);
//4 -- 18
cnt = 0;
for (i = 1; i <= 10; i++) {
for (int j = i; j <=10; j*=2) {
cnt++;
}
}
System.out.println("@4_"+cnt);
}
==========================
@1_100
@2_55
@3_30
(i,j)=(1,1)
(i,j)=(1,2)
(i,j)=(1,4)
(i,j)=(1,8) ==> 1,10 이 안걸리는 이유? *2 이므로 1,2,4,8, (16)
(i,j)=(2,2)
(i,j)=(2,4)
(i,j)=(2,8)
(i,j)=(3,3)
(i,j)=(3,6)
(i,j)=(4,4)
(i,j)=(4,8)
(i,j)=(5,5)
(i,j)=(5,10)
(i,j)=(6,6)
(i,j)=(7,7)
(i,j)=(8,8)
(i,j)=(9,9)
(i,j)=(10,10)
@4_18
@1 ---- 이거지만 break가 없어서 아래있는 모든 경우가 다 실행됨.
@2
@3
@4
[문제3] 실행문1은 각각 몇번 실행되는가?
public static void main(String[] args) {
int cnt = 0;
int i = 0;
//1 -- 100
for (i = 1; i <= 10; i++) {
for (int j = 1; j <=10; j++) {
cnt++;
}
}
System.out.println("@1_"+cnt);
//2 -- 1~10 합계 -- 55
cnt = 0;
for (i = 1; i <= 10; i++) {
for (int j = i; j <=10; j++) {
cnt++;
}
}
System.out.println("@2_"+cnt);
//3 --10*(5+4+3+2+1) / 5 ==> 30
cnt = 0;
for (i = 1; i <= 10; i++) {
for (int j = i; j <=10; j+=2) {
cnt++;
}
}
System.out.println("@3_"+cnt);
//4 -- 18
cnt = 0;
for (i = 1; i <= 10; i++) {
for (int j = i; j <=10; j*=2) {
cnt++;
}
}
System.out.println("@4_"+cnt);
}
==========================
@1_100
@2_55
@3_30
(i,j)=(1,1)
(i,j)=(1,2)
(i,j)=(1,4)
(i,j)=(1,8) ==> 1,10 이 안걸리는 이유? *2 이므로 1,2,4,8, (16)
(i,j)=(2,2)
(i,j)=(2,4)
(i,j)=(2,8)
(i,j)=(3,3)
(i,j)=(3,6)
(i,j)=(4,4)
(i,j)=(4,8)
(i,j)=(5,5)
(i,j)=(5,10)
(i,j)=(6,6)
(i,j)=(7,7)
(i,j)=(8,8)
(i,j)=(9,9)
(i,j)=(10,10)
@4_18
댓글 없음:
댓글 쓰기