5~6. 조건문 & 반복문(contains/점수조건/equals/합/삼각형/원 만들기) [프로젝트명 : Tutorial5, 6]
(Tutorial5)
*기본 데이터 타입 복습
---
byte - 1byte(8비트)
short- 2byte(16비트)- 작은 정수를 표현할 때 사용
int - 4byte(32비트)
long-8byte-int보다 더 큰 정수
---
float -4byte -실수
double-8byte- 더 큰 실수
---
boolean- false or true
---
char - 2byte
*헷갈리는 연산자
i++, ++i는 모두 1씩 증가시키는 것은 같으나, 출력함수 내에서는 역할이 다르다
i++ : 1을 더한 다음 출력 / ++i : 출력 후 1을 더함
i++ 와 i+=1;과 i = i+1은 모두 동일한 표현이라 할 수 있다.
---
100 < x < 200 을 프로그래밍 언어로 표현 하는 것은 잘못된 표현이다
( 100 < x ) &&( x < 200 ) 으로 앤드 연산자를 사용해서 표현해야한다.
---
<조건문>
조건문과 반복문은 프로그래밍에 있어서 논리의 흐름을 정하는 가장 기본적인 기술이다.
1. if문을 이용해서, 특정 문자열을 포함하는지 확인하는 프로그램을 작성해보자.
- String 변수는 비원시적 자료형으로서, 클래스기반으로 생성되어 있으며, 내부적인 함수를 변수. 으로 확인할 수 있다. 이 중에 contains를 이용해보자
public static void main(String[] args) {
String a = "I Love You.";
if(a.contains("Love")) {
System.out.println("Me too.");
}else {
System.out.println("포함하지 않네요");
}
}
(Tutorial6)
2. if-else if-else문을 이용해서, 점수에 따라 다른 메세지를 출력하는 프로그램을 작성해보자.
- 큰 점수를 기준으로해서 >= 크거나 갔다의 조건문을 if - else if - else(마지막은 else로 끝나자**)순으로 사용하자
(if와 else로 보통 2개 조건만 거는데, 3개 이상의 조건에서 가운데 else if를 삽입한다고 생각)
public static void main(String[] args) {
int score = 95;
if(score >= 90) {
System.out.println("A+입니다.");
}else if(score >= 80){
System.out.println("B+입니다.");
}else if(score >= 70){
System.out.println("C+입니다.");
}else
System.out.println("D+입니다.");
}
}
3. 문자열과 정수형을 각각 조건문을 이용해 활용해보고 차이점을 알아보자.
(1) 자바에서는 String을 비교할 때, equals() 매쏘드를 사용한다. 그 이유는 타 자료형과는 다른 비원시적 자료형이기 때문이다.
(내부 클래스 기반의 함수를 가짐)
String a ="Man";
int b = 0;
if(a.equals("Man")) {
System.out.println("남자입니다.");
}else {
System.out.println("여자입니다.");
}
if(b ==3) {
System.out.println("b는 3입니다.");
}else {
System.out.println("3이 아닙니다.");
}
(2) String의 비교연산자 중에 equalsIgnoreCase()는 대소문자 상관없이 문자열을 비교할 수 있다.
if(a.equalsIgnoreCase("man") && b == 0) {
System.out.println("a는 대소문자 상관없이 man이고, b는 0입니다.");
}else {
System.out.println("a는 대소문자 상관없이 man이 아니거나 b는 0이 아닙니다.");
}
<반복문>
4. while문을 이용해서 1부터 1000까지 합을 출력해보자.
- while문은 true일 때까지 돌아간다. i는 1부터, 1000까지 총 1000회를 돈다.
- while 안에서 i++;는 대입이 다 끝난 뒤에, 1이 더해진다. 즉, sum+=i++; 에서 최초의 i값을 대입한 뒤에 i에다가 1이 더해진다.
(1로 먼저 계산하고, 2가 된다)
int i = 1, sum = 0; //동시에 int형 변수를 선언할 수 있다.
while(i <= 1000) {
sum += i++; //sum에 sum+ i를 대입하고 난뒤 i가 +1된다.
}
System.out.println("1부터 1000까지의 합은 " + sum + "입니다.");
< FOR문 해석 : ~부터 ~까지 1씩 증가시켜서 반복>
5. 이중 for문을 이용해서 삼각형을 출력해보자. for문의 구성은 for(초기화 부분, 조건부분, 증감연산자) 로 구성된다.
(1) 상수를 클래스 전역변수로 하나 만들자.
final static int N = 30;
(2) 초기화 부분의 변수 i는 N=30부터 시작해서, i가 0보다 클 때까지 반복한다. 1씩 내려가다가 1까지 계산된 뒤 멈춘다. 출력을 하면,
* 이 줄바꿈하면서 총 30개가 출력된다. 바깥 for문은 줄바꿈 30줄 하는 것으로 쓰일 것이다. 그리고 j가 30부터 1까지 사용될 것이다.
for(int i = N; i> 0; i --) {
System.out.println("*");
}
(3) 이중 for문으로서, j는 i부터 시작해서,, j가 0보다 클 때까지, j를 하나씩 빼준다. 이때, println이 아니라 별이 붙어나오도록 ln을 뺀다.
(4) 문자열이 없는 println(); 만 호출해줘서 줄바꿈이 되도록 한다.
for(int i = N; i> 0; i --) {
// 초기화 부분의 변수 i는 N=30부터 시작해서, i가 0보다 클 때까지 반복한다. 1씩 내려가다가 0이 되면 멈춘다.
for(int j = i; j>0 ; j--) { //j는 30일때부터 시작해 1까지 가고, 또 29부터 시작해서 1까지 가고.. 를 반복
System.out.print("*");
}
System.out.println();
}
< 해석할 때, i를 먼저 고정시켜서 해석한다. >
i가 30일때, j는 30부터 1까지 총 30번이 반복되면서 30개의 별이 붙어서 출력된다. + 줄바꿈한다.
i가 29라면, j는 29부터 1까지 총 29개의 별을 붙혀 출력된다. +줄바꿈한다.
...
i가 1이라면, j는 1개의 별을 붙혀서 출력한다.+줄바꿈한다.
6. for문을 이용해서 원을 출력하는 프로그램을 작성해보자.
- x^2 + y^2 = r^2 원점을 중심으로 하는 원의 방정식의 원리를 도입할 것이다.
(1) 처음 상수를 15로 선언하자.
final static int N = 15;
(2) for문을 i는 -N부터 시작해서 / N까지/ 1씩 증가시키면서, 줄바꿈을 할 것이다.( 총 (2N + 1) 번의 줄바꿈)
(3) 이중for문에는 j가 -N부터 시작해서 N까지 1씩 증가시키면서 ( 가로도 2N+1 만큼 차지, i 와 무관)
i를 x, j를 y로 생각하고 원의 방정식을 만든다. 만약 반지름 내부라면 "*" 를 출력하고, 반지름 밖이라면 " " 공백을 출력하도록 하자
public class Main {
final static int N = 15;
public static void main(String[] args) {
// x^2 + y^2 = r^2 원점을 중심으로 하는 원의 방정식
for ( int i = -N; i<=N ; i++) {
for( int j = -N ; j <=N ;j++) {
if(i*i + j*j <= N*N) {
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
<해석>
가로, 세로 2n+1의 격자안에서
i가 -15 일때, +15까지 총 31번을 줄바꿈 할 것이다.(N이 홀수어야 한다?)
i가 -15라면, j는 -15부터 +15까지 31번을 반복하여, 붙혀서 출력하는데, 원의방정식 내부에 *를 출력한다. 원이아니라면 공백을 출력한다.
i가 -14라면, j는 -15부터 +15까지 31번을 반복하여, 붙혀서 출력...
- j는 i에 영향을 안받고, 정해진 N에 의해, 무조건 31개를 붙혀서 출력하며, 원의공식에 따라서 원 내부에 *를 찍는다
- i는 N에 의해 31개부터 1까지 줄어들면서 줄바꿈을 한다.
7. for(;;) / white(true)는 무한루프 이며, break로 탈출할 수 있다.
int count = 0;
for(;;)
{
System.out.println("출력");
count++;
if(count==10) {
break;
}
}
'Java > 기초 튜토리얼' 카테고리의 다른 글
8~9. 사용자 정의 함수(최대공약수/ k번째 약수/ 마지막문자 뽑기/ 최대값) [프로젝트명 : Tutorial8, 9] (0) | 2018.02.18 |
---|---|
7. 기본 입출력 / 파일 입출력 (Scanner/file 입출력) [프로젝트명 : Tutorial7] (0) | 2018.02.18 |
4. 연산자(operator) (증감/삼항연산/거듭제곱pow()) [프로젝트명 : Tutorial4] (0) | 2018.01.28 |
3. 변수관련 상식(반올림) 과 자료형 [프로젝트명 : Tutorial3] (0) | 2018.01.28 |
2. 변수, 상수(final, static), 오버플로, [프로젝트명 : Tutorial2] (0) | 2018.01.24 |