본문 바로가기
  • think normal
새로워지기/서른의 생활코딩

5일차) 연산자 정리 예제 _20180531 am

by 청춘만화 2018. 6. 1.

package z_exam;


public class exam03 {

public static void main(String[] args){

// [3-1] 다음 연산의 결과를 적으시오.

// [연습문제]/ch3/Exercise3_1.java

// class Exercise3_1 {

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

int x = 2;

int y = 5;

char c = 'A'; // 'A'의 문자코드는 65

System.out.println(1 + x << 33);  

// 1+2<<33= int3<<3 = 11(2)<<33 

// 32칸을 왼쪽으로 33칸 옮기면 = 10(2) = 2 -땡

System.out.println(y >= 5 || x < 0 && x > 2);

// 2<0 && 2>2 || 5<=5 

// f && f || t = f || t = true

System.out.println(y += 10 - x++);

// 15 - 2 =13  //(x=3, y=15) 

System.out.println(x+=2);

// (x=3, y=15)+2 = 5

System.out.println( !('A' <= c && c <='Z') );

// !(65<=65 && 65 <='Z') = !(t && t) = false

System.out.println('C'-c);

// 67-65 = 2

System.out.println('5'-'0');

// 5

System.out.println(c+1);

// char + int = 66 

System.out.println(++c);

// char 67 // ++(증가)는 +1(int)이 아닌 자리 이동?

System.out.println(c++);

// char 67

System.out.println(c);

// char 68

// }

// }

// [3-2] 아래의 코드는 사과를 담는데 필요한 바구니(버켓)의 수를 구하는 코드이다. 만일

// 사과의 수가 123개이고 하나의 바구니에는 10개의 사과를 담을 수 있다면, 13개의 바구니

// 가 필요할 것이다. (1)에 알맞은 코드를 넣으시오.

// [연습문제]/ch3/Exercise3_2.java

// class Exercise3_2 {

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

int numOfApples = 121; // 사과의 개수

int sizeOfBucket = 10; // 바구니의 크기(바구니에 담을 수 있는 사과의 개수)

int numOfBucket1 = (numOfApples/sizeOfBucket+1); // 모든 사과를 담는데 필요한 바구니의 수

//1번 방식 - 10진수 이니까 +1로 끝

System.out.println("1번 방식, 필요한 바구니의 수 :"+numOfBucket1);

int numOfBucket2 = (int)((float)numOfApples/sizeOfBucket+0.9f);//단위가 1이니까 0.9로

//2번 방식 - 바구니 크기가 조정될 수 있는 점을 고려 하면 가변적인 바구니의 크기 고려

//??? 질문, 만약 개수가 1 단위가 아니라 16 단위라면?

System.out.println("2번 방식, 필요한 바구니의 수 :"+numOfBucket2);

//3번 방식 삼항연산자 활용(=if = 조건식의 결과가 t or f 인 경우) -> 나머지가 생기는 경우. 없는 경우 

int numOfBucket3 = numOfApples/sizeOfBucket+(numOfApples%sizeOfBucket>0 ? 1:0);

System.out.println("3번 방식, 필요한 바구니의 수 :"+numOfBucket3);

// }

// }

// [실행결과]

// 13

// [3-3] 아래는 변수 num의 값에 따라 ‘양수’, ‘음수’, ‘0’을 출력하는 코드이다. 삼항 연산

// 자를 이용해서 (1)에 알맞은 코드를 넣으시오.

// [Hint] 삼항 연산자를 두 번 사용하라.

// [연습문제]/ch3/Exercise3_3.java

// class Exercise3_3 {

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

int num3 = 10;

System.out.println( num3==0 ? "0" : num3<0 ? "음수" : "양수");

// num3<0 ? "음수" : "양수" //문제를 먼저 코딩으로 전환

// num3==0 ? "0인 것" : "0이 아닌 것"  //단, 음수 양수보다 더 범위가 크니까 앞으로 이동

// }

// }

// [3-4] 아래는 변수 num의 값 중에서 백의 자리 이하를 버리는 코드이다. 만일 변수 num

// 의 값이 ‘456’이라면 ‘400’이 되고, ‘111’이라면 ‘100’이 된다. (1)에 알맞은 코드를 넣으

// 시오.

// [연습문제]/ch3/Exercise3_4.java

// class Exercise3_4 {

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

int num4 = 456;

System.out.println( (int)(num4/100.0f) * 100 ); 

//순서대로 100의 자리 밑을 구분하기위해 소수점으로 갔다가, 나머지를 버리기 위해 형변환

//num4/100.0f

//(int)(num4/100.0f)

//(int)(num4/100.0f) * 10

// }

// }

// [3-5] 아래는 변수 num의 값 중에서 일의 자리를 1로 바꾸는 코드이다. 만일 변수 num의

// 값이 333이라면 331이 되고, 777이라면 771이 된다. (1)에 알맞은 코드를 넣으시오.

// [연습문제]/ch3/Exercise3_5.java

// class Exercise3_5 {

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

int num5 = 333;

System.out.println( (int)(num5/10.0f)*10+1 );

//num5/10.0f

//(int)(num5/10.0f)

//(int)(num5/10.0f)*10

//(int)(num5/10.0f)*10 +1

// }

// }

// [실행결과]

// 양수

// [실행결과]

// 400

// [실행결과]

// 331

/*

[3-6] 아래는 변수 num의 값보다 크면서도 가장 가까운 

10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다. 

//구하려는 수는 뺀 나머지  == y=(%) = 10x - num

//10의 배수인 어떤 수x에서 변수 num를 뺀 값 == 10x - num

//10의 배수인 어떤 수x는 num보다 크면서 가깝다 == x=(int)(num/10.0f)+1

예를 들어, 24의 크면서도 가장 가까운 10의 배수는 30이

다. 19의 경우 20이고, 81의 경우 90이 된다. 30에서 24를 뺀 나머지는 6이기 때문에 변

수 num의 값이 24라면 6을 결과로 얻어야 한다. (1)에 알맞은 코드를 넣으시오.*/

// [Hint] 나머지 연산자를 사용하라.

// [연습문제]/ch3/Exercise3_6.java

// class Exercise3_6 {

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

int num6 = 24;

System.out.println( 10-(num6%10) );

// 방법 1) 진수 끝자리에 대한 나머지를 구하는 것이니까  

System.out.println( (((int)(num6/10.0f)+1) *10) - num6);

// 방법 2) 진수가 변할 수 있는 점을 고려한다면.. 

// }

// }

// [3-7] 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다. 변환공식이 

// 'C = 5/9 ×(F - 32)'라고 할 때, (1)에 알맞은 코드를 넣으시오. 

// 단, 변환 결과값은 소수점 셋째자리에서 반올림해야한다.(Math.round()를 사용하지 않고 처리할 것)

// [연습문제]/ch3/Exercise3_7.java

// class Exercise3_7 {

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

int fahrenheit = 100;

float celcius = ( (int)(5.0f/9 *(fahrenheit-32)*1000) /1000.0f );

//C = 5/9 x (F-32) //주어진 식

//5/9 *(fahrenheit-32) //코딩으로 대입

//5.0f/9 *(fahrenheit-32) //코딩으로 적용

//(5.0f/9 *(fahrenheit-32)*1000) 소수 셋째짜리까지 올렸다가

//(int)(5.0f/9 *(fahrenheit-32)*1000) int로 바꾸면서 소수 셋째자리 밑 떨구고

//(int)(5.0f/9 *(fahrenheit-32)*1000) /1000.0f 원래 자리수로 원상복귀

System.out.println("Fahrenheit:"+fahrenheit);

System.out.println("Celcius:"+celcius);

// }

// }

// [실행결과]

// 6

// [실행결과]

// Fahrenheit:100

// Celcius:37.78

// [3-8] 아래 코드의 문제점을 수정해서 실행결과와 같은 결과를 얻도록 하시오.

// [연습문제]/ch3/Exercise3_8.java

// class Exercise3_8 {

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

// byte a = 10;

// byte b = 20;

// byte c = a + b;

// char ch = 'A';

// ch = ch + 2;

// float f = 3 / 2;

// long l = 3000 * 3000 * 3000;

// float f2 = 0.1f;

// double d = 0.1;

// boolean result = d==f2;

// System.out.println("c="+c);

// System.out.println("ch="+ch);

// System.out.println("f="+f);

// System.out.println("l="+l);

// System.out.println("result="+result);


byte a = 10;

byte b = 20;

int c8 = a + b;    //담을 그릇을 byte말고 int에 선언, 어차피 +연산 과정에서 a,b모두 int로 전환된다

//c변수 이름은 앞에 있어서 c8로 변경

char ch = 'A';

ch = (char)(ch + 2);// 방법 1) 문자열을 기준(굳이 문자를 입력받았음으로)으로 형 변환

float f = 3.0f / 2; // 대입(=)연산 전에, 나머지를 가질 수 있도록 연산 전에 형변환 

//-> 3.0f 또는 2.0f

long l = (long)(3000.0 * 3000 * 3000); 

//값의 길이가 자료형 크기를 넘어(11자리)가는 것으로 보임

//long l2 = 27000000000; <- 에러 

float f2 = 0.1f;

double d = 0.1;

boolean result = (float)d==f2; 

//입력받은 변수 값은 건들지않고 

//결과만 조정하기 위해 == 연산 전에 양쪽의 형만 맞췄다

System.out.println("c="+c8);

System.out.println("ch="+ch);

System.out.println("f="+f);

System.out.println("l="+l); 

System.out.println("result="+result); //false <- 값이 0.1인 경우, double형은 매우 가까운 근사치이다

// }

// }

// [실행결과]

// c=30

// ch=C

// f=1.5

// l=27000000000

// result=true

// [3-9] 다음은 문자형 변수 ch가 

// 영문자(대문자 또는 소문자)이거나 숫자일 때만  //<- 조건!

// 변수 b의 값이 true가 되도록 하는 코드이다. (1)에 알맞은 코드를 넣으시오.

// [연습문제]/ch3/Exercise3_9.java

// class Exercise3_9 {

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

char ch9 = 's';

boolean b9 = ( 'A'<= ch9 && ch9 <='Z' || 'a'<= ch9 && ch9 <='z' || '0'<= ch9 && ch9 <='9'  );

System.out.println(b9);

// b=영대소문자 || b=숫자 ? true : false

// 'A'<= ch9 <='Z' || 'a'<= ch9 <='z' || b=숫자    //boolean 있느니까 '? :'구문은 생략

// 일단 대소문자 부터, 'A'<= ch9 && ch9 <='Z' || 'a'<= ch9 && ch9 <='z'

// 그리고 숫자는..  '0'<= ch9 && ch9 <='9' 

// }

// }

// [3-10] 다음은 대문자를 소문자로 변경하는 코드인데, 

// 문자 ch에 저장된 문자가 "대문자인 경우에만" 소문자로 변경한다.  <-조건

// 문자코드는 소문자가 대문자보다 32만큼 더 크다. 

// 예를들어 'A‘의 코드는 65이고 ’a'의 코드는 97이다. (1)~(2)에 알맞은 코드를 넣으시오.

// [연습문제]/ch3/Exercise3_10.java

// class Exercise3_10 {

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

char ch10 = 'A';

char lowerCase = ('A'<= ch10 && ch10 <='Z') ? (char)(ch10 + 32) : ch10;

System.out.println("ch10:"+ch10);

System.out.println("ch10 to lowerCase:"+lowerCase);

// (x == 대문자냐) ? 소문자로 변환(x_대문자겠지? + 32) : 원래 그대로(x_소문자 겠지?) 

//놉! ( 'A' <= ch10 <= 'B' ) ? ch10 + 32 : ch10 

//놉! ch10 + 32 = char + int -> 일단 계산하고(int + int) 문자로 다시 캐스팅(char) -> (char)(int)

//그전에!!!!

//'<=' 연산을 하기 전에 ch를 int(4byte)형으로 만들어야지...

//이건, 아.. 아니네... 헐ㅋ 비교연산시엔 서로 형이 맞기만하면? 가능?.. 

//그것도 아니지.. 자동으로 맞춰지지.. 4byte 미만이니까.. ! 이건 아무 문제 없는 거고 

// ()?에 괄호 안에서,,,, 연산은 한번씩 밖에 못하잖아!

//'A'<= ch9 && ch9 <='Z' 

// }

// }

// [실행결과]

// ch:A

// ch to lowerCase:a

}

}



댓글