SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Eclips] Java class 1 - 규칙, 데이터 타입(bit,short,int,long,float,double,boolean) , 연산자종류, 주민번호 구하기, 키보드/달력 불러오기, for문, while문, do-while문 본문

Java

[Eclips] Java class 1 - 규칙, 데이터 타입(bit,short,int,long,float,double,boolean) , 연산자종류, 주민번호 구하기, 키보드/달력 불러오기, for문, while문, do-while문

D_Aiden 2023. 12. 7. 11:52
728x90
반응형
SMALL

2023.12.07

## 진법변환 및 아스키코드 문제

1. 1011100(2진수) --> 10진수 변환
(정답) 64+16+8+4 = 92

2진수 1 0 1 1 1 0 0
10진수 64 32 16 8 4 0 0

2. 211(10진수) --> 2진수 변환
(정답) 11010011

3. A3(16진수) --> 10진수 변환
(풀이) A가 10이므로 (10X16)+3= 163

4. 아스키코드(*암기필요)
1) null --> 0
2) 스페이스 문자 --> 32
3) A --> 65
4) a --> 97


## Java  동작구성

1. Java vs C언어 

: two face launage(코드 생성을 위해 2번의 과정을 거침)


- OS: 플랫폼(CPU Center Processer Unit, 중앙처리장치) 

 

2. 명명규칙

 : 사용자 정의(=식별자) : 단, $_만 가능(사용은 비추천이라고 함)
 (비추천 이유) --> ex. class A { class B --> A.java / A$B.java로 생성되므로 비추천

Java는 붙여서 쓰되 단어의 시작은 대문자
ex) Account_info (X) -- SQL, PLSQL
      AccountInfo(O)

- camel casing: 첫글자는 소문자, 단어가 연결되면 단어시작은 대문자 --> 변수, 메소드명(함수=기능을 갖은 모듈)
- pascal casing: 첫글자는 대문자, 단어가 연결되면 단어시작은 대문자 --> 클래스(class)
- 상수형 변수(값 자체이며, 변하지 않는 수): 모든문자 대문자, 단어가 연결되면 단어시작은 _로 연결(언더바)
                                                                       ex. int sal = 1000; int EMP_SAL=1000; 못바꾸는 상수형 변수 
   ※ 모든 사용자정의(식별자)는 숫자로는 명명이 안되고, 영문으로만 작성(or 아스키코드).

 

3. 데이터 타입

자바의 메모리 구조
static stack heap
클래스 영역
정적 영역
상수 영역
메서드 영역
   

 ※ java는 실제메모리인 heap에 저장할 수 없으므로 stack에 저장함

 

1) 기본형(8가지)

구분 저장값 자료형
기본 자료형
(소문자)
참, 거짓: true, false boolean
정수: ..., -1, 0, 1, ... byte, short, int, long
실수: -5.4, 1.7, 3.4 ... float, double
문자(정수): 'A', 'D', 'b', 'e' ... char
참조 자료형
(첫글자 대문자)
객체: Object 배열, 클래스, 인터페이스

기본형 타입에 대한 특징으로는 다음과 같다.

  • 모두 소문자로 시작된다
  • 비객체 타입이므로 null 값을 가질 수 없다. (기본값이 정해져 있음)
  • 변수의 선언과 동시에 메모리 생성
  • 모든 값 타입은 메모리의 스택(stack)에 저장
  • 저장공간에 실제 자료 값을 가진다

출처: https://inpa.tistory.com/entry/JAVA-☕-변수의-기본형-참조형-타입 [Inpa Dev 👨‍💻:티스토리]

- 숫자

자료형 자료의 크기 값의 범위
부대울수 boolean 1byte true, false
정수
 음수, 0, 양수
byte 1byte -2^7 ~ 2^7-1
short 2byte -2^15 ~ 2^15 -1
int 4byte -2^31 ~ 2^31 -1
long 8byte -2^63 ~ 2^63-1
실수 float 4byte ±(1.40X10^-45~3.40 X 10^38)
double 8byte ±(4.94X10^-324~1.79 X 10^-308)
문자(정수) char 2byte 유니코드 문자(0~2^16-1)

##실수 자료형의 구성

구분 부호비트 가수 비트 지수 비트 정밀도 구성
float(32bit) 1 23 8 소수점 7자리 float a = 1.0000001f (7자리+1+f) f끝 표시
double(64bit) 1 52 11 소수점 15자리 double d = 1.0000000000000001;

ex. 2bit로 표현할 수 있는 정수는 2^2(=4개)(00,01,10,11)이므로
     1byte(=8bit)로 표현할 수 있는 정수는 2^8(=256개)임.

1.1) 정수형: bit(1byte) , short((2byte) int(4byte), long(8byte)

1.2) 실수형: float(4byte) 대입연산자 순서.    뒷쪽부터 계산하는 방식

연산순서


                     double(8byte) 소숫점이하 13자리까지 출력됨

double


※ 자동변환: 우선순위 : 정수< 실수,  작은크기 < 큰 크기 --> 변환연산자는 (type)형태로 코딩
    ex. int a = 10+30; 의 경우, 10+30은 int가 아니고 float임

char(2byte) 타입이 byte(1byte) 타입보다 더 크니까 담을수 있어보이지만,
byte 타입을 변환하여 char타입에 저장할 수는 없다. (이유: char 음수표현 불가)  --> shot엔 가능

int a=10;
byte a=10; (a에 들어가는 1byte는 0~255까지만 들어감)

- 문자: char(* 정수형 포함, 2byte)          --> 입력방식: '문자' 로 작은 따움표 코딩
 ex) (아스키코드) 'A' 찍으면 --> 65가 출력됨

- 논리형: boolean (true or false)       // 참,거짓 구별

2) 참조형
- 배열 : 

- 클래스 : 객체의 주소를 저장(heap에 저장됨)

A heap의 저장
Sting의 heap 객체 저장개념

ex) String a = "hellow java";

문자열 중 특정 부분을 뽑아내고 싶을 때 (시작위치 <= a < 끝위치)
a.substring(0, 4);       // Hell 출력

 

 

4. 연산자의 종류

자료형 연산기호 기능 결과
산술 연산자 +     -     *     /     % 사칙연산 및 나머지 연산
증감 연산자 ++     -- 값이 1씩 증가 감소
비트 연산자 &    |    ~    ^ &는 and, |는 or, ~는 not, ^는 xor
시프트 연산자 >>      <<      >>> 비트단위 이동
비교 연산자 <     >    <=    >=    ==    != 값의 크기 비교  참 또는 거짓
논리 연산자 &&    ||    !    ^ &&는 and, ||는 or, !는 not, ^는 xor
대입 연산자 =    +=    -=    *=    /=    &=    |=
>>=    <<=     >>>=
산술연산 결과의 대입
('연산자' + '='의 축약표현
실행
삼항 연산자 X : Y
(참 또는 거짓)
참일때 X,  거짓일떄 Y

a++; --> a변수가 사용된 후 증감(후의형)
++a;
--> a에 1을 더함 (전위형
)
a+=2;
  --> a=a+2 이며 a+2의 값을 a에 넣으란 의미
a*3;-
->  a=a*3  a*3의 값을 a에 넣으란 의미

ex) a=1; b=2; c=3;
      if( a>b || b>c++) {                 // a>b가 참 아니면, 이후 연산은 무시됨.

Java level 1

public class DataTypeEX {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	char ch1 = 'A';
	char ch2 = '한';
	char ch3 = 0x3091;     //16진수 데이터를 의미하며, 0곱하기3091 형태
	
	System.out.println(ch1);
	System.out.println(ch2);
	System.out.println(ch3);
	
	System.out.println((int)ch1);
	System.out.println((int)ch2);
	
	String str="홍동우";
	System.out.println(str);

	// 연산자 연습
	System.out.println("오늘은 자바수업 시작입니다.");
	System.out.println("5+6="+(5+6));
	System.out.println("5*6=" +5*6);
	
	int a=3;
	if (a>3 && ++a>3) {
		System.out.println("조건만족");
	 }
		System.out.println(a);
	if (a<1 && ++a>3) {
			System.out.println("조건만족");
		 }
			System.out.println(a);
	int i=20;
	int j=30;
	int res= (i>j)? i:j ;
	System.out.println("큰값:" + res);
			
	int p;      // int는 0이 기본값
	double t;   // double은 0.0이 기본값

	System.out.println("결과값: " +(2.45*1.65));
	
	float f;
	f =(float)0.123456789f;    // 소수점 끝에 f가 안붙으면 double 임
	System.out.println(f);
	
	// 제어문자 --> (\문자 형태)
	System.out.print("여기는 첫 줄");
	System.out.print("입니다.\n");  // \n은 라인스킵
	System.out.println("여기는 두번째 줄 입니다.");
	System.out.println("여기는 \t두번째 줄\t\t 입니다."); // \t 1칸 띄우기
	System.out.println("여기는 \\두번째 줄 입니다.");
	}

결과

A
한
ゑ
65
54620
홍동우
오늘은 자바수업 시작입니다.
5+6=11
5*6=30
3
3
큰값:30
결과값: 4.0425
0.12345679
여기는 첫 줄입니다.
여기는 두번째 줄 입니다.
여기는 	두번째 줄		 입니다.
여기는 \두번째 줄 입니다.

 

5. Java의 라이브러리

: java는 package에 class들의 총합을 의미
  - class가 갖는건 맴버변수와 메소드 외엔 못 갖음.
자바의 package는 java.lang 형태임     ex) system,out.println은 systerm(모니터)에서 out시킬 print란 의미.

package는 모두 소문자로 표시하며 java.io 형태

java level 2
(연습1) 주민번호 성별을 구분하시오

public class OperatorEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String juminNo="041201-3211111";
				
		// if ~ else~
		char gender=juminNo.charAt(7);        // char로 변수 담을때 리턴값은 charAt. 0이 시작하므로 7로 써야 됨
			if (gender=='1' || gender=='3') {;
				System.out.println("남자입니다.");
			} else if (gender=='2' || gender=='4') {
				System.out.println("여자입니다.");
			}
	}
		
}

결과

남자입니다.

 

java level 3

switch 명령:  braek를 줘서 명령값구분해야 되며, 반드시 default 값으로 마무리 되야 된다.

(형태)
switch (정수형 or String) {
            case 값1 : 명령1; braek;            // break는 case 명령문 끝에 써야 구분됨.
            case 값2 : 명령2;                         // case 값1 에는 값을 1개만 취할 수 있음.
            defalt : 그 외의 결과; 
}

(연습2) 주민번호로 지역구분 하시오.

public class OperatorEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String juminNo="041201-3911111";
				
// if ~ else~
		char gender=juminNo.charAt(7);        // char로 변수 담을때 리턴값은 charAt. 0이 시작하므로 7로 써야 됨
			if (gender=='1' || gender=='3') {;
				System.out.println("남자입니다.");
			} else if (gender=='2' || gender=='4') {
				System.out.println("여자입니다.");
			}
			
// switch case(0 서울, 1or2 경기, 3 충청도, 4 강원도, 5 전라도, 7or8 경상도, 9제주도)  
		char area=juminNo.charAt(8);
		switch (area) {
				case '0': System.out.println("서울시"); break;
				case '1': 
				case '2': System.out.println("인천/경기도"); break;
				case '5': System.out.println("강원도"); break;
				case '7': 
				case '8': System.out.println("경상도"); break;
				default : System.out.println("제주도");
				}
		}
}

결과

남자입니다.
제주도

 

(연습3) 나이를 계산하시오.
(함수형태)
String 변수 = 주민번호변수,substring(0,2)      // substring(시작위치, 끝위치 -1) 형태임
int birthyear = Integer.parseInt(nayiStr)           // String 값을 int로 변환함수는 Integer.parseInt

// 나이구하기
		String nayiStr = juminNo.substring(0,2); //substring(시작위치, 끝위치 -1)형태임
		int birthyear=Integer.parseInt(nayiStr); // String값을 int로 변환하는 함수는 Integer.paseInt 임
		int age=0;
		
		if(gender== '1' || gender=='2') {
			age=2023-(1900 + birthyear)+1;
			System.out.println(age);
		}else if(gender=='3'||gender=='4') {
			age=2023-(2000 + birthyear)+1; 
			System.out.println(age);
			}
		}
	}


(연습4) 현재날짜 기준으로 나이를 구하시오.
Calendar c= Calendar.getInstance();       // 현재날짜의 달력 불러오는 함수. 
int years = c.get(Calendar.YEAR);         // calendar 불러오는 함수가 get(calendar.YEAR)임.

달력 불러오는 방법

(연습3) 키보드를 불러와서 주민번호 입력해 나이 구하는 방법
Scanner. scan2 = new Scanner(system.in);                  // in으로 입력하도록 코딩
Scanner scan;
System.out.printLn("주민번호 입력:");
String juminNo=scan2.nextLine();                         //  nextLine 문자열 값을 사용하는 명령어
(참고) 숫자는 nextint()임

키보드로 주민번호 입력방법

 

## for, while, do-while 형태

while(조건) {
             //탈출 : break;
            // 다시 조건으로 비교: contine;

do
{    (반복문)

      } while(조건) ;

(연습4) while을 이용해서 1~100까지 합계를 구하시오.
            do-while을 이용해서 1~100까지 합계를 구하시오.

// for, while, do-while
// 1~100까지 합계를 구하기
		int sum =0;
		for(int i=1; i<=100; i++) {
			sum += i;			
	}
		System.out.println(sum);
		
// 1~100까지 합계를 while문으로 구하기
		int sums=0;
		int d=0;
		while(d<100) { 
				d += 1; 
				sums=sums+d; 
		} 
		System.out.println(sums);
		
// 1~100까지 합계를 do-while문으로 구하기
		int hap = 0;
		int c = 0;
		do { 
			hap += 1;
			c+=hap; 
		} while (hap<100);
		System.out.println(c);
		}
}

결과

5050
5050
5050
728x90
반응형
LIST