Arrays클래스로 배열 다루기
> 배열의 비교와 출력
equals( ), toString( )
int[] arr = {0,1,2,3,4};
int[][]arr2D = {{11,12}, {21,22}};
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
System.out.println(Arrays.deepToString(arr2D); // [[11,12] , [21,22]]
String[][]str2D = new String[][]{{"aaa","bbb"}, {"AAA","BBB"}};
String[][]str2D2 = new String[][]{{"aaa","bbb"}, {"AAA","BBB"}};
System.out.println(Arrays.equals(sta2D, str2D2)); // false
System.out.println(Arrays.deepEquals(sta2D, str2D2)); // true
> 배열의 복사
copyOf( ), copyOfRange( )
int[] arr2 = Arrays.copyOf(arr, arr.length); // arr2 = [0,1,2,3,4]
int[] arr3 = Arrays.copyOfRange(arr, 2,4) // arr3=[2,3] "4는 불포함"
배열의 활용
public class ArrayEx6 {
public static void main(String[] args) {
int [] score = {79,88,91,33,100,55,95}; //점수 중 최대값과 최소값을 구하라
//순차탐색
int max = score[0]; //0번 인덱스값 79
int min = score[0]; //0번 인덱스값 79
for(int i = 1; i < score.length; i++) //반복문 시작을 1로 함 (시작위치를 0으로 하면 79와 79 본인을 비교하므로 제외함)
if(score[i] > max) { // 91과 88의 값이 참
max = score[i]; // 반복 횟수 => 6번
} else if(score[i] <min) {
min = score[i];
}
System.out.println("최대값 :" + max);
System.out.println("최소값 :" + min);
}
}
public class ArrayEx7 {
public static void main(String[] args) {
int[] numArr = new int[10];
for (int i = 0; i< numArr.length ; i++) {
numArr[i] = i;
System.out.print(numArr[i]);
}
System.out.println();
for (int i = 0; i < numArr.length ; i++) { //반복횟수 10번
int n = (int)(Math.random() *10); // 0~9사이의 값 1개 나옴
int tmp = numArr[0];
numArr[0]= numArr[n];
numArr[n] = tmp;
}
for (int i = 0; i < numArr.length; i++)
System.out.print(numArr[i]);
}
}
// 카드 48장을 절반으로 나누고 아래있는 카드를 위로 올린다
// > 24장을 절반으로 나누고 아래 카드를 위로 ... 규칙으로 셔플
public class ArrayEx8 {
public static void main(String[] args) {
int[]ball = new int[45];
for(int i = 0; i < ball.length; i++) {
ball[i] = i+1;
}
System.out.println(Arrays.toString(ball));
int temp = 0;
int j = 0;
for(int i =0; i < 6; i++) {
j = (int)(Math.random() *45);
temp = ball[i];
ball[i] = ball[j];
ball[j] = temp;
}
System.out.println(Arrays.toString(ball));
for(int i =0; i < 6; i++)
System.out.printf("ball[%d] = %d%n" ,i, ball[i]);
}
}
// lotto 의 규칙 활용 - 45개의 공 중 '임의로' 6개의 공을 뽑는 것
package a220112;
public class ArrayEx10 {
public static void main(String[] args) {
// O(n^2) :
// 버블(bubble) 정렬 > 상호비교를 통해 정렬을 하는 것
int[] numArr = new int[5];
for(int i = 0; i < numArr.length; i++) {
System.out.print(numArr[i]= (int)(Math.random() * 10));
}
System.out.println();
//[8,9,1,5,4]
// [89154] > [81954] > [81594] > [81549] ((1회차 끝))
// 9와 9를 비교해서 그 차이를 가지고 서로 자리를 상호간에 교환하는 것
//9와 9의 차이가 없음 > 그다음 9와 1을 비교하기 위해 자리를 교차한다[9,1,9,5,4]
// 그다음 바뀐 [9,1,9,5,4]에서 9와 5을 비교한다 [9,1,5,9,4]
//그다음은 [9,1,5,4, 9]를 비교하는데 여기까지가 1회차 비교이다
// >>> 아래의 i포문 비교가 끝난 상황 (회차안의 비교를 4번함)
// =============================================================
// i = 0 일때 둘사이의
// 오름차순 정렬의 목적을 가지고 있음 > 15499를 만들기 위함
// 버블정렬의 특징 : 회차당 마지막 인덱스값부터 정렬이 완료되는 것
// 제일 뒤에 인덱스값부터 최대값이 된다
// 2회차 시작
// i = 1 일때
// [1,8,5,4,9]
// [1,5,8,4,9]
// [1,5,4,8,9] > 각 회차별 완결 숫자
// =====> 2회차 끝 (8이 계속 뒤로 밀리고 최종적으로 8과 9가 확정이다)
// 3회차 시작
// i = 2 일때
// [1,5,4,8,9] 확정인 8,9를 제외한 3개를 비교
// [1,4,5,8,9] > 각 회차별 완결 숫자
// ======> 3회차 끝 (3회차에 확정값은 총 3개 /5가 뒤로 밀리고 최종적으로 5와 8과 9가 확정)
// 4회차 시작
// [1,4,5,8,9] > 각 회차별 완결 숫자
// =========> 4회차 끝 (그다음 회차 비교는 할 필요가 없음)
for (int i=0; i < numArr.length ; i++) {
boolean changed = false; // 자리 이동을 하지 않는 false가 기본값
// changed에 break가 없을 경우 4번 출력한다 / 더이상 자리이동이 없으니까 정렬할 필요가 없어서 break
for(int j =0; j < numArr.length-1-i ; j++) {
// 인자 길이는 5개 이지만 4번 비교하는 것이므로 -1 (나와 그 다음것을 비교하니까 -1을 해야함)
// -i는 없어도 됨 (각 회차별 반복횟수를 매번 4번씩 해도 되지만
// 불필요한 연산이므로 그러한 불필요 연산을 빼기 위해 i를 빼는 것이다)
if(numArr[j] > numArr[j+1]) {
int tmp = numArr[j];
numArr[j] = numArr[j+1]; // [j+1] 가 [j]보다 크기 때문에 자리 이동을 하면서 비교를 하지만
numArr[j+1] = tmp; // 더이상 비교할 필요가 없어지면 break
changed = true; // 자리이동을 하게 되면 기본값 false가 true로 바뀌면서 조건문 탈출!
}
}
if(!changed) break;
for(int k=0; k<numArr.length; k++)
System.out.print(numArr [k]);
System.out.println(" " + (i+1) + "회차" );
}
}
}
// 과제 1)
// 선택정렬의 규칙과 방법 알아오기
// 선택정렬 : 선택해서 위치를 정렬하는 것
// 중간과정은 혼자 독학해서 이해해오기
// 회차가 끝날때마다 앞에있는 작은수가 확정이 됨
*** String 객체(문자열)은 읽을수만 있을 뿐 내용은 변경할 수 없다 (매우 중요!!)ㄹ
객체지향언어
- 데이터 : 저장해야 할 것
- 함수 : 해야 할 것
→ 91년 인터넷(WWW)이 처음 나옴
→ C++ != C언어
특징 : 코드 재사용성이 좋고 코드간의 관계를 규정하는 언어이므로 관리가 용이함
=> 개발과 유지보수 비용을 획기적으로 개선함
public class TvTest {
// 메인메서드가 있는 클래스와 동일하게 파일 이름 설정해야함
public static void main(String[] args) {
int[] arr = new int[3];
Tv t; //시작점 (=> Tv t = new Tv();)
t = new Tv(); // new Tv()가 인스턴스이고 인스턴스에 담긴 주소가 T에 담기는 것
t.channel = 7; // TV와 t.는 class와 instance의 관계
t.channelDown();
t.모양 = "별모양"
; System.out.println("현재 채널은 " + t.channel + "입니다");
// 클래스의 설계 >> 사용자가 정의한 자료형
// 자료를 저장하기 위해 사용하는 방법 >> 자료구조
// 변수(하나의 메모리에 한개의 데이터밖에 저장할 수 없어서) > 배열(각각의 저장공간에 접근하기 위해 인덱스를 사용해 구분) > 구조체
// 구조체 : 각각의 저장공간을 이름을 통해 구분함. 기능은 없고 데이터를 저장하기 위한 공간만 있는 것
// 클래스 = 구조체 + 기능
}
}
class Tv {
String 모양;
String color;
boolean power;
public int channel;
void power( ) {
power = ! power;
}
void channelUp( ) {
++channel;
}
public void channelDown( ) {
--channel;
}
}
'Java' 카테고리의 다른 글
[IT국비지원교육_코딩_비전공자] 객체지향 / 기본형의 매개변수와 참조형 매개변수/ 오버라이딩/생성자 (0) | 2022.01.18 |
---|---|
[IT국비지원교육_코딩_비전공자] for 문으로 배열 출력/ 스택구조와 JVM에 대한 이해 (0) | 2022.01.17 |
[IT국비지원교육_코딩_비전공자] 배열의 초기화/ 배열의 복사 (0) | 2022.01.13 |
[IT국비지원교육_코딩_비전공자] 배열의 특징/ 배열의 선언과 생성 (0) | 2022.01.06 |
[IT국비지원교육_코딩_비전공자] 조건문 / if문 / if-else문 / 중첩 if문 / switch문 (0) | 2022.01.05 |