230213 TIL #7 java 버전 관리

김춘복·2023년 2월 13일
0

TIL : Today I Learned

목록 보기
7/571

230213 Today I Learned

본격적으로 언어학습 주차에 들어왔다. java를 새 버전으로 다시 깔고 intellij도 community버전에서 ultimate 버전으로 바꿨다. 항해99를 들어오고 본격적으로 java를 시작한다.

java 버전 중복 설치

  • 기존 강의를 들으면서 java 8(=1.8)버전과 openJDK zulu 8 버전이 설치 되어있었다.

  • 문제점 : 새로 배우려면 java 17버전을 받으라고 하는데 버전이 중복 설치 되어도 문제가 없을까가 고민이 되었다.

  • 시도 및 해결 : 검색해보니 중복 설치해도 문제는 없고 오히려 버전별로 이동하는게 가능했다.
    17버전과 8버전을 폴더를 나눠 따로 설치 한 뒤, 환경변수만 그때그때 조정해주면 된다.
    고급시스템설정 - 환경변수 - 시스템변수에서
    JAVA_HOME 과 Path 를 버전에 맞게 폴더를 지정하면 깔끔하게 버전 변경이 가능했다.
    cmd에서 java -version 을 입력하면 버전확인이 가능하다.

화씨 섭씨 변환 자릿수 반올림

문제 풀면서 여기서 한번 막혔다.

3-6. 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다.
변환 공식이 'C = 5/9*(F-32)'라고 할 때, 빈 칸에 알맞은 코드를 넣으시오.
단, 변환값은 소수점 셋째자리에서 반올림하며, Math.round() 함수를 사용하지 않고 처리할 것!

class Exercise3_6{
   public static void main(String[] args){
      int fahrenheit = 100;
      float celcius = (/*빈 칸*/);
      
      System.out.println("Fahrenheit:"+fahrenheit);
      System.out.println("Celcius:"+celcius);
   }
}
  • 문제점 : Math.round()를 사용하지 않고 반올림하려니 방법을 못 찾았다.

  • 시도 :
    일단 처음에 계속 0이떠서 float으로 통일 하는 방법을 찾았다.
    float celcius = ((5/9F * (fahrenheit-32))로 하니 37.77778이 출력
    5/9의 결과값이 0으로 인식되어 float으로 통일하기 위해 5/9 뒤에 F를 붙였다.
    답을 찾지 못해 java 소수점 반올림으로 검색해보았으나

String.format("%.2f", 변수);  // String.format("format", 변수)
Math.round((변수*100)/100.0);

만 나올뿐 문제에서 원하는 답은 아니었다.

  • 해결 :
  1. (5/9F * (fahrenheit-32)값에 100을 곱한다. // 3777.778
  2. 0.5를 더한다 // 3778.278
  3. 2의 값을 int로 변환한다. (2,3으로 강제로 반올림) // (int) 3778.278 = 3778
  4. 3의 값을 100F로 나눈다. // 37.78
  • 알게된 것 : flaot 에서 0으로 인식되는 값은 f를 분모 뒤에 붙이거나 f값으로 나눠주면 된다.
    0.5를 더하고 int로 바꾸면 강제 반올림이 가능하다.

  • 근데 강제로 반올림을 하는게 너무 문제 조건에 맞춰 어거지로 푼 것 같아서 다시 한번 고민해보자.

java 세션 첫날 메모

java테마 : Cyan, godat 이 쓰기 좋다. 컴퓨터 안좋으면 기본 쓰자
char c = ‘’; 이렇게 공백 넣기 불가능
String s = “”; String은 공백 가능
Float 는 숫자 뒤에F!!!!!
큰거를 작은거에 넣으면 값 손실이나니까 자동으로 형변환 안해준다!
작은걸 큰거 안에 넣으면 값 손실 안나니까 그냥 들어간다. Ex) double d = 3.13f 가능!
Sout(“” + 아무값); 하면 “아무값” 문자열로 나옴.
&&(and)가 ||(or)보다 순서가 빠르다!!!
!는 거의 가장 마지막!
char byte(int보다 작은애들)들은 범위가 작아 연산할 때 int로 바뀌어서 연산.
Sout(c++)은 내가 포함된 기능들이 먼저 수행되고 나서 증감연산자가 수행된다.

개발자적 사고방식!!

문제에서 주어진 값만 푸는게 아니라 모든 값에서 적용이 되는 해결방법을 생각하자!!!

profile
Backend Dev / Data Engineer

0개의 댓글