기록
day 0508 자료형_연산자 본문
오늘부터 몇번 째 라인이 오류인지 알기위해 메모장대신 EditPlus 사용 - EditPlus 5.7 Download
연습문제)
/*
연습) 아빠나이, 엄마나이, 아들나이를 입력받아서
평균나이를 구하여 출력하는 프로그램을 작성하고 저장, 컴파일, 실행하기
*/
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에서 찾아보기/
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 |