• Homework(1)

    2021. 6. 17.

    by. 와트

    ※문제. 자바 기본 API활용
    자바에서 지원하는 API 중 java.util.Date 클래스를 이용해서 오늘 날짜를 출력하세요
    (출력형식 : 2020/8/14)

     

    더보기
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public static void main(String[] args) {
            
            Date date = new Date();        
            System.out.println(date);
            
            // Answer_01
            // Date 클래스만 이용해 print
            // getYear에서 년도는 1900을 뺀 값이 반환되므로 이를 더해줘야 함.
            // getMonth에서 월은 0~11이 반환되므로 1을 더해줘야 함.
            
            int year = date.getYear() + 1900;
            int month = date.getMonth() + 1;
            int day = date.getDate();
            System.out.println(day + "/" + month + "/" + year);
            
            
            // Answer_02
            // SimpleDateFormat을 이용하여 Date를 원하는 형태로 포맷.
            // format 함수를 이용하면 생성자에 입력한 패턴 대로 날짜 형태가 바뀌어 출력됨.
            
            SimpleDateFormat dateForm = new SimpleDateFormat("dd/MM/yyyy");
            String str = dateForm.format(date);
            System.out.println(str);
    }
    cs

    처음에 Date 클래스에 대한 이해가 전혀 없어서 답안 도출이 힘들었다.

    api를 봐도 이해가 잘 안가서 일단 무작정 객체 date를 출력해봤더니 이런 결과가 나왔다.

    date 자체가 현재 일자를 업데이트 해서 출력해주는 것 같은데, 원하는 포맷으로 출력하려면 어떤 것을 사용해야 하는지 찾기가 어려웠다.

    구글링을 통해 get 메소드를 이용한다는 걸 알았고, 이를 println으로 출력했다.

     

    두번째 방법은 SimpledateFormat을 이용한 방법으로, 위와 마찬가지로 구글링을 하다 찾았다.

    java.text에 있는 클래스로 내가 원하는 대로 포맷을 지정해서 정보를 변형할 수 있다.

     

    가장 큰 실책은 실행 클래스와 기능 제공 클래스를 구분하지 않은 것.

    지금은 몇 줄 안되는 코드가 괜찮지만, 나중에는 이렇게 코딩하다가는 오류 찾아내는 데에 한참 걸릴 듯...

    가장 오랜 시간이 걸렸던 문제.

    모르는 클래스를 이용해서 답안을 도출하려니 헤매는 시간이 많았다.

     

    더보기
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public void test3(){
            // Answer_03
            // Calendar 클래스를 이용해 print
            
            Calendar cal = Calendar.getInstance(); //현재 시각 정보를 가진 객체 생성
            System.out.println(cal.get(Calendar.YEAR));
            System.out.println(cal.get(Calendar.MONTH) + 1);
            System.out.println(cal.get(Calendar.DATE));
            }
    cs

    선생님이 말씀해주신 답안 중 내가 푼 방법이 아닌 다른 방법들.

    요즘은 Date 클래스에서 get메소드를 이용하려고 하면 Calendar 클래스를 사용할 것을 추천한다.

    확실히 코드가 더 깔끔하다.

    Date클래스의 경우 getYear()은 1900을 더해주어야 하고, getMonth도 1을 더해줘야 한다.

    Calendar클래스는 달을 구할 때만 1을 더해주는 것으로 바뀌어 더 직관적이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
        public void test4(){
            // Answer_04
            // java.time 패키지 LocalDate를 이용해 print
            
            LocalDate now = LocalDate.now(); //현재 날짜 정보를 가진 객체 생성
            System.out.println(now.getYear());
            System.out.println(now.getMonthValue()); // 1~12. 우리가 쓰는 숫자 바로 돌려줘 가공 필요 없음
            System.out.println(now.getDayOfMonth());
        }
    cs

    가장 최근 클래스인 LocalDate 클래스.

    달을 구할 때도 1을 더해주는 번거로움이 없다.

    이렇게 한 문제를 여러 답안으로 고민하는 과정이 필요한 것 같다. 

     

    ※문제. 변수 연습
    정수 두 개를 입력받아, 두 수의 합, 차, 곱, 나누기한 몫과 나머지 출력

    => 입력예
    첫번째 정수 : 23
    두번째 정수 : 7

    => 출력예 
    더하기 결과 : 30 --> (값1 + 값2)
    빼기 결과 : 16 --> (값1 - 값2)
    곱하기 결과 : 161 --> (값1 * 값2)
    나누기한 몫 : 3 --> (값1 / 값2)
    나누기한 나머지 : 2 --> (값1 % 값2)[연습 2]

     

    더보기

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class Example {
     
        Scanner sc = new Scanner(System.in);
        
        public void example1() {
            
            System.out.println("첫번째 정수를 입력하시오 > ");
            int a = sc.nextInt();
            
            System.out.println("두번째 정수를 입력하시오 > ");
            int b = sc.nextInt();
            
            System.out.println("더하기 결과: " + (a + b) + "--> (" + a + "+" + b + ")");
            System.out.println("빼기 결과: " + (a - b) + "--> (" + a + "-" + b + ")");
            System.out.println("곱하기 결과: " + (a * b) + "--> (" + a + "*" + b + ")");
            System.out.println("나누기한 몫: " + (a / b) + "--> (" + a + "/" + b + ")");
            System.out.println("나누기한 나머지: " + (a % b) + "--> (" + a + "%" + b + ")");
        }
    cs


    포맷을 그대로 따라가기 위해 노력했는데, 오늘 배운 내용까지 생각하면 여기에 printf를 사용하면 더 깔끔할 것 같다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        public void example1() {
            
            System.out.println("첫번째 정수를 입력하시오 > ");
            int a = sc.nextInt();
            
            System.out.println("두번째 정수를 입력하시오 > ");
            int b = sc.nextInt();
            
            int sum = a + b;
            int subs = a - b;
            int times = a * b;
            int divide = a / b;
            int moduler = a % b;
     
            System.out.printf("더하기 결과 : %d --> (%d + %d)%n",sum, a, b);
            System.out.printf("빼기 결과 : %d --> (%d - %d)%n",subs, a, b);
            System.out.printf("곱하기 결과 : %d --> (%d * %d)%n",times, a, b);
            System.out.printf("나누기한 몫 : %d --> (%d / %d)%n",divide, a, b);
            System.out.printf("나누기한 나머지 : %d --> (%d %% %d)%n",moduler, a, b);
        }
    cs

    훨씬 보기 좋다.

     

    ※문제. 형변환 실습

    키보드로 문자하나를 입력받아, 그 문자의 유니코드(아스키코드)를 출력되게 함

    => 입력예 :
    문자 입력 : A
    => 출력예 :
    A is unicode : 65

     

    더보기
    1
    2
    3
    4
    5
        public void printUnicode() {
            System.out.println("문자를 입력하세요 > ");
            char ch = sc.next().charAt(0);
            System.out.println(ch +" is unicode : " + (int)ch);
        }
    cs


    이것도 미리 알았다면 int num을 만들고 printf를 이용해서

    System.out.printf("%c is unicode : %d%n", ch, num);

    이렇게 출력했을 거 같다.

    '혼자 있는 방 > Java' 카테고리의 다른 글

    Homework(3)  (0) 2021.06.21
    Homework(2)  (0) 2021.06.18
    자바 라이브러리  (0) 2021.06.07
    인터페이스(interface)  (0) 2021.06.03
    추상 클래스(abstract class)  (0) 2021.06.02

    댓글

Designed by Nana