0. 문자열의 비교 (어제꺼 복습)
- str1.equals("str4의 문자열")
: str1이 바라보는 객체의 내용과 str4가 바라보는 객체의 내용 비교
package day5;
public class StringDemo {
public static void main(String[] args) {
/*
* 문자열의 정의 방식에 따른 비교값의 차이 확인하기
*/
String str1 = "안녕하세요";
String str2 = "안녕하세요";
String str3 = new String("안녕하세요"); //원래는 String도 객체니까 객체를 만들어야 하는데, string만은 그냥 할 수 있다.
String str4 = new String("안녕하세요");
// == 연산자는 참조변수에 대해서 변수의 주소값을 비교한다.
System.out.println(str1 == str2); //true. 같은 주소값을 가지고 있다.
System.out.println(str3 == str4); //false. 서로 다른 주소값을 가지고 있다.
System.out.println(str1 == str3); //false. 서로 다른 주소값을 가지고 있다.
System.out.println(str2 == str4); //false. 서로 다른 주소값을 가지고 있다.
// String객체의 equals(other) 메소드는 참조변수가 참조하는 String객체가 포함하고 있는 문자열의 내용을 비교한다.
System.out.println(str1.equals(str2)); //true. 내용이 동일한 문자열을 포함하고 있다.
System.out.println(str3.equals(str4)); //true. 내용이 동일한 문자열을 포함하고 있다.
System.out.println(str1.equals(str3)); //true. 내용이 동일한 문자열을 포함하고 있다.
System.out.println(str2.equals(str4)); //true. 내용이 동일한 문자열을 포함하고 있다.
}
}
true
false
false
false
true
true
true
true
1. 조건문
1-1. switch문
package day5;
public class SwitchDemo1 {
public static void main(String[] args) {
/*
* switch문
* 형식
* switch(비교값) {
* case 값1:
* 수행문1;
* 수행문2;
* break;
* case 값2:
* 수행문3;
* 수행문4;
* break;
* default:
* 수행문5;
* 수행문6;
* }
* * 비교값의 타입은 정수, 문자, 문자열만 가능하다.
* * 각각의 case마다 수행문의 맨 마지막에 break문이 필요하다.
* * 비교값이 값1과 일치하면 수행문1, 수행문2가 실행되고, break문을 만나서 switch문을 빠져나간다.
* * default는 비교값이 값1, 값2와 모두 일치하지 않을 때 실행할 수행문을 정의한다.
*/
String grade = "실버";
int orderPrice = 300000;
int point = 0;
switch(grade) {
case "골드":
System.out.println("골드등급 고객의 포인트를 계산 중.");
point = (int)(orderPrice*0.03);
break;
case "실버":
System.out.println("실버등급 고객의 포인트를 계산 중.");
point = (int)(orderPrice*0.02);
break;
case "브론즈":
System.out.println("브론즈등급 고객의 포인트를 계산 중.");
point = (int)(orderPrice*0.01);
break;
default:
System.out.println("등급이 없는 고객의 포인트를 계산 중");
point = (int)(orderPrice*0.005);
}
System.out.println("============================");
System.out.println("고객등급: "+grade);
System.out.println("구매금액: "+orderPrice);
System.out.println("적립포인트: "+point);
System.out.println("============================");
}
}
실버등급 고객의 포인트를 계산 중.
============================
고객등급: 실버
구매금액: 300000
적립포인트: 6000
============================
2. 반복문
2-1. for문
- for문 개념
package day5;
public class ForDemo1 {
public static void main(String[] args) {
/*
* for문
* 형식
* for (초기식; 조건식; 증감식;) {
* 수행문;
* 수행문;
* }
*
* * 초기식은 한번만 실행
* * 조건식은 연산결과가 boolean 타입이어야 한다.
* * 조건식이 true일 때 블록 내의 수행문 실행
* * 증감식은 수행문이 실행된 후에 실행. 증감식이 실행된 다음에는 조건식이 실행되고
* 조건식의 연산결과가 true인지 false인지 확인해서 true로 판정되면 수행문을 실행하고,
* 조건식의 연산결과가 false이면 for문을 빠져나간다.
* * 실행 순서
* 초기식 -> [조건식 -> 수행문 -> 증감식] -> [조건식 -> 수행문 -> 증감식] -> ...
*
* * for문은 값을 여러개 저장할 수 있는 배열객체, 콜렉션객체(자바의 자료구조 구현객체)를 다룰 때 사용한다.
*/
}
}
- for문의 초기식, 조건식, 증감식
package day5;
public class ForDemo2 {
public static void main(String[] args) {
/*
* for문의 초기식에서 생성한 변수는 조건식, 증감식, for문의 코드블록 안에서만 사용가능하다.
* for문의 닫는 괄호를 만나는 순간 전부 삭제된다.
*/
for (int x = 1; x <= 10; x ++) {
System.out.println(x);
}
/*
* for문의 초기식, 조건식, 증감식은 모두 생략가능한 문법요소다.
*/
int index = 0;
for (; index < 10; ) {
System.out.println("인덱스값: "+index);
index++;
}
System.out.println("인덱스값을 외부에서 사용하기: "+index); //for문 밖에서 index값 선언
// 초기식, 조건식, 증감식을 모두 생략하면 무한반복문
int number = 1;
for ( ; ; ) {
System.out.println(number);
number++;
}
}
}
1
2
3
4
5
6
7
8
9
10
인덱스값: 0
인덱스값: 1
인덱스값: 2
인덱스값: 3
인덱스값: 4
인덱스값: 5
인덱스값: 6
인덱스값: 7
인덱스값: 8
인덱스값: 9
인덱스값을 외부에서 사용하기: 10
- 1부터 10까지의 숫자 합 구하기
package day5;
public class ForDemo3 {
public static void main(String[] args) {
// total은 1~10까지 숫자의 합을 저장하는 변수다.
int total=0;
for (int i=1; i<=10000; i++) {
total+=i;
}
System.out.println(total);
}
}
50005000
- 짝수의 합계와 홀수의 합계
package day5;
public class ForDemo4 {
public static void main(String[] args) {
/*
* for문과 if문 사용하기
*/
/* 1~10까지의 정수 중에서 짝수의 합계를 계산하기
* evenNumberTotal i<=10 evenNumberTotal = evenNumberTotal + i i++
* 0 1 2
* 0 2 evenNumberTotal = 0 + 2 3
* 2 3 4
* 2 4 evenNumberTotal = 2 + 4 5
* 6 5 6
*/
int evenNumberTotal = 0;
int oddNumberTotal = 0;
for (int i=1; i<=10; i++) {
if (i%2==0) {
evenNumberTotal += i;
} else {
oddNumberTotal += i;
}
}
System.out.println("짝수의 합계: "+evenNumberTotal);
System.out.println("홀수의 합계: "+oddNumberTotal);
}
}
짝수의 합계: 30
홀수의 합계: 25
- 정수 2개를 입력받아서 첫번째 정수부터 두번째 정수까지의 합계를 계산하기
package day5;
import utils.KeyboardReader;
public class ForDemo5 {
public static void main(String[] args) {
/*
* for문과 if문 사용하기
*/
// 정수 2개를 입력받아서 첫번째 정수부터 두번째 정수까지의 합계를 계산하기
// 단, 첫번째 숫자가 두번째 숫자보다 작을 때만 합계를 구한다.
KeyboardReader reader = new KeyboardReader();
System.out.print("첫번째 숫자를 입력하세요.");
int firstNumber = reader.getInt();
System.out.print("두번째 숫자를 입력하세요.");
int secondNumber = reader.getInt();
// if~else 버전
if(firstNumber<secondNumber) {
int sum=0;
for(int i=firstNumber; i<=secondNumber; i++) {
sum+=i;
}
System.out.println("["+firstNumber+"] ~ ["+secondNumber+"] 합계: "+sum);
} else {
System.out.println("숫자 범위가 올바르지 않습니다.");
}
//빠른종료 버전
if (firstNumber>=secondNumber) {
System.out.println("숫자 범위가 올바르지 않습니다.");
return;
}
int sum=0;
for(int i=firstNumber; i<=secondNumber; i++) {
sum+=i;
}
System.out.println("["+firstNumber+"] ~ ["+secondNumber+"] 합계: "+sum);
}
}
첫번째 숫자를 입력하세요. 400
두번째 숫자를 입력하세요. 500
[400] ~ [500] 합계: 45450
- for문 안의 for문
예)
영화 1개당 배우 n명을 나타낼 때
package day5;
public class ForDemo6 {
public static void main(String[] args) {
/*
* 다중 for문
* : for문 내부에 for문을 포함하고 있는 구문
*
* 형식
* for (int i=1; i<=3; i++) { // 3회 반복
* 수행문1;
* for (int j=1; j>=5; j++) { // 5회 반복
* 수행문2;
* }
* }
* * 수행문1은 3번 실행된다.
* * 수행문2는 15번 실행된다.
* * 안쪽 for문이 3번 실행될 때마다 j는 1로 초기화된다.
*/
for (int i=1; i<=3; i++) {
System.out.println("수행문1");
for (int j=1; j<=5; j++) {
System.out.println("수행문2 : ("+i+", "+j+")");
}
}
}
}
수행문1
수행문2 : (1, 1)
수행문2 : (1, 2)
수행문2 : (1, 3)
수행문2 : (1, 4)
수행문2 : (1, 5)
수행문1
수행문2 : (2, 1)
수행문2 : (2, 2)
수행문2 : (2, 3)
수행문2 : (2, 4)
수행문2 : (2, 5)
수행문1
수행문2 : (3, 1)
수행문2 : (3, 2)
수행문2 : (3, 3)
수행문2 : (3, 4)
수행문2 : (3, 5)
- break문, continue문
break문 : 반복문을 돌리다가 내가 원하는 조건에 만족하는 것을 찾았을 때 거기서 멈추고 for문을 빠져나오기
continue문 : 원하는 조건을 만족하지 않으면, 수행하지 않고 다음반복으로 넘어간다.
package day5;
public class ForDemo7 {
public static void main(String[] args) {
/*
* 반복문에서 break문과 continue의 사용
* break문
* : 반복문을 탈출한다.
* 반복작업을 수행하는 중에 원하는 목적을 이뤘을 때 반복하는 것은 의미가 없으므로 break로 탈출한다.
*
* continue문
* : 수행문이 남아 있어도 반복문의 증감식으로 프로그램 실행 흐름을 이동시킨다.
* 반복작업을 수행하는 중에 조건에 해당하지 않는 반복작업을 실행하지 않고, 다음번 반복을 수행하러 가기 위해 continue를 사용한다.
*
* * break나 continue는 반드시 제어문(if문)과 함께 사용해서 특정 조건이 만족될 때 동작하도록 구현해야 한다.
* * 반복문 안에서 break문이나 continue를 사용하면 코드의 가독성이 나빠진다.
*/
// break문
for(int i=1; i<=10; i++) {
System.out.println("i값: "+i);
if (i==6) {
break; //탈출
}
}
System.out.println();
// continue문
for(int i=1; i<=10; i++) {
if (i%3==0) {
continue; //증감식으로 이동(다음반복으로)
}
System.out.println("i값: "+i);
}
}
}
i값: 1
i값: 2
i값: 3
i값: 4
i값: 5
i값: 6
i값: 1
i값: 2
i값: 4
i값: 5
i값: 7
i값: 8
i값: 10
- 목표 금액을 모으면 기부 중단하기
상수 : 한번 정해진 값을 변경할 수 없는 저장소
package day5;
import utils.KeyboardReader;
public class ForDemo8 {
public static void main(String[] args) {
KeyboardReader reader = new KeyboardReader();
// 상수 선언하기
// 목표 펀도 자금
final int MAX_FUND_AMOUNT = 1_000_000_000;
// 현재 적립된 펀드자금을 저장하는 변수
int currentFundAmount = 0;
for (;;) { // 반복횟수를 미리 예상할 수 없으므로 무한반복하도록 지정
// 현재 적립금 펀드 자금이 목표 펀드자금 이상 모금되면 기부를 중단한다.
if (currentFundAmount >= MAX_FUND_AMOUNT) {
break;
}
System.out.print("기부액을 적으세요: ");
int amount = reader.getInt();
currentFundAmount += amount;
}
System.out.println("최종 펀드 자금: "+currentFundAmount);
}
}
기부액을 적으세요: 500000000
기부액을 적으세요: 500000000
최종 펀드 자금: 1000000000
* 미리 그림(표)을 그려볼것 !! -> 그래야 규칙을 알 수 있다
- 1. 별 5줄 찍기
/*
* #####
* #####
* #####
* #####
* #####
*/
for (int i=1; i<=5; i++) {
for (int j=1; j<=5; j++) {
System.out.print("#");
}
System.out.println();
}
#####
#####
#####
#####
#####
- 2. 트리형 별찍기
/* i j(#)
* # 1 1~1개
* ## 2 1~2개
* ### 3 1~3개
* #### 4 1~4개
* ##### 5 1~5개
*/
for (int i=1; i<=5; i++) {
for (int j=1; j<=i; j++) {
System.out.print("#");
}
System.out.println();
}
#
##
###
####
#####
- 3. 반대로 별찍기
/* i j
* ##### 1 1~5개 <= (6-i)개
* #### 2 1~4개 <= (6-i)개
* ### 3 1~3개 <= (6-i)개
* ## 4 1~2개 <= (6-i)개
* # 5 1~1개 <= (6-i)개
*/
for (int i=1; i<=5; i++) {
for (int j=1; j<=(6-i); j++) { // for(int j=5; j>=i; j--) {} 얘도 같은결과
System.out.print("#");
}
System.out.println();
}
#####
####
###
##
#
- 4. 공백포함된 별찍기
/* i j(공백) j(#)
* # (공백4 + #1) 1 1~4개 <= 5-i 1 <= i
* ## (공백3 + #2) 2 1~3개 <= 5-i 2 <= i
* ### (공백2 + #3) 3 1~2개 <= 5-i 3 <= i
* #### (공백1 + #4) 4 1~1개 <= 5-i 4 <= i
* ##### (공백0 + #5) 5 1~0개 <= 5-i 5 <= i
*/
for (int i=1; i<=5; i++) {
for (int j=1; j<=(5-i); j++) {
System.out.print(" ");
}
for (int j=1; j<=i; j++) {
System.out.print("#");
}
System.out.println();
}
#
##
###
####
#####
- 5. 공백있는 거꾸로 트리
/* i j(공백) j(#)
* ##### 1 1~0 <- (i-1) 1~5 <- (6-i)
* #### 2 1~1 <- (i-1) 1~4 <- (6-i)
* ### 3 1~2 <- (i-1) 1~3 <- (6-i)
* ## 4 1~3 <- (i-1) 1~2 <- (6-i)
* # 5 1~4 <- (i-1) 1~1 <- (6-i)
*/
for (int i=1; i<=5; i++) {
for (int j=1; j<=(i-1); j++) {
System.out.print(" ");
}
for (int j=1; j<=(6-i); j++) {
System.out.print("#");
}
System.out.println();
}
#####
####
###
##
#
- 6. 정가운데 트리
/* 전체9칸 i j(공백) j(#)
* # (공백:4, #:1, 공백:4) 1 1~4개 <- 5-i 1~1개 <- 9개-(5-i)*2(양쪽)
* ### (공백:3, #:3, 공백:3) 2 1~3개 <- 5-i 1~3개 <- 9개-(5-i)*2(양쪽)
* ##### (공백:2, #:5, 공백:2) 3 1~2개 <- 5-i 1~5개 <- 9개-(5-i)*2(양쪽)
* ######## (공백:1, #:7, 공백:1) 4 1~1개 <- 5-i 1~7개 <- 9개-(5-i)*2(양쪽)
*########## (공백:0, #:9, 공백:0) 5 1~0개 <- 5-i 1~9개 <- 9개-(5-i)*2(양쪽)
*/
for(int i=1; i<=5; i++) {
for(int j=1; j<=(5-i); j++) {
System.out.print(" ");
}
for(int j=1; j<=(9-(5-i)*2); j++) {
System.out.print("#");
}
System.out.println();
}
#
###
#####
#######
#########
- 7. 숫자트리
/* i j
* 1 1 1~i개
* 22 2 1~i개
* 333 3 1~i개
* 4444 4 1~i개
* 55555 5 1~i개
*/
for (int i=1; i<=5; i++) {
for (int j=1; j<=i; j++) {
System.out.print(i);
}
System.out.println();
}
1
22
333
4444
55555
- 8. 숫자 처음부터 반복트리
/* i j
* 1 1 1~i
* 12 2 1~i
* 123 3 1~i
* 1234 4 1~i
* 12345 5 1~i
*/
System.out.println("8.");
for(int i=1; i<=5; i++) {
for(int j=1; j<=i; j++) {
System.out.print(j);
}
System.out.println();
}
- 9. 0부터 숫자 트리
/* i j v
* 0 1 1~1개 0
* 12 2 1~2개 12
* 345 3 1~3개 345
* 6789 4 1~4개 6789
* 얘는 반복을 해도 초기화가 되지 않고 계속 이어짐
*/
int number = 0; //처음 숫자로 초기화가 되면 안되니까 for문 밖에서 초기화
for(int i=1; i<=4; i++) {
for (int j=1; j<=i; j++) {
System.out.print(number++); //number가 증가해야함
}
System.out.println();
}
- 알파벳 순서트리
package day5;
public class StarDemo9 {
public static void main(String[] args) {
/* i j v
* A 1 1~1개<-(i) 65
* BC 2 1~2개<-(i) 6667
* DEF 3 1~3개<-(i) 686970
* GHIJ 4 1~4개<-(i) 71727374
* KLMNO 5 1~5개<-(i) 7576777879
*/
int value=65;
for(int i=1; i<=5; i++) {
for(int j=1; j<=i; j++) {
System.out.print((char)value++);
}
System.out.println();
}
}
}
A
BC
DEF
GHIJ
KLMNO
- 내가 해본거
char v='A';
for(int i=1; i<=5; i++) {
for(int j=1; j<=i; j++) {
System.out.print(v++);
}
System.out.println();
}
- 알파벳 트리
package day5;
public class StarDemo10 {
public static void main(String[] args) {
/* i j(공백) v(영어대문자)
* A 1 1~4개<-(5-i) 1개<-(9개-(5-i)*2)
* BCD 2 1~3개<-(5-i) 3개<-(9개-(5-i)*2)
* EFGHI 3 1~2개<-(5-i) 5개<-(9개-(5-i)*2)
* JKLMNOP 4 1~1개<-(5-i) 7개<-(9개-(5-i)*2)
* QRSTUVWXY 5 1~0개<-(5-i) 9개<-(9개-(5-i)*2)
*/
int value=65;
for(int i=1; i<=5; i++) {
//공백출력
for(int j=1; j<=(5-i); j++) {
System.out.print(" ");
}
//영어 대문자 출력
for(int v=1; v<=(9-(5-i)*2); v++) {
System.out.print((char)value++);
}
System.out.println();
}
}
}
A
BCD
EFGHI
JKLMNOP
QRSTUVWXY
-내가 해본거
char v='A';
for(int i=1; i<=5; i++) {
for(int j=1; j<=(5-i); j++) { //공백
System.out.print(" "); //공백 4321개
} //얘가 여기서 안끝나면 공백 한번돌때 다음알파벳반복이 다 돌아버림
for(int j=1; j<=9-(5-i)*2; j++) {
System.out.print(v++);
}
System.out.println();
}
* 자바의 자료구조
변수
값 혹은 객체를 한 개 저장하는 저장소다.
배열
같은 타입의 값 혹은 객체를 여러 개 저장하는 객체다.
한번 저장한 저장 크기를 변경할 수 없다.
콜렉션
다양한 타입의 값 혹은 객체를 여러 개 저장하는 객체다.
저장소의 크기가 가변적이다. (자동으로 크기 조절)
다양한 자료구조(List, Stack, Queue, LinkedList, Tree, Map, Set)를 구현한 구현 객체다.
'수업내용 > Java' 카테고리의 다른 글
[2022.09.13.화] 객체지향(클래스,객체) (0) | 2022.09.13 |
---|---|
[2022.09.08.목] 배열 (0) | 2022.09.08 |
[2022.09.06.화] 제어문과 반복문 (if문, for문) (0) | 2022.09.06 |
[2022.09.05.월] 연산자 (0) | 2022.09.05 |
[2022.09.02. 금] 변수 (0) | 2022.09.02 |