노베이스에서 개발자까지

자바 2일차 (자료형, 변수, 스캐너 클래스, 타입 변환) 본문

Java/멀캠 자바

자바 2일차 (자료형, 변수, 스캐너 클래스, 타입 변환)

for1person 2022. 9. 20. 21:35

▣ 자료형(Type, 형)
- 메모리에 저장 할 수 있는 값의 형태를 지정
타입 변수명;
타입 변수명 = 값;
- java의 모든 변수, 상수는 언제 자료형(타입)이 먼저 선언되어야 함
int number = 3;

String name;
name = "홍길동";

 

public class VariableTest {
	
	public static void main(String[] args) {
//		변수 : 하나의 값을 저장할 수 있는 저장 공간
//		타입 변수명;
//		타입 변수명=값;

/* 1. 반지름을 주고 원의 넓이 구하기
 * 2. 사각형의 넓이 구하기( 가로, 세로)
 * 원의 넓이 : 반지름 * 반지름 * 원주율
 */
 
 
		// 무엇을 구할까? - 원의 넓이
		// 필요한 것-> 구조?
		// 변수? 원주율 => ? 계산식?
        
        
		int radius = 10;						  // 반지름
        
			// int => 0, long => 0L  		 	  롱을 쓸 땐 옆에 L 적어주기
            
		final double PI = 3.1415;
        
			// 실수형 =>소수점이 있는 수 
			//  double => 0.0,   float => 0.0f      float 형 쓸 땐  f 같이 적어주기
            
            
		double area=0.0;
		
		area = radius * radius * PI;
		
		System.out.println("반지름 : " + radius);
		System.out.println("원주율 : " + PI);
		System.out.println("원의 넓이 : " + area);
		
        
        
	}//main 끝
}// VariableTest 클래스 끝

 

package variableExam;

public class AreaExam {

	public static void main(String[] args) {
    
		// 변수를 사용하여  
		//   1) 사각형의 넓이와 삼각형 넓이

		//	double width = 10;
		//	double height = 5;
		double width = 10, height = 5,  
        
        rectArea=0.0, triArea=0.0;     // 쓰레기 값이 들어갈 수도 있으니 초기화
		
		rectArea = width * height;
		
		width = 5.0;
		height = 7.2;
		triArea = width * height  / 2;
		
		System.out.println("밑변 : " + width);
		System.out.println("높이 : " + height);
		System.out.println("사각형의 넓이 : " + rectArea);
		System.out.println("삼각형의 넓이 : " + triArea);
		
		
		//연산자 우선순위 :  () , ., []
		//  * , / 가 +, - 우선순위가 높음
		// *, / 우선순위 같음 => 왼쪽에서 부터 오른쪽으로 계산
		// +, - 우선순위 같음 => 왼쪽에서 부터 오른쪽으로 계산
		
	
		
		
	}

}

 

 


- 한 번 정의된 자료형에는 다른 자료형을 저장할 수 없음
int number;
number = 7;

int number; X  이미 위에서 number로 선언 되어 있어서
double number;  (X)  이미 int 타입으로 설정이 되어 있어서 에러

- 자료형의 종류
기본자료형 : 실제 값을 저장하는 것
         타입 크기
정수    

byte       1byte

short      2byte
int          4byte               default 
long       8byte
실수 

float       4byte
double   8byte              default
 문자

 char      2byte
boolean boolean true/false

참조자료형 : 주소를 저장
String, 배열, 클래스,....




▣ 변수
- 변수선언
타입 변수명;
타입 변수명=초기값;
int x;
int y;
int z;
int x, y, z;
int x=0, y=0, z=0;

int x=10;
int y=20;
int z=30;
int x=10, y=20, z=30;

-  변수 선언시 주의사항
변수 선언시 초기화를 해준다. 하지 않으면 쓰레기 값이 들어 갈 수 있어 나중에 문제가 된다.
같은 이름으로 변수를 선언할 수 없다.
되도록 이면 위쪽 상단 선언부에 한꺼번에 선언한다.

- 변수를 사용하는 이유
반복되는 값들을 쉽게 관리할 수 있도록
의미 없는 값을 하나의 정보로 만들기 위해 사용한다.

- 변수의 생존 기간
jvm이 데이터를 삭제시키는 시기
변수는 자신이 선언된 { } 안에서만 사용 가능(메서드, 제어문, 생성자,...)
실제 단순히 중괄호({ }) 내에서 변수를 선언하여 사용

    문자열을 초기화 => String str = "";
    문자를 초기화  => char ch = '';  에러, 문자열을 ""에러 아님 그런데 문자 '' 는 에러
   char ch = ' ';  // 문자는 ' ' 사이를 한칸 띄우기
    정수를 초기화  => int  num = 0;
    long longNum = 0L;  // long은 int와 구분하기 위해서 숫자 뒤에 L을 붙인다.
    실수를 초기화  => doubl d =0.0;
   float f = 0.0f ;   // double형의 숫자와 float의 숫자를 구분하기 위해 float형 숫자 뒤에는 f를 붙인다.


▣ 상수
- 항상 그대로인 수로 한 번만 값을 저장
- 값을 저장할 수 있는 공간이지만, 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다.
- 변수의 타입 앞에 키워드 'final'을 붙이기
- 상수이름은 '대문자'로 처리
- 단어의 조합은 '_'로 연결

- final  변수타입 대문자상수이름 = 값;
final int MAX_SPEED = 10;

▣ 리터럴
          int a = 10;
String name = "홍길동";
20


리터럴 => 10, 홍길동, 20,....

==============
▣ 연산자
1. 산술 연산자
덧셈 : + 
뺄셈 : -
곱셈 : *
나눗셈 :  /    , 정수 / 정수 => 정수,   실수 / 정수  => 실수
정수/실수  => 실수
실수/실수  => 실수
나머지 : % , 정수 % 정수  => 정수

public class OperatorExm01 {

	public static void main(String[] args) {
/*
 *   예제1) 사과를 담는 바구니 수를 구하기
 * 		사과의 개수 : 325
 * 		바구니 당 사과를 담는 개수 : 13 
 *      사과가 담긴 바구니 수?
 *      남은 사과 ?
 */
		int numOfApple = 325, countBucket=0, bucketPerApple = 13;
		int restApple=0;
		
		countBucket = numOfApple / bucketPerApple;
		restApple = numOfApple % bucketPerApple;
		
		System.out.println("사과의 개수 : " + numOfApple);
		System.out.println("바구니 당 사과 개수 : " +  bucketPerApple);
		System.out.println("바구니 개수 : " + countBucket);
		System.out.println("남은 사과 수 : " + restApple);
		
	}
}

짝수 :   정수 % 2 == 0
홀수 :   정수 % 2 == 1
n의 배수 :   정수 % n == 0
정수 % 3 == 0 : 3의배수
           정수 % 5 == 0 : 5의 배수

2. 대입 연산자
=    : 오른쪽의 자료를 왼쪽에 담는다
+=  :     a +=2  => a = a + 2
-=  :  a -=2  => a = a - 2
*=  :    a *=2  => a = a * 2
/=  : a /=2  => a = a / 2

3. 삼항 연산자
형식)    
조건식 ? 조건식의 결과가 참이면 실행할 값 : 조건식의 결과가 거짓이면 실행할 값;
조건 ? "참" : "거짓" ;

num % 2 == 0 ? "짝수" : "홀수";
score >= 80 ? "합격" : "불합격";

* 조건식 => 결과가 true/false로 나올 수 있는 식, 또는 true, false

4.  비교연산자
>  : 크다, 초과 ,  왼쪽에 있는 것이 오른쪽에 있는 것보다 크다
>= : 크거나 같다, 이상 , 왼쪽에 있는 것이 오른쪽에 있는 것보다 크거나 또는 같다
<  : 작다, 미만,
<= : 작거나 같다, 이하
== : 같다     왼쪽의 자료와 오른쪽의 자료가 같다
!= : 같지 않다, 왼쪽의 자료와 오른쪽의 자료가 다르다

5.  단항 연산자
++  :   ++a => a = a + 1,  a += 1
--   :    --a =>  a = a - 1,  a -= 1

전위형 : ++a,  --a,   나먼저 바꾸고(증가/감소) 계산에 참여
후위형 : a++, a--    계산에 먼저 참여하고 계산이 끝난 후 나를 증가/감소

6. 논리 연산자
결과가 : true/false
&& : 그리고,   왼쪽과 오른쪽 모두 참일때만 결과가 참
|| : 또는 ,  왼쪽과 오른쪽 중 단 하나라도 참이면 결과가 참

 왼 &&   오 결과
true         true true
true         false false
false   true false
false   false    false

* && 연산에서는 왼쪽의 결과가 false가 나오면  오른쪽은 계산을 안하고 무조건 false로 처리(short circuit)

 왼     ||     오 결과
true         true true
true         false true
false   true true
false   false    false
* || 연산에서는 왼쪽의 결과가 true가 나오면  오른쪽은 계산을 안하고 무조건 true로 처리(short circuit)

            * short circuit : 연산 수행시 결과가 이미 확정된 경우 나머지 연산과정을 수행하지 않는 것

 

package variableExam;

public class OperatorExam02 {

	public static void main(String[] args) {
//		int a=3, b=2, c=5;
//		
//		c = a++ + b--;   
//		System.out.println("a : " + a + ", " + " b : " +b + ", " + " c :" + c);
		
//		int a=3, b=2, c=5;
//		c = a++ + --b;   
//		System.out.println("a : " + a + ", " + " b : " +b + ", " + " c :" + c);

	
	// 논리 연산자
//		boolean result = false;
		boolean result = (10 > 3) && (4 >= 5);
	
	    int kor=80, eng=70, mat=80;
	    result = (kor>=60) && (eng>=60) ;
	    System.out.println(result);
	    System.out.println();
	    
		result = (kor>=60) && (eng>=60) && (mat>=60);
		System.out.println(result);
		System.out.println();
	
	    result =(kor>=60) || (eng>=60) || (mat>=60);
	    System.out.println(result);
	    System.out.println();
		

	    
  
	   
	}

}


▣ 스캐너 클래스
Scanner 참조변수 = new Scanner(System.in);

nextInt()  : 정수를 입력받아 오기
nextLong() : 정수 Long 형 받아오기
nextDouble() : double형 받아오기
next() : 문자열을 받아오기,  문자열을 스페이스 또는 Enter
nextLine() : 문자열, 한줄 단위로 받기,   주소

package variableExam;

import java.util.Scanner;
   
public class OperatorExam03 {

	public static void main(String[] args) {
    
		// 예제1) 두 수를 입력 받아서 두 수 모두 60점 이상이면 "합격" 그렇지 않으면 "불합격"
		// 구하려는 것 :  합격, 불합격  => 중 하나
		// 판단하는 것이 필요  => 삼항 연산자
		// 조건 : 두 수가 모두 60점 이상( && )
		// 입력받기 => Scanner => Scanner 준비 -> 안내문구 -> 입력한 값가져오기 -> 활용
		
		//#1. 변수 선언 -> 두 수, 결과
		int firstNumber=0, secondNumber=0;
//		long firstNumber=0L, secondNumber=0L;
		String result ="";   // 문자열의 기본값 "", null, 문자 : ' ',  boolean : false
		
		//#2. 입력 받을 준비
		Scanner scan = new Scanner(System.in);       
//		클래스명 변수명 new 클래스명 	   
//									   
//									   	

		//#3. 안내 문구
		System.out.println("첫번째 숫자를 입력>>");
		firstNumber = scan.nextInt();                
		
		System.out.println("두번째 숫자를 입력>>");
		secondNumber = scan.nextInt();
		
		//#4. 판단
		result = (firstNumber>=60 && secondNumber>=60) ? "합격" : "불합격";
		
		//#5. 결과 화면에 보여주기
		System.out.println("결과 : " + result);
		
		
		
		
		
	
	
	}

}

 

package variableExam;

import java.util.Scanner;
public class OperatorExam04 {
	public static void main(String[] args) {
//예제3)  num = 3
//숫자 하나를 입력받아 입력한 숫자가 3이면 "같은 수", 그렇지 않으면 "다른 수"	
		
		//#1. 변수 선언 - 가장 위쪽에
	int num = 3, su = 0;
	String result ="";
	
	//#2. 입력받을 준비
	Scanner scan = new Scanner(System.in);
	//#3. 안내 문구
	System.out.println("숫자를 입력>>");
	
	//#4. 사용자 입력한 값 가져오기
	su = scan.nextInt();
	
	//#5. 판단
	result = ( su == num ) ? "같은 수" : "다른 수";
	//#6. 결과 출력
	System.out.println("결과 : " + result);
		//예제4) name = "홍길동"
		//이름을 입력받아서 "홍길동" 같으면 같은 사람,  다르면 다른 사람	
	//#1. 변수 선언
	String name="홍길동", inputName="", nameResult="", equalResult="";
	
	//#2. 입력을 받을 준비 -Scanner
	Scanner scan = new Scanner(System.in);
	
	//#3. 안내문구
	System.out.println("이름을 입력>>");
	
	//#4. 사용자가 입력한 것을 가져오기
	inputName = scan.next();
	
	//#5. 판단
	nameResult = (name == inputName) ? "같 사람" : "다른 사람"; 
	//name == inputName  : 스택에 담긴 주소값이 같은가
	// 주소가 가리키는 곳에 있는 값들이 같은 가? equals()
	//		문자열1.equals(문자열2) =>  문자열1과 문자열2의 글자가 같은가
	
	equalResult = name.equals(inputName) ? "같은 사람" : "다른 사람";
	
	//#6. 결과 출력
	System.out.println("결과1 : " + nameResult); 
	System.out.println("결과2 : " + equalResult);

 

package variableExam;
/* 예제3) 번호를 입력받아서 
 * 번호가 짝수이면 "한강", 홀수이면 "서울숲"으로 나들이 가기?
 * 
 */
import java.util.Scanner;

public class ScannerExam {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);  //키보드로부터 입력받을 께
		int num=0; // 초기화
		String result="";  //문자열을 초기화
//		String msg = "숫자를 입력하세요>>";

		//사용자에게 무엇을 입력할지 알려주는 안내 문구
//		System.out.println(msg);
		System.out.println("숫자를 입력하세요>>");
		
		num = scan.nextInt(); 
//		result = (scan.nextInt() % 2 == 0) ? "한강" : "서울숲";
//		result = (num % 2 == 0) ? "한강" : "서울숲";
		result = num % 2 == 0 ? "한강" : "서울숲";
		
		System.out.println("입력받은 숫자 : " + num);
		System.out.println("나들이 장소 : " + ((num % 2 == 0) ? "한강" : "서울숲"));
		System.out.println("나들이 장소 : " + result);

	}
}
package variableExam;

import java.util.Scanner;
/*
 * 숫자를 입력받아서 60점 이상이면 "합격" 그렇지 않으면 "불합격"
 */
public class ScannerExam02 {
	public static void main(String[] args) {
		int jumsu = 0;
		String result = "";
//		String  name="";

		// #1. 키보드로 부터 입력받겠다.
		Scanner scan = new Scanner(System.in);

		// #2. 안내 문구
		System.out.println("이름을 입력하세요>>");

		// #3. 입력 받은 점수 가져오기
		jumsu = scan.nextInt();
//		name = scan.next();
		result = jumsu >= 60 ? "합격" : "불합격";

		// #4. 결과 출력
		System.out.println("입력받은 점수 : " + jumsu);
//		System.out.println("입력받은 이름 : " + name);
		System.out.println("판정 결과 : " + result);
	}
}


▣  타입변환(형변환, Casting)
1.  기본자료형 간의 타입변환
- 자바는  =(등호)를 기준으로 왼쪽과 오른쪽의 타입이 일치해야 한다.
2. 자동 형변환 
- 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것
- 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생

byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
- 자동 타입 변환이 발생되면 이전의 값과 변환 이후의 값은 동일
즉, 손실 없이 그대로 보존
- 자바에서 정수 연산을 할 경우 jvm은 int 타입으로 계산
byte  연산(+-*/)  byte/short/int  ==> int
short
int

(byte/short/int/long) 연산 (long)  => long
3. 강제 형변환(Casting)
- 형(타입) 변환 연산자를 사용해 데이터 타입을 강제로 변환하는 연산
- (데이터타입)형태의 타입 변환 연산자를 붙임
- 작은 크기 타입 =(작은크기타입) 큰 크기  타입

int a = (int)15.3;

4. 문자열 형변환
- 문자열 어떤 자료형과 묶으면 무조건 문자열
"가" + 10 => 가10
double name = 8.5;
"나" + name =>나8.5

- 문자열을 일반 자료형
"10" : 문자열 => 10(정수)
정수값 :  Integer.parseInt("10")  => 10
Long.parseLong("10") => 10L
실수값 :  Double.parseDouble("3.7")  => 3.7
Float.parseFloat("6.3")  => 6.3F

package variableExam;

public class CastingExam01 {

	public static void main(String[] args) {
//		byte a = 3, b=2;
//		int c=13, d=5;
//		double r =0.0;
//		r = c / d;
//		System.out.println(a + b);
//		System.out.println(r);
		
		int a=13, b=3, score=70;
		double d=0.0, e = 123.7834569;
		String name = "홍길동";
		char grade = 'A'; 
		d = a/b;
		
		
		System.out.println("a / b : " + (a/b));
		System.out.println("a / b : " + (d));
		
		System.out.printf("이름 : %s, 성적 : %d \n학점 : %c,  e : %.2f", name, score, grade, e );
		
	}

}


5. printf( )
- " " 안에 입력
%d :  10진 정수
%s : 문자열
%c : 문자
%f : 실수

%5d : 전체자릿수를 5개 잡고 오른쪽부터 입력
%5.2f : 전체자릿수는 5개 잡고 소수이하 둘째자리까지 표현
%.2f : 소수이하 둘째 자리까지 표현






ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ



스캐너 부분이 어려워서

 

여섯시에 끝나고도 글 정리하면서 계속 봤는데 아직도 잘 모르겠다.


앞날이 어두컴컴~

계속 보면서 눈으로라도 익혀봐야겠다.