사용자는 최소 27가지 이상의 닉네임 중 하나를 랜덤으로 출력 할 수 있습니다. (아래의 키워드를 사용해주세요!)

  • 기철초풍, 멋있는, 재미있는
  • 도전적인, 노란색의, 바보같은
  • 돌고래, 개발자, 오랑우탄

1차 코드

import java.util.Random;

public class App {
    public static void main(String[] args) {
        String[] v1 = { "기절 초풍", "멋있는", "재미있는" };
        String[] v2 = { "도전적인", "노란색의", "바보같은" };
        String[] v3 = { "돌고래", "개발자", "오랑우탄" };

        String key1 = v1.random();
        String key2 = v2.random();
        String key3 = v3.random();

        System.out.println(key1, key2, key3);
    }
}

 

이 코드에서는 두 가지 오류가 발생한다.

1. random 함수가 문자열 타입에서는 사용이 불가능하다는 의미의 오류

2. println 문에서 오류

 

두 번째 오류는 콤마로 각 변수를 이어주는 게 아니라 +로 이어주면 간단히 해결 가능했다.

그렇다면 첫 번째 random 함수 오류는 어떻게 해결할 수 있을까

random은 지난 번 jdk 패키지 게시글에서 정리한 적 있기에 다시 확인하고 왔더니, java.lang 패키지에 있는 random 함수는 산술에 필요한 random으로, 반환되는 값이 double이어야 했다.

java.util 패키지의 Random 클래스는 int 타입의 난수를 반환하는 함수가 있어, 이 클래스를 임포트하여 사용하면 된다.

정수인 난수를 반환하는 함수는 nextInt(int n)이다.

매개변수에 각 배열의 개수인 3을 입력하여, 0~2 중의 난수를 리턴하고 그 값을 배열의 인덱스로 활용하여 데이터를 가져오면 될 것 같다.

 

https://go-getter1kim.tistory.com/22

 

JDK 패키지와 클래스

주요 패키지- java.langSystem을 비롯하여 문자열, 수학 함수, 입출력 등과 같은 프로그래밍에 필요한 기본적인 클래스와 인터페이스 제공- java.util날짜, 시간, 벡터, 해시맵 등의 유틸리티 클래스와

go-getter1kim.tistory.com

 

 

2차 코드

import java.util.Random;

public class App {
    public static void main(String[] args) {
        String[] v1 = { "기절 초풍", "멋있는", "재미있는" };
        String[] v2 = { "도전적인", "노란색의", "바보같은" };
        String[] v3 = { "돌고래", "개발자", "오랑우탄" };

        Random random = new Random();
        String key1 = v1[random.nextInt(3)];
        String key2 = v2[random.nextInt(3)];
        String key3 = v3[random.nextInt(3)];

        System.out.println(key1+key2+key3);
    }
}

 

위의 2차 코드를 실행하면 잘 결과가 출력되는 것을 볼 수 있다.

지금 코드는 main 메소드에 모든 코드가 들어가 있기 때문에, 다른 클래스에서도 이 코드를 재사용할 수 있도록 코드를 분리해보도록 하자

 

 

3차 코드

import java.util.Random;

public class App {
    final Random random = new Random();

    String returnRandomKeyword(String[] v1, String[] v2, String[] v3){
        String key1 = v1[random.nextInt(3)];
        String key2 = v2[random.nextInt(3)];
        String key3 = v3[random.nextInt(3)];

        return key1+key2+key3;
    }

    public static void main(String[] args) {
        String[] v1 = { "기절 초풍", "멋있는", "재미있는" };
        String[] v2 = { "도전적인", "노란색의", "바보같은" };
        String[] v3 = { "돌고래", "개발자", "오랑우탄" };

        String resultKeyword = returnRandomKeyword(v1,v2,v3);
        System.out.println(resultKeyword);
    }
}

 

Random 객체는 매번 생성될 필요가 없기 때문에 함수 바깥으로 빼주었다.

위의 코드를 작성했을 때 resultKeyword를 선언하는 줄에서 오류가 발생했다.

returnResultKeyword 메소드가 static 타입인 메인 메소드 밖에 위치하고 있어, 메인에서 static이 아닌 메소드를 호출하는 과정에서 오류가 발생한 것이다.

해결 방법은 메인 안에서 App 클래스 자체를 객체로 생성하는 코드를 추가해주거나, returnRandomKeyword 함수를 static으로 만들어주는 것이다.

 

 

4차 코드

// static 추가
import java.util.Random;

public class App {
    static final Random random = new Random();

    static String returnRandomKeyword(String[] v1, String[] v2, String[] v3){
        String key1 = v1[random.nextInt(3)];
        String key2 = v2[random.nextInt(3)];
        String key3 = v3[random.nextInt(3)];

        return key1+key2+key3;
    }

    public static void main(String[] args) {
        String[] v1 = { "기절 초풍", "멋있는", "재미있는" };
        String[] v2 = { "도전적인", "노란색의", "바보같은" };
        String[] v3 = { "돌고래", "개발자", "오랑우탄" };

        String resultKeyword = returnRandomKeyword(v1,v2,v3);
        System.out.println(resultKeyword);
    }
}
// 객체 생성
import java.util.Random;

public class App {
    final Random random = new Random();

    String returnRandomKeyword(String[] v1, String[] v2, String[] v3){
        String key1 = v1[random.nextInt(3)];
        String key2 = v2[random.nextInt(3)];
        String key3 = v3[random.nextInt(3)];

        return key1+key2+key3;
    }

    public static void main(String[] args) {
        String[] v1 = { "기절 초풍", "멋있는", "재미있는" };
        String[] v2 = { "도전적인", "노란색의", "바보같은" };
        String[] v3 = { "돌고래", "개발자", "오랑우탄" };
        App instance = new App();
        String resultKeyword = instance.returnRandomKeyword(v1,v2,v3);
        System.out.println(resultKeyword);
    }
}