Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

기록

day 0508 자료형_연산자 본문

📖

day 0508 자료형_연산자

슈슈파나 2024. 5. 8. 17:25

오늘부터 몇번 째 라인이 오류인지 알기위해 메모장대신 EditPlus 사용 - EditPlus 5.7 Download

 

EditPlus - Text editor with FTP, FTPS and sftp capabilities

EditPlus - Text editor with FTP, FTPS and sftp capabilities Welcome to EditPlus home page! ● Click here to Buy Now ● Download EditPlus 5.7 (2023-01-30) New! --> ● Latest Bug Patch File - 5.7 patch build 4589 (2024-03-27) New! EditPlus is a text edito

www.editplus.com

 
연습문제)

/*
연습) 아빠나이, 엄마나이, 아들나이를 입력받아서 
평균나이를 구하여 출력하는 프로그램을 작성하고 저장, 컴파일, 실행하기
*/

import java.util.Scanner;

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

		Scanner sc = new Scanner(System.in);

		int mom, dad, son, avg;

		System.out.print("엄마 나이를 입력 : ");
		mom = sc.nextInt();
		System.out.print("아빠 나이를 입력 : ");
		dad = sc.nextInt();
		System.out.print("아들 나이를 입력 : ");
		son = sc.nextInt();
		
		int tot = mom + dad + son;
		avg = tot / 3;

		System.out.println("엄마 : " + mom + ", 아빠 : " + dad + ", 아들 : " + son + ", 평균 : " + avg);
	}
}

 
/날짜와 시간을 알려주는 class/
java.util.Date;

 
Method and Description : 기능 
Modifier and Type : 기능이 돌려주는 결과

 
Note : 사용했다고 나오는것 컴파일은 잘 되있다 

Note: Cancer.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
import java.util.Scanner;
import java.util.Date;

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

        Scanner sc = new Scanner(System.in);
		// 객체 생성 : 현재날짜, 시, 분, 초를 today 변수에 갖고온다
		Date today = new Date();

        String name;
        int age, year, thisYear=today.getYear() + 1900; // getYear : today에서 연도를 가져와라

        System.out.print("이름은?");
        name = sc.next();

        System.out.print("출생연도는?");
        year = sc.nextInt();
        age = thisYear - year;

        String result = "무료암검진 비대상자 입니다.";
        if(age >= 40){
            result = "무료암검진 대상자 입니다.";
        }

        System.out.println("*** 무료 암검진 판별 결과 ***");
        System.out.println("이름" + " : " + name);
        System.out.println("올해연도" + " : " + thisYear);
		System.out.println("출생연도" + " : " + year);
        System.out.println("나이" + " : " + age);
        System.out.println("결과" + " : " + result);
    }
}

 
/자료형 (Data Type)/
프로그램 실행중에 발생하는 데이터를 저장하기 위해서는
저장하기위한 기억 장소를 마련해야 하는데
그것을 "변수를 선언한다"라고 합니다.
 
변수를 선언할 때에는
그 변수에 어떤 성격의 데이터를 저장할 것인지 정해주어야 합니다.
그것을 "자료형"이라고 합니다.
 
1) 기본 자료형 : 변수 자신이 값을 갖고 있는 자료형
    컵(변수)안에 콜라를 담았다 > 기본 자료형

<< 기본 자료형 >>

boolean : 논리값을 저장하기 위한 자료형 
char : 문자를 저장하기 위한 자료형
byte,short, int(*), long : 정수를 저장하기 위한 자료형
float, double(*) : 실수를 저장하기 위한 자료형

 
2) 참조 자료형 : 변수 자신이 값을 갖고 있는 것이 아니라 값이 있는 메모리를 참조(가리키는)하는 자료형
    어딘가를 가리키며 리모컨을 눌렀다 > 참조 자료형
    ==> 객체 변수, 배열
 
/boolean 자료형/

class  BooleanTest
{
	public static void main(String[] args) 
	{
		// isMan에 논리값을 저장한다
		boolean isMan; 
		isMan = true;

		// name에 문자열을 저장한다
		String name;
		name = "홍";

		// age에 정수를 저장한다
		int age;
		age =  20;

		System.out.println("name : " + name);
		System.out.println("age : " + age);
		System.out.println("isMan : " + isMan);

	}
}

import java.util.Scanner;
import java.util.Date;

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

        Scanner sc = new Scanner(System.in);
		Date today = new Date();

        String name;
        int age, year, thisYear=today.getYear() + 1900; 

        System.out.print("이름은?");
        name = sc.next();

        System.out.print("출생연도는?");
        year = sc.nextInt();
        age = thisYear - year;

		boolean flag = false; // boolean 자료형
        String result = "무료암검진 비대상자 입니다.";
		flag = age >= 40;

        if(flag){
            result = "무료암검진 대상자 입니다.";
        }

        System.out.println("*** 무료 암검진 판별 결과 ***");
        System.out.println("이름" + " : " + name);
        System.out.println("올해연도" + " : " + thisYear);
		System.out.println("출생연도" + " : " + year);
        System.out.println("나이" + " : " + age);
        System.out.println("결과" + " : " + result);
    }
}

class  LoopTest2 {
	public static void main(String[] args) {
		boolean flag = true;

		// 현재 n의값에 +1 해서 n에 저장하기 (n = n + 1)
		int n= 0;

		// n이 7이면 false 
		while(flag) {
			System.out.println("누가바");
			n = n + 1;

			if (n == 7) {
				flag = false;
			}

		}
	}
}

/*
	무한반복한다
	while(ture){
		System.out.println("누가바");
	}
*/

쌤이 ㄴㅏ 누가바 좋아한다고 공개처형하셨다 ,,
늘그니는 누가바가 조크든요 ~

/char 자료형/

class CharTest {
	public static void main(String[] args) {
		// 한글자만 저장가능
		char like;

		// ""로 할 경우 error: incompatible types: String cannot be converted to char
		like = 'x';
		System.out.println(like);
	}
}

 
/String 기능 Method Summary에서 찾아보기/

String 에서 length로 길이 구하기

 
java는 index가 0번째부터 시작한다
h e l  l  o
0 1 2 3 4 ==> index
 
char안에 글자 위치 찾기
data.charAt(0);

class CharTest2 {
	public static void main(String[] args) {
		String data;
		data = "hello";

		char ch;
		// 변수에 저장하려면 자료형이 char야 한다
		ch = data.charAt(0);
	
		System.out.println(ch);
	}
}

class CharTest3 {
	public static void main(String[] args) {
		String data;
		// 문자열 길이는 5글자, 인덱스는 4까지
		data = "hello";
		char ch;

		// while문으로 char 한글자씩 출력하기
		boolean flag = true;
		int i = 0;

		while(flag){
			ch = data.charAt(i);
			System.out.println(ch); // 출력
			i = i + 1;

			// i 가 0번째 글자를 가져와 출력, if문 i==data.length() 조건이 맞을때까지 반복
			if (i == data.length()){
				flag = false;
			}

		}
	}
}

 
연습문제)

/*
연습) 사용자한테 문자열을 입력받아
그 문자열안에 대문자 A는 모두 몇개 있는지 판별하여 출력하는 프로그램을 작성 해 봅니다.
*/
import java.util.Scanner;

class  CharTest4 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String data;
		int i = 0, cnt = 0; // i : 개수를 세기위한 변수, cnt 대문자 개수를 위한 변수
		boolean flag = true; // 반복문을 그만두기위한 변수
		char ch; // char형 변수

		System.out.print("문자열을 입력하시오.");
		data = sc.next();
		
		// 현재는 flag에 true가 있어서 무한반복
		while (flag){
			ch = data.charAt(i); // i번째에 있는 index를 가져와서 ch에 저장하라
			i = i + 1; // 0, 1, 2 ==> 문자열 길이까지 반복
			
			// data의 length와 같아졌느냐
			if (i == data.length()){
				flag = false;
			}
			if (ch == 'A') {
				cnt = cnt + 1; // 대문자 'A'의 개수
			} //end if
		} // end while

		// 반복문 탈출 지점에 출력하기
		System.out.println("대문자 A의 개수 : " + cnt + "개");

	} // end main
} // end class

 
/bit 2진수/
전기선 한 가닥이 있으면 표현할 수 있는 신호의 수는 2개 입니다.
불켜기(1) / 불끄기(0)
 
1bit 2개 (0, 1)
2bit 4개 (전기선1 x, 전기선2 y)
x y
0 0 
0 1
1 0
1 1
----
4개
 
/정수를 위한 자료형/
byte (8bit)             : -2의 7승 ~ 2의 7승 - 1 (-128 ~ 127)
short (16bit)          : -2의 15승 ~2의 15승 - 1
int (32bit)              : -2의 31승 ~2의 31승 - 1
long (64bit)           : -2의 63승 ~2의 63승 - 1
 
/byte값(-128 ~ 127)을 넘었을 경우/

class ByteTest {
	public static void main(String[] args) {
		byte data; // 1byte 사용
		data = 127;
		data = data + 1;
		System.out.ptintln(data);
	}
}

 
/형변환 하기/
overflow 발생

// byte가 표현할 수 있는 최대값을 넘어서 overflow가 발생하였습니다.
class ByteTest {
	public static void main(String[] args) {
		byte data; // 1byte 사용
		data = 127;
		             // 형 변환하기 
		data = (byte)(data + 1);
		System.out.println(data);
	}
}

 
underflow 발생

// byte가 표현할 수 있는 최대값을 넘어서 underflow가 발생하였습니다.
class ByteTest2 {
	public static void main(String[] args) {
		byte data; // 1byte 사용
		data = -128;
		             // 형 변환하기 
		data = (byte)(data - 1);
		System.out.println(data);
	}
}

 
/실수를 위한 자료형/
float (4bit)
double (8바이트)
 
자바에서는 실수값이 오면 기본적으로 double로 취급한다

class DoubleFloatTest {
	public static void main(String[] args) {
		double data1;
		data1 = 26.7;
		System.out.println(data1);

		float data2;
		// data2 = 26.7; error
		data2 = (float)26.7; // 26.7f 도 가능
		System.out.println(data2);
	}
}

/*
error: incompatible types: possible lossy conversion from double to float
                data2 = 26.7;
                        ^
1 error

실수값을 바로 float 변수에 저장할 수 없다
*/

 


14:00~
 
자료형이 다른 것 끼리 연산을 하면 
그 결과는 그 중에 큰 자료형이 됩니다.
 
2(int) + 2.5(double) = double이 된다
 
5 / 2 = int 2
5 / 2.0 = double 2.5
 
int끼리 연산을 하면 결과도 int입니다.
만약 실수값의 결과를 기대한다면 그 중 하나를 double로 변환하여 연산한다

class IntDouble {
	public static void main(String[] args) {
		/*
		error: incompatible types: possible lossy conversion from double to int
		정수 + 실수의 결과는 실수이기 때문에 int에 저장할 수 없다
		
		int a = 2 + 2.5; 
		*/

		double a = 2 + 2.5;
		System.out.println(a);
	}
}

 
/double형에 담은 후 int / int = int를 double로 출력하기/

class IntDouble2 {
	public static void main(String[] args) {
		// 나누기 한 결과를 실수값 담고 싶어요

		double div;
		div = 5/2; // 2.5가 안나오고 2.0이 나온다. int / int 라서
		System.out.println(div);
	}
}

/*
0.2이 나오는 이유 ?

5 / 2 의 결과는 정수/정수를 했기 때문에 2입니다.
이것을 double형의 변수 div에 저장하여 결과가 2.0이 됩니다.
만약, 실수의 값 2.5가 나오기를 기대한다면
둘 중 하나를 double형으로 변환합니다 (형변환)

div = 5 / 2.0;
div = 5 / (double)2;
*/

 
/printf 형식지정하여 출력하기/

class DoubleTest {
	public static void main(String[] args) {
		double height;

		height = 179.57312;
		System.out.println(height);
		// f : format 형식지정
		System.out.printf("키 : %.2f", height); // .2 소수점 둘째자리까지 출력

		int age;
		age = 20;
		// println  ln은 줄바꿈
		System.out.println("나이는 : " + age);
		// printf  %f는 실수, %d는 정수, \n 줄바꿈
		System.out.printf("나이 : %d\n", age);

		String name;
		name = "이름";
		// printf 사용하여 이름, 나이, 키 한번에 출력하기
		System.out.printf("이름 : %s\n나이 : %d\n키 : %.1f", name, age, height);
	}
}

 
연습문제)

/*
연습) 학생의 이름, 국어, 영어, 수학을 입력받아
총점과 평균을 각각 구하여 출력합니다.
단, 평균은 소수점 첫째자리까지 출력합니다.
*/
import java.util.Scanner;

class StudentTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String name;
		int kor, eng, meth, tot;
		double avg;

		System.out.print("이름 : ");
		name = sc.next();
		System.out.print("국어 : ");
		kor = sc.nextInt();
		System.out.print("영어 : ");
		eng = sc.nextInt();
		System.out.print("수학 : ");
		meth = sc.nextInt();

		tot = kor + eng + meth;
		avg = tot / 3.0; // 실수로 나누기

		System.out.printf("이름 : %s\n국어 : %d\n영어 : %d\n수학 : %d\n총점 : %d\n평균 : %.1f", name, kor, eng, meth, tot, avg);
	}
}

 
/연산자/
 
1) 산술연산자
 + 더하기
 -  빼기
 *  곱하기
 /  나누기(몫)
% 나누기(나머지)
 
/6의 배수 출력하기/

/*
숫자 12는 6의 배수인가? 나머지가 0이기때문에

사용자한테 임의의 수 n을 입력받아
그 수가 6의 배수인지 판별하여 적합한 메세지를 출력하는 프로그램을 작성합니다
*/
import java.util.Scanner;

class MultipleOf6 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n;

		System.out.print("숫자를 입력하시오.");
		n = sc.nextInt();

		/* 
		(방법2)
		String result = "6의 배수가 아닙니다.";

		boolean flag = n % 6 == 0;

		if(flag){
			result = "6의 배수 입니다.";
		}
		System.out.printf("%d는 %s", n, result);
		*/

		if (n%6==0){
			System.out.println("6의 배수입니다."); 
		}else{
            System.out.println("6의 배수가 아닙니다."); // String result = ""; 로 초기값 주는 방법
		}

	}
}

 
1 ~ 100 모든 수 출력하기

// 1 ~ 100 모든 수 출력하기

class  Print1to100{
	public static void main(String[] args) {
		int num = 1;

		while(num <= 100){
			// 옆으로 5칸씩 띄워 출력하기
			System.out.printf("%5d", num );

			// System.out.println(num);

			num = num + 1;
		}
/*
(방법2)
boolean flag = true;
int n = 1;
while(flag){
	System.out.println(n);

	if(n == 100){
		flag = false;
	}
	n = n + 1;
}
*/
	}
}

 
1 ~ n 까지의 모든 수 출력하기

// 1 ~ n까지의 모든 수 출력하기
import java.util.Scanner;

class  Print1ToN{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("1부터 어디까지 출력하시오?");
		int to;
		to = sc.nextInt();

		boolean flag = true;
		int n = 1;
		while(flag){
			System.out.printf("%5d", n);

			if(n == to){
				flag = false;
			}
			n = n + 1;
		}

	}
}

 
1 ~ n 까지의 3의 배수 출력하기

// 1 ~ n까지의 모든 수 출력하기
import java.util.Scanner;

class  Print1ToN3{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("1부터 어디까지 출력하시오?");
		int to;
		to = sc.nextInt();

		boolean flag = true;
		int n = 1;
		while(flag){
			if(n % 3 == 0){ // if문 추가
			System.out.printf("%5d", n);
			}
			if(n == to){
				flag = false;
			}
			n = n + 1;
		}
	}
}

 
n을 입력받아 3의 배수의 합을 누적하여 출력하기

// 1 ~ n까지의 3의 배수의 합을 누적하여 출력하기

import java.util.Scanner;

class  Print1ToN3Sum{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("1부터 어디까지 출력하시오?");
		int to;
		to = sc.nextInt();

		boolean flag = true;
		int n = 1;
		int sum =0; // 합을 누적할 변수 추가

		while(flag){
			if(n % 3 == 0){ // if문 추가
				sum = sum + n; // 0 + 3의 배수를 sum에 저장한다
			}
			if(n == to){
				flag = false;
			}
			n++; // n = n + 1;
		}
		// System.out.println(sum);
		System.out.printf("1부터 %d까지의 3의 배수의 합은 %d", to,sum);
	}
}

 
2) 증감 연산자
++ : 변수 자신에 1증가시켜 다시 변수에 저장 
-- : 변수 자신에 1감소시켜 다시 변수에 저장 
 
n++;  // n = n + 1;
++n; 도 된다.
 
단독으로 쓰일때에는 변수명 앞에 오거나 뒤에 오거나 동일하게 동작하지만
다른 연산자와 같이 쓰일때에 의미가 달라진다.

/* 
증감연산자가 단독으로 쓰일때는
변수명 앞에오거나 뒤에오거나 동일하게 동작합니다.
*/

class IncDec {
	public static void main(String[] args) {
		int a =5;
		int b = 5;

		a++;
		++b;

		System.out.println(a); //6
		System.out.println(b); //6 
	}
}

 

/* 
증감연산자가 단독으로 쓰일때는
변수명 앞에오거나 뒤에오거나 동일하게 동작합니다.
*/

class IncDec2 {
	public static void main(String[] args) {
		int a =5;
		int b = 5;

		// a의 값을 1증가 시키고 그 a를 i에 저장한다. (먼저 증가)
		// ++a;를  i에 넣어라 (6)
		int i = ++a; 
		System.out.println(a); // 6
		System.out.println(i);  // 6

		//b의 값을 j에 저장하고 b의 값을 1증가 시킨다.  (나중에 증가)
		// b를 j에 넣어라 (5)
		int j = b++;
		System.out.println(b); // 6
		System.out.println(j); // 5 
	}
}

/*
++a와 a+1은 같은 건가요? 안같아요

a+1은 a값이 변하지 않는다
++a는 a값이 변하고 a에 다시 저장된다
*/

class IncDec3 {
	public static void main(String[] args) {
		int a =5;
		int b =5;

		System.out.println(++a); // 6
		System.out.println(b+1); // 6

		System.out.println(a); //6
		System.out.println(b); //5
	}
}

 
3) 복합치환 연산자 +=, -=, *=, /=, %= ...
변수 자신에게 연산한 결과를 다시 변수에 저장한다

sum += n; // sum = sum + n;

 
4) 비교연산자 : 비교연산자를 사용한 자료형은 boolean이 된다.
>    크냐?
<    작냐?
>=  크거나 같냐?
<=  작거나 같냐?
==  같냐?
!=   같지않냐?

// 사용자에게 키(cm)를 입력받아 키가 170이하이면 "입장가능" 그렇지 않으면 "입장불가능"을 출력

import java.util.Scanner;

class ClubEnter {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		double cm;

		System.out.print("키를 입력하시오.");
		cm = sc.nextDouble();

		if(cm <= 170){
			System.out.println("입장가넝");	
		}else{
			System.out.println("입장불가넝");				
		}
	}
}

 
1) 오늘 학습한 내용에 대하여 요약 정리하고 궁금한 점 질문합니다.
2) 요약정리가 끝난 사람들은 다음을 진행합니다.
exercise 3, 4, 5, 6, 7, 8, 9, 10
LAB 1, 2, 3, 4, 5
 

/*
LAB 1. 다음과 같은 프로그램을 편집하여 Data.java 파일에 저장하라
*/

class Data {
	// 1) The value of n : 10
	public static void main(String[] args) {
    	// 3)
        boolean flag = false;

		int n = 10;
		System.out.println("The value of n : " + n);

		// 5)
		byte index = 200;
		System.out.println(index);
	}
}

1) The value of n : 10
2) error: variable n might not have been initialized
3) boolean flag = false;
4)
5) error: incompatible types: possible lossy conversion from int to byte

 
- 내일 배울거,, 
비교연산자, 논리연산자, 비트연산자, 비트이동연산자, 삼항연산자
제어문(선택문 - if, switch 반복문 - for, while, do-while)

'📖' 카테고리의 다른 글

day 0514 배열_메소드  (0) 2024.05.14
day 0513 반복문_배열  (1) 2024.05.13
day 0510 선택문_반복문  (0) 2024.05.10
day 0509 연산자_선택문  (0) 2024.05.09
day 0507 애플리케이션 기본 구조  (0) 2024.05.07