🧸 Day 003 : 자료형, 산술연산 익숙해지기

  • 어제에 이어서 printf()을 intln()을 이용한 산술연산의 출력을 다양한 연습 문제를 통해 배우고 익숙해지는 연습을 했다.
  • 변수를 써보고 코드를 만들어 보는 연습 위주로 했었다.

🌼1 교시 

  • 정수와 정수의 연산은 결과도 정수, 둘 중 하나라도 실수여야 결과도 실수로 나온다.
  • 캐스팅연산 (형변환)
    (double)b; // 정수였던 변수b를 double로 바꿀 때
    ⇒ (바꿀 자료형)변수이름;

 📓연습 문제 

  • 어제 printf()로 출력한 내용을 println()으로 출력해보기

  • 주의!!!
    println()으로 숫자 자료형(정수형, 실수형, char)를 연속해서 출력하고 싶다면?
    ⇒ + 로 이어붙이면 산술연산을 해서 결과값을 출력하므로 중간에 String을 끼워넣기!!

 🔖 int와 char의 관계 

  • 그리고 아스키코드(ASCII)


🌼2 교시 

  • 1교시에 이어서 아스키코드 2

 📓연습 문제 

  • [ 출력양식 ]
    현재는 2022년 입니다.
    저의 출생년도는 ㅇㅇㅇㅇ년 입니다.
    한국나이는 ㅇㅇ세, 만 나이는 생일이 지나지 않았으므로(혹은 지났으므로) 만 ㅇㅇ세 입니다.
  • printf, println 둘 다 출력할것(2가지 버전)
    연산 결과를 별도의 변수로 생성해도 되고, 연산식을 print안에 넣어도 됨

  • println()에서 +로 이어 붙여서 출력할 때 띄어쓰기 조심할 것!

 📓연습 문제 

  • 정수형 변수 세 개 (kor, eng, mat)
    printf, println 중 어떤 것이든지 이용해서 성적표 출력
    점수는 임의 점수 아무거나 대입하고, 총점과 평균도 출력
    2명의 학생의 성적표를 출력하되, 각 학생의 점수는 한 줄 성적표 출력 후
    점수를 바꿔서 대입하고 두 번째 성적을 출력한다.

  • 처음에 println()으로 성적표를 출력해보려고 했으나 평균 값을 표시할 때 문제가 생겼다.
    average의 값이 소수점이 너무 길게 나왔기 때문에… 해서 어제 연습해본 String.format()을 써보려고 했는데 오류가 났다.
    에러 메시지를 읽어보니.
    String으로 바꿨으니 average는 처음부터 Stirng으로 선언해야 한다는 것이었다.
    String으로 바꾸면 출력은 할 수 있으나 숫자 자료형이 아니니 원하는 것과는 다르다고 생각해서 일단 printf로 출력을 해보았다.

  • 쉬는 시간에 println으로 출력할 방법을 찾다가 Math.round()를 써보기로 했다. Math.roun(num)는 값을 소수점 첫째 자리 까지 반올림 해준다. (정확히는 소수점 첫 째 자리에서 반올림을 하는 것 같음)
    그러나 내가 원하는 것은 소수점 두 번째까지 점수가 갖고 싶었다. 이럴 때는 100을 곱해준 값에 Math.round()를 사용하고 그 값을 다시 100.0으로 나눠 주면 된다.
    Math.round(num * 100) / 100.0;
    세 자리는 1000, 1000.0을 넣으면 됨


🌼3 교시 

  • 지역변수 : 중괄호 안에서만 사용하는 변수
  • 프로그래밍을 하다보면, 외부에서 기능을 불러다 사용해야하는 경우가 있는데, 사용자로부터 화면 입력을 받으려면 외부에서 화면 입력을 받는 도구(명령)를 불러와서 사용하게 된다.
    사실 System.out.println()과 printf()도 불러와서 사용하는 외부 명령이며, 이는 따로 설정하지 않아도 자바 프로그래밍 시작과 동시에 자동으로 불러져 오는 도구라고 보면 된다.  (java.lang) 
  • import
    외부에서 기능을 불러올 때 사용하는 명령어 import
    클래스 밖, 패키지 선언 아래에 입력한다.
    import java.util.Scanner;
     import 단축키 : Ctrl + Shift + 'o' 
    단축키를 사용하면 아래 코드에서 API가 없어서 오류 생겼던 모든 상황들에 대해서 import를 실행해준다.

 🔖 사용자에게 데이터를 받아서 사칙연산 하기 

  • 코드의 순서는 중요!!! 뒤바뀌지 않도록 조심할 것!!!
  • 확실히 연산식을 사용하고 출력할 때에는 printf가 훨씬 간결하고 편리한 것 같음 \n만 잊지 않고 포맷과 변수 순서 잘 지켜서 입력한다면!!

 📓연습 문제 : 삼각형 넓이 구하기 

  • 사용자에게 높이와 밑변 값을 입력 받아 삼각형 넓이를 구하는 코드 만들기



🌼4 교시 

 📓연습 문제 : 반지름을 입력 받아서 넓이와 지름 구하기 

  • 반지름을 입력받아서 원의 넓이와, 둘레의 길이를 출력하기
    입력 1개, 출력 2개
    필요한 변수의 이름은 임의로 지어서 사용
    [ 출력 양식 ]
    입력한 원의 넓이 : xx.xx, 둘레의 길이 : xx.xx
    넓이 : 반지름반지름3.141592, 둘레 - 반지름23.141592
    결과는 소수점 둘째 자리까지만 표시, printf, println은 본인 선택

  • Math.round()를 쓰는 것과 (int)로 캐스팅 연산하는 것과 비슷한 것 같았는데 다름!!


🌼5 교시 

 📓연습 문제 

  • 이름, 국어, 영어, 수학 점수를 입력 받아
    1명의 성적표를 총점 평균과 함께 기존 성적표 양식에 맞춰 출력 하기
    문자(이름)를 입력 받는 명령 -> sc.nextLine()
    입력 받을 때 반드시 이름부터 입력 받으세요.
    순서 : 이름 > 국어 > 영어 > 수학
    평균은 소수점 첫 째 자리까지 출력
    printf 또는 println 선택은 자유

  • 연습하다가 문제가 발생!!
    연속으로 입력 받고 싶은데 두 번째 이름을 입력받을 때 입력하지 않고 바로 패스되어 버렸다. (printf와 println 둘 다 한 번에 테스트 하고 싶어서)
    검색해보니 nextLine()의 특징 때문이라는데
    해결법 ⇒ nextLine직전에 scan.nextLine()을 한번 더 써서 입력버퍼를 비워준다. 라는 것인데 다시 이어서 코드를 붙여 보았다.


🌼6 교시 

  • 기본형 변수
    • 정수형 : byte(1), short(2), int(4, 기본형) -21억 ~ 21억, long(8)
    • 실수형 : float(4), double(8, 기본형)
    • 문자형 : char(2)
    • 진위형 : boolean
    • 기본형 자료
      : 자료형을 코딩했을 때 굵은 자주색 폰트로 표시되는 자료형.
      (이클립스 기준) 위에 쓴 자료형들이 모두 해당.
  • 문자열(String) : 객체 자료형, 정해진 자료의 용량은 없음

 🔖 정수(Long형)와 실수(float) 자료를 표시하는 별도의 방법 

  • 정수의 기본형은 int
    ⇒ int a1 = 100; // 기본형 정수 자료형
    byte a2 = a1; (X) => 에러!! byte(1) 범위를 넘어선다. 용량을 초과함

    • double b1 = 123.456; // 기본형 실수 자료형
    • float b2 = 123.456; (X)
      표시 없는 실수는 기본형 double로 인식하기 때문에 에러!!
      float b2 = 123.456F; (o)
    • 100(int형), 100L(Long형), 123.12(double형), 123.12F(float형)
    • 변수에 저장되지 않은 자료 중
      정수는 뒤에 L이 있는지 여부에 따라 Long과 int가 구분되고
      실수는 F 여부에 따라 float과 double로 구분한다.
  • 실행 보류 (코드 블럭 아래 이어서 설명)

	Scanner sc = new Scanner(System.in);
	int n3 = sc.nextInt();
	System.out.println(n3);
  • 프로그램이 시작되면, 변수를 선어하는 명령만 모아 변수를 관리하는 테이블에 넣고 시작한다.
    이 때 입력 명령이 섞여있는 변수선언은 에러 발생,
    문법상 빨간줄이나 엑스 표시는 없지만 실행시 에러 발생 (런타임 에러)
    현재 17버전에서는 에러 없이 잘되나 자바8에서는 안될 수도 있음
  • 변수의 다양한 선언(생성) 방법
    1. 변수 선언 후 값을 할당(대입)
      int n1;
      n1 = 10;
    2. 변수의 선언과 대입을 동시에
      int n2 = 20;
    3. 다수 개의 변수를 한 번에 선언 하는 법 (동일 자료형만 가능)
      int n3, n4, n5;
    4. 다수 개의 변수 값을 대입하면서 생성
      int n3 = 60, n4 =80, n5=100;
    5. 처음부터 모든 변수에 값을 대입할 필요는 없다.
      int n3 = 60, n4, n5=100;
    • 변수의 선언 위치
      사용 전이라면 위치의 관계없이 선언 할 수 있으나
      반드시 선언 후에 사용할 수 있으며 선언 전에 사용 X

🌼7 교시 

  • 6교시에 이어서 …
    변수 선언 이후라도, 값이 대입 되지 않으면 사용이 불가

  • char에는 아스키코드 값이 있어서 char들 간의 산술연산도 가능
    대문자 B 값에 32를 더해서 소문자 b로 변경할 수 있다.

  • 아라비아 기호 '8'에서 아라비아 기호 '0'을 빼면, 수치데이터 정수 8이 결과로 나온다.
    System.out.printf("'8'='0' -> %d\n", '8'-'0');
    ⇒ '8'='0' -> 8

  • 실수형 변수의 값 대입 or 초기화

    • 자바에서 모든 실수들은 별도의 표기가 없으면, 기본적으로 double 타입으로 인식한다.
    • float 타입으로 값을 저장하기 위해서는 float 형 변수를 선언하고
      float 형 데이터를 저장해야 한다.
    • float 변수에 double형 데이터 입력 => 에러!!
      float f1 = 1.123; (X) => 에러!!
    • float 변수에 float 데이터 입력 => 정상실행
      float f2 = 1.123f; // 또는 1.123F; (o)
      double f3 = 1.123;
      float f4 = (float)f3;
    • 용량이 큰 자료형 (double)에 작은 자료형(float) 데이터 대입
      -> 정상 실행
      float f5 = 123.123f;
      double f6 = f5; // 캐스팅 연산 필요 없음

 📓연습 문제 

  • (입력) 사과 갯수 입력
    (입력) 한 상자에 담길 사과의 갯수 입력
    (출력) 입력 조건으로 포장했을 때, 포장된 박스 갯수, 남은 사과 갯수 출력
    <출력 양식>
    박스 개수 : xx
    남은 사과 : xx


🌼8 교시 

  • 이클립스 자동완성 단축키 : Ctrl + Space
  • 7교시 연습 문제 강사님의 해설 보면서 느낀점
    변수 이름 짓는 게 힘들다.. 변수명을 용도를 알아보기 쉽게 짓는 것이 어렵다.
    변수를 만들고 옆에 주석으로 변수 설명을 써주는 것도 좋은 것 같음..
    내가 만들고 헷갈릴 수 있기 때문에 (나는 잊어버렸지만)

 🔖 다양한 연산자 (Operator) 

  • Operator 연산자
    • 대입연산 : =
    • 산술-사(오)칙연산자 : +, -, /, *, %
    • 관계연산자 - 비교연산자 : >, <, >=, <=, ==, !=
    • 논리연산자 : &&(And), ||(Or), !(Not)
    • | (얘 이름은 바(bar), 이고 ‘Shift + 백슬래시’)

  • 피연산자로 쓰인 변수와, 연산의 결과를 저장 변수가, 같은 연산
    (즉, 연산한 결과를 같은 변수에 저장하는 연산)
    •  n = n + 10;  ==  n +=10; 
    • 위에서 주황색을 간단히 쓰면 초록색 둘은 같다.
      -, *, /, %연산도 이렇게 쓸 수 있다.
       n -= 10; 
       n *= 10; 
       n /= 10; 
      (나눗셈은 자료형 바뀌지 않도록 조심할 것, 정수와 실수가 바뀌지 않도록!!!)
       n %= 10; 
      물론 다른 변수들도 바뀌기 전후 자료형 잘 확인 하기!!!
    •  위의 연산에서 변화되는 수가 1 일 때 

  • 중요!! (다음주 시험 범위!!) ⬇️

  • 중요한 점은 위에서 K를 출력했을 때 ++연산이 뒤에 있기 때문에 ++연산을 적용하기 전에 변수에 값을 저장해 버린 것 같다.



 🫖 복습을 마무리 하면서 

  • 마지막에 배운 ++와 -- 연산이 앞에 있을 때와 뒤에 있을 때의 차이점이 헷갈리는 것 같다.
  • 내일은 쉬는 시간과 점심시간에 블로그를 미리 적어야 할 것 같다.
    점점 배우는 내용이 많아지면서 블로그 쓰고 정리하는 시간이 너무 부족해서 교재를 따로 공부할 시간이 없다. 다음주 화요일에 1주 내부시험이 있으니 틈틈히 읽고 주말에 여러 번 읽어야 할 것 같다.
  • 미리 예습도 해야할 것 같다. 다행히 월요일이 개천절 휴강이라 주말 3일을 잘 활용해야 할 듯 하다.
  • 국비과정이 짧은 시간에 많은 것을 배우기 때문에 힘들다고 들어서 미리 공부를 했음에도 불구하고 진도가 매우 빠르다고 느꼈다.
    비전공자라면 바로바로 이해하기 힘들 것 같다.
    미리 공부를 안했다면 수업내용을 메모하기는커녕 진도 따라기는 것도 버거울 것 같다.
  • 아마 아무 준비없이 혹은 JS나 HTML, CSS만 간단히 배우고 시작했다면 바로 포기했을 것 같다. 주말에 복습, 예습을 꼭꼭 해야겠다.
profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글