'Java'에 해당되는 글 4건

반응형


System.currentTimeMIllis()를 이용하여 프로그램 수행 시간을 확인하는 코드이다.


시간이 얼마나 걸릴지 확인하고자 하는 코드의 시작지점과 끝 지점에 System.currentTimeMIllis()를 삽입하여 시간을 체크하고, 그 차이를 이용하여 걸린 시간을 확인할 수 있다.


※ System.currentTimeMIllis() 이란?

 : 1970년 1월 1일부터 현재까지의 시간을 천 분의 일초로 계산한 결과를 long형의 정수로 반환하는 메서드


반응형
블로그 이미지

rootable

,
반응형
1. 소문자 → 대문자 변환
소문자를 대문자로 변경하는 코드이다.

Ascii 코드 상으로 대문자가 소문자보다 32만큼 작다는 것을 이용한 코드이다.


1
2
3
4
5
6
7
class LowerToUpper {
    public static void main(String[] args){
        char lowerCase = 'a';        
        char upperCase = (char)(lowerCase - 32);
        System.out.println(upperCase);
    }
}
cs


lowerCase 변수에 대문자로 변환하고자 하는 문자를 넣어주면 된다.

이 코드를 뼈대로 원하는 것을 더 추가하면 된다.




2. 대문자 → 소문자 변환

대문자를 소문자로 변경하는 코드이다.

위의 1번에서와 반대로 소문자는 대문자보다 32만큼 크다는 것을 이용한 코드이다.


1
2
3
4
5
6
7
class UpperToLower {
    public static void main(String[] args){
        char upperCase = 'A';        
        char lowerCase = (char)(upperCase + 32);
        System.out.println(lowerCase);
    }
}
cs



위의 두 코드를 뼈대로 원하는 것을 추가하는 방식으로 활용하길 바란다.

반응형
블로그 이미지

rootable

,

끝말잇기 게임

Develope/Java 2020. 5. 14. 00:55
반응형

JAVA를 이용하여 끝말잇기 게임을 만들어보았다.


아래는 개발 시의 조건들이다.


1. 참가인원을 입력받을 것

2. 참가 인원 수대로 이름을 입력받을 것

3. 끝말잇기 게임 진행

4. 패배한 인원의 이름을 출력할 것


아래는 프로그램 실행 결과이다.

이 것을 참고하여 여러분들도 직접 코딩해볼 것을 추천한다.


다음은 내가 작성한 코드이다.

직접 작성한 코드와 비교해보고 자신의 코드가 더 효율적이라 생각이 된다면 댓글로 부탁드립니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.util.Scanner;
 
class Player{
    String name="";
    String sayWord(){
        Scanner input = new Scanner(System.in);
        String word = input.nextLine();
        return word;
    }
    int succeed(String word,String compare){
        int result=0;
        
        int lastIndex = compare.length()-1;
        char lastChar = compare.charAt(lastIndex);
        char firstChar = word.charAt(0);
        
        
        if(firstChar==lastChar)
            result=1;
        else
            result=0;
        
        return result;
    }
}
 
public class WordGameApp {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("게임에 참가하는 인원은 몇명입니까>>");
        int playerCount = input.nextInt();
        Player[] playerList = new Player[playerCount];
        
        for(int i=0; i<playerCount; i++){
            System.out.print("참가자의 이름을 입력하세요>>");
            playerList[i] = new Player();
            playerList[i].name=input.next();
        }
        
        System.out.println("시작하는 단어는 아버지입니다");
        String FirstWord="아버지";
        
        int i=0;
        String compare=FirstWord;
        while(true){
            System.out.print(playerList[i].name+">>");
            String word = playerList[i].sayWord();
            if(playerList[i].succeed(word, compare)==1){
                i++;
                compare=word;
                if(i==playerCount) i=0;
                continue;
            } else {
                System.out.println(playerList[i].name+"이 졌습니다.");
                System.exit(1);
            }
        } 
    }
}
 
cs


** 코드를 작성하며 배운 것

1. 객체 배열을 생성 시 레퍼런스만 생성된 것이다.

 - main 함수에서 Player[] playerList = new Player[playerCount]; 을 하였을 때에는 Player라는 객체를 가리키는 레퍼런스들을 원소로 하는 배열이 생성된 것이다.

 - 각 원소별로 Player 객체를 가리키도록 playerList[i] = new Player(); 을 선언해주어야 한다.

반응형

'Develope > Java' 카테고리의 다른 글

Java의 정석 정리 - 2장 변수 (문자형)  (0) 2020.06.28
Java의 정석 정리 - 1장 자바를 시작하기 전에  (0) 2020.06.28
final  (0) 2020.05.11
static 멤버  (0) 2020.05.11
접근 지정자  (0) 2020.05.10
블로그 이미지

rootable

,
반응형

※ 접근지정자

 - public : 클래스 내부/외부에서 모두 호출 가능

 - private : 클래스 내부 맴버들만 호출 가능

 - protected : 클래스 내부 메소드들은 호출 가능하며, 다른 클래스 중 상속받은 서브클래스만 호출 가능

 - 생략 : Default로는 동일한 패키지 내의 모든 클래스가 호출 가능


※ 인자 전달 (argument passing)

 : 자바의 메소드 호출 시 인자 전달 방식은 어떠한 타입이 전달되느냐에 따라 달라지게 된다.


 1) 기본 타입이 인자로 전달되는 경우 : 호출자(caller)가 건네는 인자의 값을 복사하여 인자로 전달된다.

  → 기존의 값과는 전혀 관련이 없으므로 호출자에서는 메서드에 어떠한 코드가 있던지 그 값이 유지된다.


 2) 객체 레퍼런스가 인자로 전달되는 경우 : 객체를 가리키는 레퍼런스가 복사되어 전달된다.

  → 메서드에서 사용하는 인자와 호출자(caller)가 참조하는 레퍼런스 값이 같으므로 메서드 코드에 따라 기존의 값이 변경될 수 있다.


 3) 배열이 인자로 전달되는 경우 :  객체 레퍼런스와 동일하다.

  → 배열을 가리키는 객체 레퍼런스가 복사되어 전달된다고 생각하면 된다.


※ 메소드 오버로딩 (method overloading)

 : 메소드 오버로딩이란 한 클래스 내에서 메소드의 이름은 같지만 인자의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복하여 작성하는 것이다. 이는 객체 지향적 특징 중 다형성의 한 종류이다.


 : 메소드 오버로딩을 하는 이유는 하나의 클래스에서 하나의 동작을 진행할 때 여러 case를 분류하여 표현하기 위함이다.

  - 예를 들어 덧셈을 하는 클래스의 경우 인자가 여러개일 경우도 있고, int형끼리 혹은 double형끼리 덧셈을 하는 경우도 존재하기 때문


 : 여러 개의 메소드가 메소드 오버로딩으로 성립되려면 조건을 모두 만족해야 한다.

 1) 메소드 이름이 동일하여야 한다.

 2) 메소드 인자의 개수가 서로 다르거나, 인자의 타입이 서로 달라야 한다.

 3) 메소드 이름, 인자의 개수와 타입이 모두 같을 경우 리턴 타입 혹은 접근 지정자가 다르다 하더라도 오버로딩이 성립되지 않으며 컴파일 오류가 발생한다. 이는 호출자(caller)의 입장에서 봤을 때 메서드를 구분할 수 있는 것은 메소드 이름과 인자의 개수,타입 뿐이기 때문이다.

 

※ this

 : this는 간단히 말하면 객체 자신을 가리킨다. 좀 더 자세히 말하자면, 현재 실행되는 메서드가 속한 객체에 대한 레퍼러스이다.

 : this는 컴파일러에 의해 자동으로 생성되기 때문에 별도로 this를 선언할 필요 없이 사용할 수 있다.


 : this의 필요성은 인자의 이름과 멤버의 이름이 같은 경우에서 알 수 있다.

  - 아래와 같은 메서드가 있다고 가정하자.

void set(int id) { id = id; }

  이럴 경우에는 두 개의 id 모두 인자로 정의된 id를 가리켜서 멤버 id 값을 바꿀 수가 없다. 따라서 다음과 같이 this를 이용하여 id가 멤버를 나타낸다는 것을 표현해주어야 한다.

void set(int id) { this.id = id; }


반응형

'Develope > Java' 카테고리의 다른 글

가비지와 가비지 컬렉션  (0) 2020.05.10
생성자(constructor)  (0) 2020.05.09
JAVA 5일차  (0) 2020.04.12
JAVA 4일차  (0) 2020.04.01
JAVA 3일차  (0) 2020.03.31
블로그 이미지

rootable

,