본문 바로가기

Java 웹 개발

21.08.17 - 웹 개발 입문 5일차

Q. 다음과 같은 숫자가 주어져 있을 때, 숫자를 계산(변형)하여 한국 나이를 계산하여 출력
(생년, 월, 일 정보도 같이 출력)

 

package decimal;

import java.lang.*;

public class test06 {
	public static void main(String[] args) {

		// 입력
		int birth = 19990101;

		// 처리
		int year = birth / 10000; 
		int month = birth % 10000 / 100;
		int day = birth % 10000 %100;
		int today = 2021;
		int age = 1 + today - year;

		// 결과
		System.out.println(year+"년");
		System.out.println(month + "월 ");
		System.out.println(day + "일");
		System.out.println(age +"세");
		
	}
}

- 정답

year = 1999년

month = 1월

day = 1일

age = 23세

 

 

 

자료형 - 실수

실수(부동소수점수)
1. 실수는 double 기본 형태이다.
2. 실수는 부정확하다. (각 형태마다 표현 가능한 자리수가 정해져 있다.)
3. 실수가 포함된 계산은 무조건 실수 결과가 나온다.

package realnumber;

import java.lang.*;

public class test01 {
	public static void main(String[] args) {
		
		//1
		//float a = 1.5; X
		float a = 1.5f;
		double b = 1.5;
		
		System.out.println(a);
		System.out.println(b);
		
		//2
		float c = 123.12908309218940812904890128490812f;
		double d = 123.12908309218940812904890128490812;
		
		System.out.println(c);
		System.out.println(d);
		
		//3
		System.out.println(1.5 + 2.5);    //실수 + 실수 = 실수
		System.out.println(10 / 3);         //정수 + 정수 = 정수
		System.out.println(10.0 / 3);      //실수 + 정수 = 실수
		
	}
}

- 정답

a = 1.5

b = 1.5

c = 123.12908
d= 123.1290830921894

4.0
3
3.3333333333333335

 

 

Q. 다음 주어진 국어점수, 영어점수, 수학점수를 이용하여 총점과 평균을 구하여 출력
국어 : 85점, 영어 : 90점, 수학 : 90점

package realnumber;

import java.lang.*;

public class test02 {
	public static void main(String[] args) {

		//입력
		int korean = 85;
		int english = 90;
		int math = 90;
		
		//처리
		int sum = korean+english+math;
		double avg = sum/3.0;
		
		//출력
		System.out.println("총점 = " + sum);
		System.out.println("평균 = " + avg);
		
	}
}

- 정답

총점 = 265

평균 = 88.33333333333333

 

 

Q. 고급 레스토랑에서 커플 스테이크 세트를 159000원에 주문하여 먹었습니다.
제휴카드를 사용하여 30% 할인을 받았습니다. 할인 후 금액을 구하여 출력하세요.

package realnumber;

import java.lang.*;

public class test03 {
	public static void main(String[] args) {

		//입력
		int price = 159000; //결제금액
		int rate = 30; //할인율
		
		//처리
		int total = price * (100-rate) /100;
		//int result = price / 100 * (100*rate); 
		//나누기를 먼저하면 손실 발생 가능성 있음
				
		//출력		
		System.out.println(total + "원");
		
	}
}

 

 

자료형 - 정수와 실수간의 변환

1. 자료형에는 크기(범위)가 존재하며 크기(범위)가 작거나 다를 경우 변환이 어렵다

// float -> long 불가능, long -> float 가능, float > long 임을 알 수 있다.

package realnumber;
import java.lang.*;
public class test04 {
	public static void main(String[] args) {

	// byte는 int보다 작다.
		byte a = 10;
		int b = a;  // (자동 형변환 - 묵시적 형변환) ,int b = (int) a; <- 이렇게 변환 안해도 된다.
		System.out.println(b);
	
		int c = 20;
		//byte d = c; //될지 안될지 모르는 경우는 안되는 것으로 간주
		byte d = (byte) c; // c의 데이터를 byte에 맞게 강제로 변환하여 넣어라 (강제 형변환 - 명시적 형변환)
		System.out.println(d);
		
		// float와 long 중에서 누가 더 큰 형태인지 코드를 통하여 증명
		float e = 1.5f;
		// long f = e; X
		long f = (long)e; // 강제 형변환, 명시적 형변환
		System.out.println(f);
		
		long g = 10L;
		float h = g; // 자동 형변환, 묵시적 형변환
		System.out.println(h);
		
	}
}

 

 

Q. BMI(체질량지수)는 다음과 같은 공식으로 계산 합니다.
예를 들어 키가 180cm, 체중이 80kg인 사람의 BMI를 계산하면 다음과 같습니다.
BMI = 80kg / (1.8m * 1.8m) = 24.69....
키 190cm, 체중 105kg인 사람의 BMI를 계산하여 출력하세요

package realnumber;

import java.lang.*;

public class test06 {
	public static void main(String[] args) {

		//입력
		int height = 190;
		int weigh = 105;

		//처리
		double m = (double) height /100;
		double bmi = weigh / (m * m);
		
		//출력
		System.out.println(bmi);
		
	}
}

- 정답

bmi = 29.085872576177287

 

 

 

 

자료형 - 논리

true(예) or false(아니요)

컴퓨터로 하여금 판정을 내리게 하는 효과

 

- 숫자형 질문

100 더하기 200은 얼마 인가요?

- 논리형 질문

100 더하기 200이 300보다 큽니까?

 

 

Q : 시내 과속방지 카메라는 어떤 원리로 작동하게 되는가?

package logical;
import java.lang.*;
public class test01 {

	public static void main(String[] args) {

		//입력
		int speed = 30;
		int speed2 = 55;
		
		//처리 - 과속인지 아닌지 판정(50km 이상일 경우 과속)
		System.out.println(speed >= 50);   //false
		System.out.println(speed2 >= 50);  //true
		
	}
}

- 정답

speed = false

speed2 = true

 

논리형 boolean 알아보기

package logical;
import java.lang.*;
public class test02 {

	public static void main(String[] args) {
		// 논리형 데이터 저장
		// boolean a = true or false 만 가능
		boolean a = true;
		boolean b = 50 > 30;
		System.out.println(b);
		
		int speed = 60;
		boolean speeding = speed > 50;
		System.out.println(speeding);
		
	}
}

- 정답

b = true

speeding = true

 

 

Q. 2005년생의 나이를 계산하여 출력하고, 성인인지 판정하여 출력
성인은 20살 이상인 사람을 의미합니다.

package logical;
import java.lang.*;
public class test03 {

	public static void main(String[] args) {

		//입력
		int birth = 2005;
		
		//처리
		int thisyear = 2021;
		int age = thisyear-birth+1;
		boolean adult = age >= 20 ;
		
		//출력
		System.out.println(age);
		System.out.println(adult);

	}
}

- 정답

age = 17

adult = false

 

 

Q. 과속단속 카메라는 제한속도에서 10%의 여유치를 가지고 작동합니다.
제한속도가 100km인 도로에 설치된 과속단속 카메라가 있을 때
109km로 달리고 있는 자동차가 과속인지 아닌지 판정하여 출력하세요.

package logical;
import java.lang.*;
public class test04 {

	public static void main(String[] args) {

		//입력
		int speed = 109;
		int limit = 100;
		int permit = 10; //여유치(%)
		
		//처리
		int fixLimit = limit * (100+permit) / 100; // 여유치합산
		boolean over = speed > fixLimit;
		
		//출력
		System.out.println(fixLimit);
		System.out.println(over);
				
	}
}

- 정답

fixLimit = 110

over = false

 

 

같다(==), 다르다(!=) 알아보기

package logical;
import java.lang.*;
public class test05 {

	public static void main(String[] args) {
		//같다, 다르다
		
		int n = 12345;
		
		//잘못된 식 : n에 12345 넣고 출력하세요(사용하지 않는 형태의 식)
		//System.out.println(n = 12345);
		
		//올바른 식 : n의 값이 12345와 같습니까?
		System.out.println(n == 12345);
		
		//올바른 식 : n의 값이 12121이 아닙니까?
		System.out.println(n != 12121);
		
		//활용 : n이 짝수 입니까?
		// = n을 2로 나눈 나머지가 0과 같습니까?
		//System.out.println(n % 2 == 0 );
		boolean even = n % 2 == 0;
		System.out.println(even);
		
	}
}

 

 

문자와 문자열

Q : 자바에서 글자는 어떻게 취급되는가? 
A : 자바는 1글자에 2byte 형태로 관리합니다.
= 글자마다 숫자가 할당되어 있으며, 원한다면 언제든지 확인할 수 있습니다.

package character;
import java.lang.*;
public class test01 {
	public static void main(String[] args) {
		
		char a = '가';
		System.out.println(a);
		
		char b = 44032;
		System.out.println(b);
		System.out.println((int)b);
		
		int c = a;
		System.out.println(c);
		
		// ' 처럼 기호와 겹쳐서 사용이 어려운 글자들은 앞에 \를 추가하여 글자임을 명시
		// = Escape sequence = 이스케이프 문자
		char d = '\'';
		System.out.println(d);
		
	}
}

- 정답

a = 가
b = 가
b = 44032
c = 44032
d = '

 

 

문자열 (String)
- 문자가 줄지어 있는 형태의 데이터
- 프로그래밍에서 가장 중요한 데이터 중 하나
- 쌍따옴표로 감싸서 표기

 

참조형 데이터 (Reference Type)
- 복잡한 데이터(객체)에 리모컨(참조변수)을 연결해놓은 형태
- 리모컨(참조변수)을 이용하여 다양한 버튼(기능)을 실행할 수 있다.

package character;
import java.lang.*;
public class test02 {
	public static void main(String[] args) {
		
		// 문자열 (String)
		String a = "hello";
		System.out.println(a);
		
		//참조형 데이터 (Reference Type)
		System.out.println(a.length()); //a의 글자수
		System.out.println(a.charAt(0)); //a의 +0지점 위치의 글자
		
	}
}

- 정답

a = hello
a.length = 5
a.charAt(0) = h

 

문자열의 특징

1. (원래 안되는건데 특별히) 덧셈만 가능하다
= 어떠한 형태와 더해도 결과가 문자열로 나온다

2. 문자열에서 정상적으로 출력되지 않는 글자들이 있다.
= 특수한 형태를 표현하기 위한 글자

-> \n (New Line, 개행) - 다음 행으로 이동
-> \t (Tab, 탭) - 다음 탭으로 이동
-> \r (caRriage return) - 첫 칸으로 이동
-> \", \', \\

package character;
import java.lang.*;
public class test03 {
	public static void main(String[] args) {

		System.out.println("안녕하세요" + 1); // 안녕하세요1
		System.out.println("안녕하세요" + 1 + 2); // 안녕하세요12
		
		int a = 10;
		int b = 20;
		System.out.println("a = " + a);
		System.out.println("b = " + b);
		
		//System.out.println("합계 = " + a + b); -> 왼쪽부터 계산 문자열로 인식
		int total = a+b;
		System.out.println("합계 = " + total);
	
		//2
		//나는 지금 "피자"가 먹고싶다
		String str = "나는 지금 \"피자\"가 먹고싶다";
		System.out.println(str);
		
		String str2 = "안녕\t하세요";   //TAB키 쓰는법
		System.out.println(str2);
		
		String str3 = "안\n녕\n하\n세\n요"; //ENTER키 쓰는법
		System.out.println(str3);
		
		String str4 = "C:\\java";
		System.out.println(str4);		
	}
}

- 정답

안녕하세요1
안녕하세요12
a = 10
b = 20
합계 = 30
나는 지금 "피자"가 먹고싶다
안녕	하세요
안
녕
하
세
요
C:\java