난수 생성하기
난수를 생성할 때는 Random 클래스를 활용한다.
Random 클래스는 Scanner 클래스처럼 기본 패키지가 아니기 때문에 import문을 작성해야한다.
9,10라인 Random클래스의 객체를 생성한다. r1, r2는 객체의 참조변수이다.
12라인 난수 10개를 만들기 위해 for문을 사용한다.
13라인 int형 변수 temp에 nextInt() 메소드를 호출하여 int형 난수를 반환받는다.
15라인 nextInt() 메소드에 인자 100을 대입하면 0~99 범위의 난수를 반환받는다.
21라인 r1.nextInt(46)은 0~45 범위이다.
→ r1.nextInt(46)+1을 하면 1~46 범위의 난수를 만들 수 있다.
nextInt(int a)에서 a는 양수 값만 가능하다. 음수의 난수를 만들고 싶으면 -( )를 씌운다.
배열
일반 변수는 변수 1개에 데이터 1개를 저장한다.
많은 데이터를 저장할 때 변수를 많이 선언하지 않고 배열을 사용한다.
배열 변수는 참조 변수에 속한다.
인덱스(index)는 배열 데이터의 위치이며,
배열 항목에 붙인 번호를 말하고 각 항목의 데이터를 읽거나 저장하는 데 사용된다.
배열 이름 옆에 [ ]에 기입되고, 0부터 시작한다.
int형 배열
배열 변수를 선언하는 방법
9라인 1) 변수의 선언과 초기화를 같이한다. 이때 배열의 메모리 크기는 4*4(16)바이트이다.
11라인 2) new 연산자로 초기화 없이 배열의 크기만 정한다.
→ 이때 각 인덱스의 초기값은 0이다.(int형)
배열은 객체와 유사한 성격을 띈다. 배열 변수 arr1, arr2는 참조 변수에 속한다.
13라인 배열변수.length 필드를 이용하여 배열의 길이를 구할 수 있다.
16라인 배열변수[i]를 이용해 i 인덱스의 값을 구할수 있다.
→ arr1[2]: arr1 배열 3번째 데이터 값(인덱스는 0부터 시작한다.)
19라인 배열의 모든 값을 출력한다. for문의 조건식을 i<배열 길이로 하면 배열의 길이가 변경되어도 잘 실행될 수 있다.
24라인 특정 인덱스의 값을 바꿀 수 있다.
39라인 Arrays 클래스의 toString(배열) 메소드를 사용하면 배열의 값으로 문자열이 반환된다.
Arrays.toString() : 배열의 값을 문자열로 반환 [a, b, ...]
40라인 출력란에 배열변수 arr2를 출력하면 해시코드라는 식별값이 출력된다.
char형 배열
char형의 배열은 문자열과 유사하다
11라인의 for문의 출력값과 16라인의 배열 변수 carr1의 출력값이 동일하다.
18라인 그러나 char형 배열에 바로 문자열을 대입하면 오류가 발생한다.
19라인 문자열.toCharArray() 메소드를 사용하면 문자열을 char 배열로 변환할 수 있다.
문자열.toCharArray() : String 문자열을 char[ ](배열)로 변환(반환)
22라인 문자열객체.toCharArray() 메소드를 사용하면 배열의 길이가 바뀐다.
배열 예제1: 메시지 암호화
문제: A가 B에게 메시지를 전달하는데 비밀 메시지로 암호화한다
A와 B는 암호를 푸는 key 값으로 7이라는 숫자를 정했다.
문자하나+key = ?(새로운문자) 이 방법으로 메시지를 암호화한다.
원본 메시지를 키보드로 입력하면 암호메시지가 출력되는 코드를 작성한다.
12라인 초기값 선언과 배열 크기 선언 없이 배열 변수를 선언할 수 있다.
18라인 키보드로 입력받은 메시지를 toCharArray() 메소드로 char 배열로 변환하고 temp에 저장한다.
21라인 for문과 인덱스를 이용하여 원본 메시지의 문자 각각마다 key값을 더하여 temp에 저장한다.
26라인 String 클래스의 .valueOf(배열)를 이용하여 문자배열을 문자열로 변환한다.
String.valueOf() : 여러 타입의 데이터를 문자열로 변환(반환)
27라인 암호 메시지를 출력한다. 원본 메시지는 i love java인데 암호 메시지는 p'sv}l'qh}h이 출력되었다.
암호 메시지는 원본 메시지의 각 문자의 ascii코드 값에 7(key값)을 더하여 나온 문자가 출력된다.
배열 예제2: 암호 메시지 해독
문제: 받은 암호 메시지를 key값을 이용하여 다시 원본 메시지로 해독한다.
21라인 for문과 인덱스를 이용하여 암호 메시지의 문자 각각마다 key값(7)을 뺀다.
24라인 원본 메시지를 출력하면 p'sv}l'qh}h의 각 문자의 ascii코드에서 7을 뺀 i love java가 출력된다.
홀수와 짝수(나머지 연산자 %)
나머지 연산자 %를 이용하여 홀수와 짝수를 구분할 수 있다.
배열 예제3: 홀수,짝수 인덱스
문제:
문자열을 입력받고 그 문자열을 2개로 만듭니다. 입력 문자열은 src_string 변수
- 짝수인덱스 글자(문자)를 순서대로 모아서 1개 문자열 생성 even_string 변수
- 홀수인덱스 글자(문자)를 순서대로 모아서 1개 문자열 생성 odd_string 변수
첫 번째 방법
10라인 처리할 데이터인 변수 src_string를 선언한다.
11,12라인 결과 데이터인 변수를 선언한다. 연산식에 사용될 변수는 반드시 초기화해야 한다.
17라인 문자열.length() 메소드는 문자열의 길이(크기)를 정수로 반환한다.
18라인 짝수는 나머지가 0인 것을 이용한다.
문자열.charAt(int) 메소드를 이용해서 even_string에 짝수 인덱스 문자를 저장해나간다.
→ 문자열.charAt(i): 문자열의 i번째 문자를 반환한다.(i는 0부터 시작한다.)
20라인 문자열.charAt(int) 메소드를 이용해서 odd_string에 홀수 인덱스 문자를 저장해나간다.
두 번째 방법
13,14라인 new 연산자를 이용하여 배열의 길이를 정한다.
19라인 i/2는 i를 2로 나눈 몫을 의미한다. (ex. i=2 → i/2=1, i=3 → i/2=1)
문자열.charAt(int) 메소드를 이용해서 even 배열에 짝수 인덱스 문자를 저장해 나간다.
20라인 문자열.charAt(int) 메소드를 이용해서 odd 배열에 홀수 인덱스 문자를 저장해 나간다.
22,23라인 받은 문자들로 완성한 배열을 String.valueOf(배열) 메소드를 이용하여 문자열로 변환한다.
배열 예제4: 대문자,소문자 인덱스
문제: message 입력 문자열에서
대문자는 upper에 순서대로 모으고, 소문자는 lower에 순서대로 모아서 출력합니다.
10,11라인 new 연산자를 이용하여 배열의 길이를 정한다.
14라인 대문자 인덱스 변수 k, 소문자 인덱스 변수 j를 초기값을 0으로 하여 선언한다.
17라인 char형 변수 temp에 문자열. charAt(i) 메소드를 사용하여 i번째 문자를 대입한다.
18라인 if문에서 대문자 조건을 이용한다.
19라인 temp가 대문자라면 temp값을 uppers 배열 k번 인덱스에 저장한다.
20라인 다음 대문자를 다음 인덱스에 받기 위해 k값을 1 증가시킨다.
22라인 temp가 소문자라면 temp값을 lowers 배열 j번 인덱스에 저장한다.
23라인 다음 소문자를 다음 인덱스에 받기 위해 j값을 1 증가시킨다.
26,27라인 String.valueOf(배열) 메소드를 이용하여 배열을 문자열로 변환한다.
*새로 배운 메소드
Arrays.toString() : 배열의 값을 문자열로 반환 [a, b, ...]
문자열.toCharArray() : String 문자열을 char[ ](배열)로 변환(반환)
String.valueOf() : 여러 타입의 데이터를 문자열로 변환
문자열.length() : 문자열의 길이(크기)를 정수로 반환
문자열.charAt(i): 문자열의 i번째 문자를 반환한다.(i는 0부터 시작한다.)
'수업 일지 > JAVA' 카테고리의 다른 글
9일차 - [JAVA] 메소드 오버로딩/참조 타입 (0) | 2022.01.11 |
---|---|
8일차 - [JAVA] 문자열(String) 메소드 (0) | 2022.01.07 |
6일차 - [JAVA] 클래스/객체/메소드/static/final/전역변수/지역변수 (0) | 2022.01.05 |
5일차 - [JAVA] 삼항연산자/while문/break/continue (0) | 2022.01.04 |
4일차 - [JAVA] 연산자/switch문/String/for문 (0) | 2022.01.03 |
댓글