혼공자 자바 java

메소드 선언부 method signiture

  • 리턴 타입: 메소드가 리턴하는 결과의 타입 푷시
  • 메소드 이름: 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지어준다
  • 매개 변수 선언: 메소드를 실행할 때 데이터를 받기 위한 변수를 선언
  • 메소드 실행 블록: 실행할 코드를 작성

 

메소드 선언

  • 메소드 선언은 선언부와 실행 블록으로 구성

 

리턴 타입

  • 리턴값의 타입 == 실행한 후의 결과값
  • 메소드는 리턴값이 있을 수도 있고 없을 수도 있으나 리턴값이 있을 경우 리턴 타입이 선언부에 명시되어야 함

 

메소드 이름

  • 숫자로 시작하면 안되고 $와_를 제외한 특수문자 사용 금지
  • 관례적으로 메소드 이름은 소문자로 작성
  • 서로 다른 단어가 혼합된 이름이라면 뒤이어 오는 단어의 첫 글자는 대문자로 작성

 

매개 변수 선언

  • 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용

 

매개 변수의 개수를 모를 경우

  • 매개 변수를 배열 타입으로 선언하는 것
int sum1(int[] values){ }
int sum2(int ...values) { }

 

리턴문

  • 리턴값이 있는 메소드
  • return 리턴값;
  • return문이 없다면 컴파일 에러가 발생
  • return문이 실행되면 메소드는 즉시 종료

 

리턴값이 없는 메소드:void

  • void로 선언된 메소드에서 return은 메소드 실행을 강제 종료 시키는 역할을 함

 

메소드 호출

  • 메소드는 클래스 내.왜부의 호출에 의해 실행됨
  • 클래스 내부의 다른 메소드에서 호출할 경우 단순한 메소드 이름으로 호출하면 되지만
  • 클래스 외부에서 호출할 경우, 클래스로부터 객체를 생성한 뒤 참조변수를 이요해서 메소드를 호출해야함
  • 객체가 존재해야 메소드도 존재하기 때문

 

객체 내부에서 호출

메소드(매개값, ...);
타입 변수 = 메소드(매개값, ...);

 

객체 외부에서 호출

  • 외부 클래스에서 메소드를 호출하려면 클래스로부터 객체를 생성해야함
  • 메소드는 객체에 소속된 멤버이므로 객체가 존재하지 않으면 메소드도 존재하지 않기 때문
클래스 참조변수 = new 클래스 (매개값,..);

 

  • 객체가 생성되었다면 참조 변수와 함께 도트(.) 연산자를 사용해서 메소드를 호출

참조변수.메소드(매개값, ...);
타입 변수 = 참조변수.메소드(매개값, ...);

 

메소드 오버로딩

  • 클래스 내에 같은 이름의 메소드를 여러개 선언하는 것
  • 매개 변수의 타입, 개수, 순서 중 하나가 달라야 함
  • 매개값을 다양하게 받아 처리 할 수 있음
  • 이름만 다르다고 해서 오버로딩이 아님

 

확인 문제

  • 리턴값이 없는 메소드는 리턴 타입을 void로 해야한다.
  • 리턴 타입이 있는 메소드는 리턴값을 지정하기 위해 반드시 return문이 있어야한다
  • 매개값의 개수를 모를 경우 ... 를 이용해서 매개 변수를 선언할 수 있다.
  • 같은 이름의 메소드를 여러 개 선언하는 것을 메소드 오버로딩이라고 한다.

 

메소드 오버로딩에 대한 설명으로 맞는 것에 O/X

  • 동일한 이름의 메소드를 여러개 선언 하는 것을 말한다. (o)
  • 반드시 리턴 타입이 달라야 한다. (x)
  • 매개 변수의 타입, 개수, 순서를 다르게 선언해야 한다.(o)
  • 매개 값을 타입 및 개수에 따라 호출될 메소드가 선택된다 (o)

 

MemberService

public class MemberService {
    boolean login(String id, String password) {
        if (id.equals("hong") && password.equals("12345")) {
            return true;
        } else {
            return false;
        }
    }

    void logout(String id){
        System.out.println("로그아웃 되었습니다.");
    }
}

 

 

혼공자

생성자 constructor

new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당

 

객체 초기화

  • 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것
  • new 연산자에 의해 생성자가 실행되면 힙 영역에 객체가 생성되고 객체의 번지 리턴
  • 리턴된 객체의 번지는 클래스 변수에 저장

 

기본 생성자 default constructor

[public] 클래스() {}
  • 클래스가 public class로 선언되면 기본 생성자에도 public이 붙지만 클래스가 public 없이 선언되면 기본 생성자에도 public 없음

 

생성자 선언

클래스( 매개변수선언, ....){  객체 초기화 코드}

 

  • 리턴 타입이 없고 클래스 이름과 동일
  • 블록 내부에 객체 초기화 코드가 작성됨
  • 필드에 초기값을 저장하거나 메소드를 호출하여 객체 사용전에 필요한 준비를 함
  • 매개 변수는 new 연산자로 생성자를 호출할 때 외부의 값을 생성자 블록 내부로 전달하는 역할을 함

 

 

필드 초기화

  • 클래스로부터 객체가 생성될 때 필드는 기본 초기값으로 자동 설정됨
  • 초기화하는 방법
  • 필드를 선언할 때 초기값을 주는 방법
  • 생성자에게 초기값을 주는 방법

 

생성자 오버로딩

  • 매개변수를 달리하는 생성자를 여러개 선언하는 것

 

다른 생성자 호출: this()

  • 생성자에서 다른 생성차를 호출할 때 this()코드를 사용
  • 생성자의 첫 줄에서만 허용
  • this()의 매개값은 호출되는 생성자의 매개 변수에 맞게 제공해야 함
  • this() 다음에는 추가적인 실행문들이 올 수 있음
  • 호출되는 생성자의 실행이 끝나면 원래 생성자로 돌아와서 다음 실행문을 진행

 

확인 문제

  • 객체를 생성하려면 생성자 호출이 반드시 필요한 것은 아니다. (x)
  • 생성자는 다른 생성자를 호출하기 위해 this()를 사용할 수 있다. (o)
  • 생성자가 선언되지 않으면 컴파일러가 기본 생성자를 추가한다. (o)
  • 매개 변수의 수, 타입, 순서가 다른 생성자를 여러 개 선언할 수 있다. (o)

 

 

Member 클래스 작성

public class Member {
    
    String name;
    String id;
    
    public Member(String name, String id){
        this.name = name;
        this.id = id;
    }
}

 

Board 클래스 작성

public class Board {
    
    String title;
    String content;
    String writer;
    String date;
    int hitcount;
    
    Board(String title, String content, String writer, String date, int hitcount){
        this.title = title;
        this.content = content;
        this.writer = writer;
        this.date =date;
        this.hitcount = hitcount;
    }
    
    Board(String title, String content){
        this(title, content, "로그인한 회원아이디", "현재 컴퓨터 날짜", 0);
    }
    
    Board(String title, String content, String writer){
        this(title, content,writer,"현재 컴퓨터 날짜", 0);
    }
    
    Board(String title, String content, String writer, String date){
        this(title, content,writer,date,0);
    }
    
}

 

문제1. 윷놀이

우리나라 고유의 윷놀이는 네 개의 윷짝을 던져서 배(0)와 등(1)이 나오는 숫자를 세어 도, 개, 걸, 윷, 모를 결정합니다. 네 개 윷짝을 던져서 나온 각 윷짝의 배 혹은 등 정보가 주어질 때 도(배 1개, 등 3개), 개(배 2개, 등 2개), 걸(배 3개, 등 1개), 윷(배 4개), 모(등 4개) 중 어떤 것인지를 결정하는 프로그램을 작성하세요.

문제 풀이

[0,0,1,0] 0의 개수에 따라서 도,개,걸,윷,모 가 정해집니다.

0의 개수를 세서 각각의 경우의 수를 만들어주었습니다.

 

보자마자 쉽다는 생각이 드는 문제였습니다.

public class yutNori {
    public String solution(int[] arr1) {
       
        //0(배)의 개수에 따라서 정해진다. 도, 개 , 걸, 윷, 모

        String answer = "";
        int bae =0;

        for(int i=0; i<arr1.length; i++){
            if (arr1[i]==0){
                bae++;
            }

        if(bae==0){
             answer = "모";
        }
        if(bae==1){
            answer = "도";
        }
        if(bae==2){
            answer = "개";
        }

        if(bae==3){
            answer = "걸";
            }

        if(bae==4){
            answer = "윷";
            }

        }

        return answer;

    }

    public static void main(String[] args) {
    yutNori method = new yutNori();
    int[] s = {1,0,0,0};
        System.out.println(method.solution(s));




    }
}

 

문제2. Triangular Output aka. 피라미드 별찍기

피라미드 별찍기

위처럼 입력 값(int)에 따라 피라미드 모형을 별을 찍는 것을 구현합니다.

 

문제 풀이

1. 한 줄에 찍힌 별의 개수가 홀수 인 것을 알 수 있습니다.

2. 2*i+1 개씩 한 줄에 찍힙니다. 

3. for문을 이용해서 앞에 빈칸과 *을 찍어줍니다.

 

public class TriangularOutput {

        public void solution(int star) {
            //star는 피라미드의 층수
            //for문을 사용해서 *입력
            //2의배수에 +1 값이 한층당 *의 수
            //앞의 빈 칸만 만들어 주면 됨

            for (int i = 0; i <star ; i++) {

                for(int blank =1; blank<star-i; blank++) {
                    System.out.print(" "); //빈 칸 출력
                }

                for(int stars =0; stars<2*i+1; stars++){
                    System.out.print("*"); //* 출력; 별의 개수는 홀수
                }

                System.out.println(); //층 바꾸기
            }

        }

        public static void main(String[] args) {
            TriangularOutput method = new TriangularOutput();
            int star = 9;
            method.solution(star);
        }
    }

빈칸의 개수는 층수(i) -1 이고, 별의 개수는 층수(i) *2 +1 입니다.

 

반복문을 돌리면 피라미드가 완성됩니다.

 

 

문제3. 상하좌우 큰 수 찾기

5x5 2차원 배열이 주어질 때 어떤 원소가 상하좌우에 있는 원소보다 클 때 해당 위치에 * 을 표시하는 프로그램을 작성하세요. 경계선에 있는 수는 상하좌우 중 존재하는 원소만을 비교합니다.

 

문제 풀이

i'll get back to this

문제설명

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

제한 사항

x는 1 이상, 10000 이하인 정수입니다.

 

문제 풀이

1. int x 값을 String 타입으로 바꾼후 .split()을 이용해서 배열로 만든다.

2. 각 인덱스 값을 더해준다. -> int sum 

3. x를 sum으로 나눈 나머지가 ==0 이면 true, 아니면 false 를 리턴한다.

public class harshadNumber {
    public boolean solution(int x) {
        boolean answer = true;

        String num = String.valueOf(x);
        String[] numbers = num.split("");

        int sum =0;

        for (String number : numbers) {
            sum += Integer.parseInt(number);
        }
        
        if(x%sum==0){
            return answer;
        } else{
            answer=false;
            return answer;
        }

    }

    public static void main(String[] args) {
        harshadNumber method = new harshadNumber();
        System.out.println(method.solution(18));
    }
}

처음에 기본 for문을 사용했다가 향상된 for문을 사용해봤습니다.

훨씬 편하네요. 

자바로 입력된 배열의 최소값과 최대값 구하기에 대해 알아보겠습니다.

for문과 향상된 for문을 사용해서 최소값 최대값을 구합니다.

 

 

변수 선언

int[] arr = {12,14,16,18,23,5,68}; //배열 예시

int min = Integer.MAX_VALUE; //int 타입 범위에서 가장 큰 수
int max = 0; //둘 중에 더 큰 수를 저장할겁니다..

min 값을 설정할 때 int타입 범위에서 가장 큰 수로 저장하면 굳이 배열에 대한 범위를 신경쓰지 않아도 됩니다.

둘중에 작은 수를 저장하게 됩니다.

 

Integer.MAX_VALUE    // int 타입의 최대값
Integer.MIN_VALUE     // int 타입의 최소값

 

자바로 최대값 최소값 구하기 for문

배열값과 min, max 값을 비교해서 최소값, 최대값을 구합니다.

intellij에서 fori 단축키를 사용하면 for문이 자동으로 입력됩니다.

//for문 사용
for (int i = 0; i < arr.length ; i++) {

    if (arr[i]<min)
        min = arr[i];

    if (arr[i]>max)
        max = arr[i];
}
System.out.println("for문 사용>> max:"+max+" min:"+min);

 

자바로 최대값 최소값 구하기 향상된 for문

향상된 for문을 사용해서 최대값과 최소값을 구한다.

intellij에서 iter 단축키를 사용하면 향상된 for문이 자동으로 입력됩니다.

//향상된 for문 사용
for (int i : arr) {

    if(i<min)
        min = i;

    if(i>max)
        max = i;
}
System.out.println("향상된 for문 사용>> max:"+max+ " min:"+min);

 

 

자바 최대값 최소값 구하기 전체 코드

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

        int[] arr = {12,14,16,18,23,5,68}; //배열 예시

        int min = Integer.MAX_VALUE; //int 타입 범위에서 가장 큰 수
        int max = 0; //둘 중에 더 큰 수를 저장할겁니다..


        //for문 사용
        for (int i = 0; i < arr.length ; i++) {

            if (arr[i]<min)
                min = arr[i];

            if (arr[i]>max)
                max = arr[i];
        }
        System.out.println("for문 사용>> max:"+max+" min:"+min);


        //향상된 for문 사용
        for (int i : arr) {

            if(i<min)
                min = i;

            if(i>max)
                max = i;
        }
        System.out.println("향상된 for문 사용>> max:"+max+ " min:"+min);
    }
}

 

프로그래머스 오버플로우 콜라츠 추측

문제 설명

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다. 
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 
예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

 

제한 사항

입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.

 

문제 풀이

❗😱매개변수 num의 자료형을 int->long으로 변환하지 않으면 테스트3의 결과가 -1이 아닌 488로 다르게 나온다. 
😱😱😱😱연산 과정에서 오버플로우가 발생하기 때문이다. 따라서, public int solution(long num) 으로 바꿔야한다.

 

public class Collatz {

    public int solution(long num) {
            int answer = 0;

            if(num==1){
                answer =0;
            }

            while(num!=1){

                if(num%2==0){
                    num/=2;
                } else{
                    num = (num * 3) + 1;
                }

                answer++;

                if(answer>500){
                    return -1;
                }

            }

          return answer;

        }


    public static void main(String[] args) {
        Collatz method = new Collatz();
        System.out.println(method.solution(626331));
    }
}

 

오버플로우

선언 된 데이터 유형 범위를 벗어난 값을 할당 할 때 발생

연산과정에서 int 타입의 범위(-2^31 ( -2,147,483,648 )에서 2^31 -1( 2,147,483,647))를 벗어나면 계산이 안되고 멈춘다. 

num = 626311 에 대한 answer 값이 488 계속 나오길래 뭐가 잘못된 건가 Collatz의 추측이 맞았나 했는데

 

연산 값을 찍어보면, 104번째가 음수 -1085063658 으로 출력되었다. 

 

오버플로우로 값이 초과되서 음수로 표현이 되는 것이다.

 

103번째 num의 값은 홀수 이므로 1069967879*3+1 이 104번째 num값이 되어야하는데 int의 범위를 초과하는 것이다.

 

그래서 int타입을 long으로 변환해야 된다.

 

제일 작은 수 제거하기

 

문제 설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

 

제한 사항

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

 

문제 풀이

1. 최솟값 int min 을 구한다.  for문을 돌린다. 

2. min과 같지 않은 수들로만 이루어진 배열을 새로 만든다. int[] num = new int[arr.length-1];

import java.util.Arrays;

import static java.util.Arrays.fill;

public class elimination {
    public int[] solution(int[] arr) {
        if(arr.length<=1){
        int[] answer = {-1};
        return answer;
        }

        int min = arr[0];

        for(int i=arr.length-1; i>0; i--){
            if(arr[i]<min){
                min = arr[i];
            }
        }
        System.out.println(min);

        int[] answer = new int[arr.length-1];
        int index=0;
        for(int i=0; i<arr.length;i++){
            if(arr[i]!=min){
            answer[index++]=arr[i];
        }

        }

        return answer;
    }

    public static void main(String[] args) {
        elimination method = new elimination();
        System.out.println(Arrays.toString(method.solution(new int[]{5,6,7,8})));
    }
}

 

오늘 오전에 언어 스터디를 했는데 조원분이 너무 멋진 객체지향 예제(보러가보세요!)를 보여주셔서 자극을 받아 바로 만들어 봅니다. 저는 식당 메뉴 별로 가격을 정하고 판매량 입력 후 매출 정산하는 프로그램을 만들어 보려고 합니다.

 

객체지향 예제

필드 선언

public class restaurantRevenue {
    //필드 선언
    private int price;
    private int revenue;
    private String menu;

    private int sold;

    //기본 생성자

    restaurantRevenue () {}



    //매개변수를 가진 생성자
    public restaurantRevenue(String menu, int price, int sold, int revenue) {
        this.menu = menu;
        this.price = price;
        this.sold = sold;
        this.revenue = revenue;
    }

    // getter setter 단축키 cmmd + N
    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getRevenue() {
        return revenue;
    }

    public void setRevenue(int revenue) {
        this.revenue = revenue;
    }

    public int getSold() {
        return sold;
    }

    public void setSold(int sold) {
        this.sold = sold;
    }

    public String getMenu() {
        return menu;
    }

    public void setMenu(String menu) {
        this.menu = menu;
    }
}

 

 

메뉴 입력 프로그램 만들기

import java.util.Scanner;

public class revenueExample {
    private Scanner scanner = new Scanner(System.in);

    private restaurantRevenue newMenu = null; //새 메뉴가 저장될 객체

    public revenueExample (){}; //기본 생성자

    public void display() { //메뉴화면 메소드

        int option = 0;

        do {
            System.out.println("=====*메뉴입력하기*=====");
            System.out.println("1. 메뉴입력");
            System.out.println("2. 판매량입력");
            System.out.println("3. 매출보기");
            System.out.println("0. 종료하기");
            System.out.print("선택>>");



            option = scanner.nextInt();

            switch (option) {
                case 1:
                    System.out.println(entermenu());
                    break;
                case 2:
                    System.out.println(sold());
                    break;
                case 3:
                    System.out.println(revenue());
                    break;
                case 0:
                    System.out.println("프로그램 종료!");
                    break;
                default:
                    System.out.println("다시 입력해주세요 -_-^");
            }


        }


        while (option != 0);
    }
    public String entermenu(){ //메뉴입력하기
        System.out.println("=====메뉴입력=====");
        System.out.print("메뉴명> ");
        String menu = scanner.next();
        System.out.print("가격> ");
        int price = scanner.nextInt();

        newMenu = new restaurantRevenue(menu, price,0,0);

        return "메뉴명:"+menu+" 가격: "+price+"원";
    }

    public String sold(){
        System.out.println("=====판매량입력=====");
        System.out.print("메뉴명> ");
        String menu = scanner.next();
        System.out.print("판매량> ");
        int sold = scanner.nextInt();

        if(menu.equals((newMenu.getMenu()))){
            newMenu = new restaurantRevenue(menu, newMenu.getPrice(), sold, sold* newMenu.getPrice());
            return "메뉴명: "+ menu + " 판매량: "+sold;
        }else {
            return "메뉴정보가 없습니다.";
        }


    }

    public String revenue(){
        System.out.println("=====매출보기=====");
        System.out.print("메뉴명> ");
        String menu = scanner.next();

        if(menu.equals((newMenu.getMenu()))) {
            return "메뉴명 " + menu + " 매출: " + newMenu.getRevenue();
        } else{
            return "메뉴정보가 없습니다.";
        }

    }

    public static void main(String[] args) {
        revenueExample revenue = new revenueExample();
        revenue.display();
    }

}


 

 

결과

=====*메뉴입력하기*=====
1. 메뉴입력
2. 판매량입력
3. 매출보기
0. 종료하기
선택>>1
=====메뉴입력=====
메뉴명> pasta
가격> 25000
메뉴명:pasta 가격: 25000원
=====*메뉴입력하기*=====
1. 메뉴입력
2. 판매량입력
3. 매출보기
0. 종료하기
선택>>2
=====판매량입력=====
메뉴명> pasta
판매량> 12
메뉴명: pasta 판매량: 12
=====*메뉴입력하기*=====
1. 메뉴입력
2. 판매량입력
3. 매출보기
0. 종료하기
선택>>3
=====매출보기=====
메뉴명> pasta
메뉴명 pasta 매출: 300000
=====*메뉴입력하기*=====
1. 메뉴입력
2. 판매량입력
3. 매출보기
0. 종료하기
선택>>2
=====판매량입력=====
메뉴명> rice
판매량> 40
메뉴정보가 없습니다.
=====*메뉴입력하기*=====
1. 메뉴입력
2. 판매량입력
3. 매출보기
0. 종료하기
선택>>3
=====매출보기=====
메뉴명> risotto
메뉴정보가 없습니다.
=====*메뉴입력하기*=====
1. 메뉴입력
2. 판매량입력
3. 매출보기
0. 종료하기
선택>>0
프로그램 종료!

Process finished with exit code 0

 

매우 간단하지만 굿 실습이었습니다.

혼자 공부하는 자바

 

필드

객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상태 데이터를 저장하는 곳

 

필드 선언

  • {} 블록에 존재
  • 위치는 상관 없음
  • 단, 생성자와 메소드 중괄호 {} 내부에는 선언 될 수 없음
  • 생성자와 메소드 중괄호 블록 내부에 선언된 것은 모두 로컬 변수
  • 타입 필드 [=초깃값];
  • 선언형태는 변수와 피슷하지만 필드는 변수가 아님
  • 초기값이 저장되지 않은 필드는 객체 생성 시 자동으로 기본 초기값으로 설정됨
  • 참조 타입은 객체를 참조하고 있지 않은 상태인 null로 초기화

 

필드 사용

  • 필드값을 읽고 변경하는 작업
  • 클래스 내부의 생성자나 메소드에서 사용할 경우 필드 이름으로 일고 변경하면 됨
  • 클래스 외부에서 사용할 경우 우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용
  • 필드가 객체에 소속된 데이터이므로 객체가 있어야 필드도 존재함
  • 변수가 객체를 참조하게 되면 도트(.) 연산자를 사용해서 필드에 접근
  • 도트(.)연산자는 객체 접근 연산자

 

확인 문제

  • 필드는 메소드에서 사용할 수 있다. (o)
  • 필드는 클래스 블록 어디서든 선언할 수 있다(생성자, 메소드 내부 제외) (o)
  • 필드는 객체 외부에서 접근할 수 없다. (x)
  • 필드는 초기값을 주지 않더라도 기본값으로 자동 초기화 된다. (o)

 

Member Class 선언하기

public class Member {

    String name;
    String id;
    String password;
    int age;

    public static void main(String[] args) {
        Member member = new Member();
        member.name = "최하얀";
        member.age =23;

        System.out.println("이름: "+member.name);
        System.out.println("나이: "+member.age);
    }
}

필드 선언 연습

 

 

정수 제곱근 판별

 

문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

 

제한 사항

n은 1이상, 50000000000000 이하인 양의 정수입니다.

 

문제 풀이

if else문을 사용하면 될 것 같습니다...?

 

1.  x*x == n 이면 (x+1)*(x+1) 을 리턴하고 else -1을 리턴한다.

2. sqrt(n) = x 

 

public class Squareroot {
    public long solution(long n) {
        long answer = 0;
        long x = 0;
        x = (long) Math.sqrt(n);
        if(x*x ==n){
            answer = (x+1)*(x+1);
        } else {
            answer = -1;
        }
        return answer;
    }

    public static void main(String[] args) {
        Squareroot method = new Squareroot();
        System.out.println(method.solution(121));
    }
}

 

 

+ Recent posts