프로그래밍/java

JAVA 프로그래밍 45일차 (25/1/14)

wkun 2025. 1. 14. 18:00

contents

 

자바개념정리

 

chapter02

명시적 형변환

chapter03

연산자

문제

chapter04

제어문

1.조건문

2.반복문

 

----------------------------------------------------------------------

 

chapter02

 

명시적 형변환

개념 응답    
명시적 형변환 강제로 바꾸는 것 (변환하고자하는 타입) 변수명; 
=>변수 앞에 (바꿀데이터 타입)
 //char --> 숫자(정수 및 실수)로 바꿀수 있다? o
//숫자 --> char으로 바꿀 수  있다? x (수동형태변형)
상수 고정된 변수의 값 final 데이터 타입 상수명 = 값; cf) 모두 대문자로 연결('_')
선언과 동시에 이루어져야함 >쓸일 거의 없음

 

<Byte>

package ch03;


public class Byte {


public static void main(String[] args) {
// 수동으로 형변환하기
byte aa = 65;

byte a;
short b;
int c;
long d;


a = aa;
b = aa;
c = aa;
d = aa;


float e;
double f;
e = aa;
f = aa;

char g; // 정수 --> 문자로 자동변형하는 것은 허용되지 않음
g = (char) aa;

System.out.println(g);


}


}

 

<Short>

package ch03;


public class Short {


public static void main(String[] args) {
short aa = 65;

byte a;
short b;
int c;
long d;


a = (byte) aa;
b = aa;
c = aa;
d = aa;


float e;
double f;
e = aa;
f = aa;

char g; // 정수 --> 문자로 자동변형하는 것은 허용되지 않음
g = (char) aa;

System.out.println(g);


}


}

 

<Data type>

package ch03;


public class Datatype {


public static void main(String[] args) {
//char --> 숫자(정수 및 실수)로 바꿀수 있다? o

//숫자 --> char으로 바꿀 수 있다? x (수동형태변형)

char t = 'A';
// 문자를 숫자로 자동으로 변환할수 있다면서? 그래서 숫자를 더했더니
//왜 에러가 남?
// char re = t+1; 숫자를 문자에 넣음(에러) (x)
// char re = (char) (t+1); //66을 수동 전환 연산은 ()할 것! (o)

int re = t+1; //(o)

int s = t;


}


}

 

<형변환과 우선순위>

package ch03;


public class exam0 {


public static void main(String[] args) {
//형변환과 우선순위
int a =10;
int result;
float tt = 3.19f;
result = tt+0.5f; //int result = float 왜곡: 데이터 손실때문에 안됨
//1.큰 사이즈->작은x 2.왜곡x ('='했을 때 안되는 이유) => 3.강제형변환(바꾸자하는 변수를 봄: result) ->int result = (int)
// 4.변환대상지정(모호하면 안됨)->우선순위 ()지정: 먼저 실행 할 것
result = (int) tt+0.5; //3 + 0.5 => float, tt바꿈:(int)tt 먼저 연산 + 0.5 더해줌
result = (int)(tt+0.5); //3.69 -> int 형변환: 3 => 결과값을 바꿈: 연산을 먼저() =>우선순위


// a+1; // 의미 없음(+하긴 했지만 증명할 방법 없음) => 그 줄에서만 의미있음(남겨두지 않으면 쓸 수 없음: 변수저장)
// =a+1; //저장은 대입기호(=)로만 함(연산자) => 순서: (1)a+1; 먼저 (2) =



result = a+1; // =() =뒤에 형변환

}


}

 

 

chapter03

 

연산자

개념
응답
   
 
연산자
특정한 연산을 수행하기 위해 사용하는 기호
1)변수에 담긴 데이터를 연산하기 위해
2)변수에 담긴 데이터를 비교하여 제어문 등에서 활용
 
 
산술
연산자
기본적인 계산: +, -, *, /, %
char -> 문자, 숫자 +, - 사용가능
=> '-' 붙으면 문자 역할 x
cf) / : 몫, %: 값  
연산자
우선순위
1순위: [], (), .(최우선 연산자)
8순위: = (대입연산자)
cf) a++; -> 9순위
     
논리 부정 연산자
! (= not) boolean: 제어문의 재료 => 판단    
비교
연산자
근거: 수치화
참(true), 거짓(false) 구하기 => 판단근거가 됨
cf) 연산 먼저 수행 한 다음 비교연산함
ex) (a+b) >= c;
   
등가비교
연산자
(==, !=)
숫자 == 숫자 가능
         !=
(주로 숫자만 사용: 숫자만 가능하다고 생각하면 됨)
예외)
char 숫자 (o)
' ' == ' '
문자(o) (숫자임)
String: 숫자(x), 객체
" " == " "
문자열(x)
 
논리
연산자
여러가지 조건을 동시에 검사할 때
Boolean: true, false => 제어문
true: 1
false: 0
&&: x
||: +
   
대입
연산자

=
+=
-=
*=
/=
%=
* = (저장)
변수 값은 대입할 때 바뀜(덮어쓰기)
해당 라인에서 제일 마지막에 수행됨
반드시 왼쪽에 변수가 와야된다.
대입시 타입이 다르면 수동 형변환(): 캐스팅
1. = 는 제일 마지막 시행
2. 왼쪽편에 변수
3. 타입이 다르면 수동형변환

 

<단항 연산자 ++>

package ch03;


public class exam1 {


public static void main(String[] args) {
//단항 연산자
char t = 'A'; //65
int result = 10;
// result = -t; //char 숫자, 문자 char x = 숫자(x) => (char) 해줘야함 숫자->문자(x)
int s = 0;

++result; //11
++result; //12
result++; //13
s = result++; //13 -> 14

System.out.println(s); //실행할 때마다 1씩 증가 13 => 담은 값 출력
System.out.println(result); //실행할 때마다 1씩 증가 14



}


}

 

<비교 연산자>

package ch03;


public class exam2 {


public static void main(String[] args) {
//비교 연산자
byte a = 10;
short b = 2;
int c = 5;
long d = 15;
//보라색 명령어
float e = 1.5f;
double f = 5.7;

char g = 'A';

String x = "ABC"; //검은색: 명령어x, 기본변수x, 숫자로 못바꿈, 비교할 수 없음(숫자 아니기 때문에) => 만듬: 객체, instance
//숫자 ==, != 숫자 char + char+ char+ ... 일일히 문자 더하기 힘듬 -> 새로 생김


}


}

 

문제

비교연산자 연습

문제 1: a = 5, b = 10일 때, a > 0 && b > 0의 결과는 무엇인가요?
 5 > 0 && 10 > 0
 1 * 1
 1 => true   

문제 2: x = 20, y = 15, z = 10일 때, (x < y || y > z)의 결과는 무엇인가요?

20<15 || 15 > 10
0 + 1
1 => true


문제 3: a = 3, b = 7일 때, !(a == b)의 결과는 무엇인가요?

!(3 == 7)
!(0)
1 =>true

문제 4: isAdult = true, hasPermission = false일 때, isAdult && hasPermission의 결과는 무엇인가요?
ture && flase
1 * 0 = 0 => false


문제 5: score = 55일 때, (score < 60 || score > 100)의 결과는 무엇인가요?
55 < 60 || 55 >100
1 + 0
1 => true

문제 6: num1 = 0, num2 = 5일 때, (num1 == 0 && num2 != 0)의 결과는 무엇인가요?
(0 == 0 * 5 != 0)
(1*1)
1 =>true 

문제 7: isRaining = false, isSunny = true일 때, isRaining || isSunny의 결과는 무엇인가요?
false + true
0 + 1
1 => true


문제 8: age = 18일 때, (age >= 18 && age <= 65)의 결과는 무엇인가요?
(18 >= 18 * 18 <=65)
(1 * 1)
1 => true

문제 9: input = "hello"일 때, !(input.equals("world"))의 결과는 무엇인가요?
!("hello".equals("world"))
!(1)
=> false

문제 10: a = 10, b = 20, c = 30일 때, (a + b > c && a < c)의 결과는 무엇인가요?
(10+20 >30 * 10 <30)
(30>30 * 10<30)
(0*1)
0 = > false

---------------------------------

문제 1: a = 5, b = 10, c = 15일 때, !(a > b) && (b < c || a + b == 15)의 결과는 무엇인가요?
!(5 > 10) * (10 <15 + 5+10 == 15)
!(0)*(1 +15==15)
1*(1+1)  //1+1 =1
ture

문제 2: x = 25, y = 30, z = 20일 때, (x >= y && y < z) || (z < x && x > 10)의 결과는 무엇인가요?
(25>=30 * 30<20) + (20<25 * 25>10)
(0*0)+(1*1)
0+1
1 => true

문제 3: isMember = true, hasDiscount = false, isStudent = true일 때, isMember && (hasDiscount || isStudent)의 결과는 무엇인가요?
ture * (false+true)
1*(0+1)
1*1
1 = >true

문제 4: score1 = 85, score2 = 90, score3 = 75일 때, ((score1 > 80 && score2 > 80) || score3 < 80) && (score1 + score2 + score3 > 250)의 결과는 무엇인가요?
((85 >80 *90 >80) + 75 < 80) * (85+90+75>250)
((1*1)+1)*(250>250)
1*0
0 => false

문제 5: temperature = 30, isSunny = true, isHoliday = false일 때, (temperature > 25 && isSunny) || (temperature <= 25 && isHoliday)의 결과는 무엇인가요?
(30 > 25 * true) + (30 <= 25 * false)
(1*1) + (0*0)
1+0
1 = true

문제 6: num1 = 12, num2 = 8, num3 = 4일 때, !(num1 % 2 == 0) && (num2 > num3 || num1 == num3)의 결과는 무엇인가요?
!(12%2==0) * (8>4 + 12==4)
!(1)*(1+0)
0*1
0 => false

문제 7: isOpen = false, hasKey = true, isGuest = false일 때, isOpen || (hasKey && !isGuest)의 결과는 무엇인가요?
false + (true * !false)
0 + (1*!0)
0+ (1*1)
0+1
1 => true

문제 8: age = 25, isEmployed = true, hasDegree = false일 때, (age >= 18 && isEmployed) || (hasDegree && age < 30)의 결과는 무엇인가요?
(25 >= 18 * true) + (false * 25<30)
(1*1) + (0*1)
1+0
1 = >true

문제 9: input = "java", isLearning = true, isFun = false일 때, !(input.equals("python") && isLearning) || isFun의 결과는 무엇인가요?
!("java".equals("python")*true)+false
!(1*1)+0
0+0
0 => false

문제 10: a = 10, b = 20, c = 5일 때, ((a + b > c && b - c < a) || (c == 5)) && (a * c > b)의 결과는 무엇인가요?
((10+20 > 5 * 20-5<10) + (5==5)) * (10*5>20)
(30>5 * 15<10) +1)*(50>20)
((1*0)+1)*1
(0+1)*1
1*1
1 => true

 

 

chapter04

 

제어문

개념   응답        
제어문   조건문, 반복문

공통: true면
내용을 실행
     
조건문 if문 if(ture) {
내용
처음
}
실행x

=> 할까 말까

ex)안전:
엘리베이터
if( ){

}
else{
마지막

=> 둘 중 하나 실행
}

ex)자동차시동: 
on/off
if( ) {

}
else if( ){
     x n 중간

=>여러 개 중 하나
}
else{

}
cf) 중첩 if 문: 한번만 가능
if(ture){
if( ){
=> false 사라짐(존재할 때만 사용)

 }

}중괄호 안에서만 사용
//:프로그램 기본 프로세스 순서
//step 1. 재료 확보 : 변수에 데이터 저장 -> 입력 생략
=> 반드시 있어야 함
//step 2. 재료 가공 : 변수에 저장된 데이터를 가공(연산자) => 생략 가능
//정수형 : int, long
 실수형 : float, double
 문자형: char (산술연산)
//논리형: boolean (비교연산)
//step 3. 제어 why? 기준(수치화된 변수(재료)): 변수값비교 선택지 고름 -> 목표달성=결과
//step 4. 결과
switch문 조건에 따라 각각 다르게 실행하도록 만들어 놓은 제어문 switch(값){
case 값1:
//실행문
break;
case 값2:
//실행문
break;
default;
//나머지 실행(쓰레기통)
}
숫자
범위 설정 안됨(x)

=> 정확한 값(매치)


*if 재료 = boolean
(true, false)
범위설정(o)
cf) 범위설정: 논리 연산자로 묶어주면됨(switch에서는 사용안함)
Data
1.문자 char
2.정수: byte, short, int, long
3,실수: float, double
4.boolean
5.문자열 String
반복문 for문 같은 내용을 반복 for(초기화; 조건식; 증감식){
System.out.println("조건식이 참일 때 실행되는 부분");
}
for() => 횟수: 바뀔 수 있다
변수 값에 따라 달라짐(바뀔 수 있음)

순서
1.초기화: 한번 수행
2.조건식: true면 반복, false면 중단하고 for문을 벗어남
3.실행부분: 참일 때 실행
4.증감식: 변수의 값 증가 또는 감소
false 될 때까지
2~4 반복


// 정수, 실수, 논리, 문자, 문자열 => 모두 변수처리 할 수 있음
 //int, float, boolean, char, String

 

1.조건문

 

<프로그램 기본 프로세스: 영역>

package ch04;


public class exam15
{ //클래스는 구성요소 : 변수, 함수
static int x =10;
public static void test() {int y = 10;}
public static void main(String[] args) {
//:프로그램 기본 프로세스
//step 1. 재료 확보 : 변수에 데이터 저장 -> 입력 생략 => 반드시 있어야 함
int a = 5; //-> main{} 중괄호
//step 2. 재료 가공 : 변수에 저장된 데이터를 가공(연산자) => 생략 가능
//정수형 : int, long 실수형 : float, double 문자형: char (산술연산)
//논리형: boolean (비교연산)
int x; //생성과 초기화 분리 (o) int x; x = 10;
//step 3. 제어 why? 기준(수치화된 변수(재료)): 변수값비교 선택지 고름 -> 목표달성=결과
if(true) { //if(true): 정적
System.out.println("a는 3보다 큽니다.");
// int x = 10; // (x) -> if{} 중괄호 선언
x = 10;
}
//step 4. 결과

System.out.println("검사가 끝났습니다.");
System.out.println(x); //? 영역 안에서 선언하면 밖에서는 모름
//class 변수 선언은 가능(영역)
// System.out.println(y); (x)-> 영역x

//=> 영역 중요!!


}


}

 

<switch문>

package ch04;


public class exam19 {


public static void main(String[] args) {
//일 년 동안 읽은 책 수에 따라 멘트를 출력합니다. 
int book = 2;
book = book / 10;  //정수형 나눗셈: 소주점 이하 버려짐 book = 0;
switch (book) {
case 0: //10권 미만
System.out.println("조금 더 노력하세요!");
break;
case 1: //10권 이상 20권 미만
System.out.println("책 읽는 것을 즐기시는 분이네요!");
break;
case 2: //20권 이상 30권 미만
System.out.println("책을 사랑하시는 분이시네요!");
break;
default: //30권 이상
System.out.println("당신은 다독왕입니다!!");
}


}


}

 

2.반복문

 

<반복문 변수처리>

package ch04;


public class test {
// 정수, 실수, 논리, 문자, 문자열 => 모두 변수처리 할 수 있음
//int, float, boolean, char, String


public static void main(String[] args) {

String text = "안녕하세요!";
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");
System.out.println("안녕하세요!");

int test =10;
int start = 0;
for(int i = start; i <test; i++) { //for(시작값)
System.out.println("안녕하세요!");
// }


}


}

 

<반복문 5번 출력>

package ch04;


public class test2 {


public static void main(String[] args) {
//반복문 5번 출력
System.out.println("[변수의 값을 바꾼 반복문]");


int nums = 2;
int max = 7;

for (int i = nums; i < max; i++) {
System.out.println("안녕하세요!");
}
System.out.println("[변수의 값을 바꾸지 않은 반복문]");
for(int i = 0; i < 5; i++) {
System.out.println("안녕하세요!");


}


}
}

 

<for문 횟수>

package ch04;


public class test3 {


public static void main(String[] args) {
//for문


// char i = 'A'; //65
// for(int k = i; k < 75; k = k+1) { //for(시작숫자; 조건식: 멈추는 값; 증감식)
// char test = (char)k; // k는 숫자 test 문자
// System.out.println(test);
// }
// System.out.println("");


// for(int j = 75; j < 80; j = j+1) {
// char test2 = (char)(j);
// System.out.println(test2);
//
// }
int count = 1;
for (int i = 1; i < 10; i = i + 3) {
count++;
System.out.println(i);
}
System.out.println(count);
}


}

 

<for문 형변환>

package ch04;


public class test4 {


public static void main(String[] args) {
//for 문
// 65, 66, 67, 68, 69
String test = "ABCD9E";
System.out.println(test.length());
for (int i = 0; i < 6; i++) {
char v = test.charAt(i); //위치 0 012345 0 = A
if(v>64&&v<70) {
System.out.println("문자입니다");
System.out.println(v);
}
else {
System.out.println("숫자입니다");
System.out.println(v);
}
}


}
}

 

실행 결과

6
문자입니다
A
문자입니다
B
문자입니다
C
문자입니다
D
숫자입니다
9
문자입니다
E