h-i-s-t-o-r-y

[Java] Arrays 클래스 - 배열 요소 검색하기, 배열 복사 본문

Java

[Java] Arrays 클래스 - 배열 요소 검색하기, 배열 복사

H' 2021. 7. 16. 11:21
package days09;

import java.util.Arrays;
import java.util.Scanner;

public class Ex02_02 {

	public static void main(String[] args) {
		// 2. 이진 검색 (BinarySearch)
		// 1. 순차 검색 (SequenceSearch)
		
		int [] m = new int[10];
		for (int i = 0; i < m.length; i++) {
			m[i] = (int) (Math.random()*50) +1;		//1~50
		}
		
		
		// **암기
		// Arrays 클래스 : 배열을 다루는 클래스
		// String --- Arrays.toString(m)
		System.out.println(Arrays.toString(m));		//어떤값이 들어있는지 확인하는 용도
		System.out.print("> 검색할 정수를 입력 ? ");
		Scanner scanner = new Scanner(System.in);
		int searchNum = scanner.nextInt();
		
		//return 찾은위치(index) 배열, 찾을 정수
//		int idx = indexOf(m, searchNum);
		int idx = lastindexOf(m, searchNum);
		
		if (idx==-1) {
			System.out.println("> m 배열 안에 찾는 정수(searchNum)는 없습니다.");
		} else {
			System.out.printf("%d는 %d(index)에 있습니다.\n", searchNum, idx);
		}
		System.out.println("==END==");
		
		
	}//main

	private static int lastindexOf(int[] m, int searchNum) {
		int idx = -1;
		for (int i = m.length-1; i < m.length; i--) {
			if( m[i] == searchNum ) return i;
			// {idx=i; break;}
		}
		
		return idx;
	}
	
	
	
	private static int indexOf(int[] m, int searchNum) {
		int idx = -1;
		for (int i = 0; i < m.length; i++) {
			if( m[i] == searchNum ) return i;
			// {idx=i; break;}
		}
		
		return idx;
	}


}//class
package days10;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Ex01 {

	public static void main(String[] args) {

		int [] m = new int[10];
		
		Random rnd = new Random();
		for (int i = 0; i < m.length; i++) {
			m[i] = rnd.nextInt(20)+1;
		}
		
		System.out.println(Arrays.toString(m));		//****기억
		
		Scanner scanner = new Scanner(System.in);
		System.out.print("> 찾을 정수 입력 ? ");
		int n = scanner.nextInt();
		
		int [] x = sequenceSearch(m, n);
		System.out.println(Arrays.toString(x));
		
		
	}//main

	
	
	// 함수안에서 출력하면 활용할 수가 없음
	private static int[] sequenceSearch(int[] m, int n) {
		//찾고자하는 수의 위치들을 저장할 배열
		int [] x = new int[ m.length ];
		//0으로 초기화돼서 0번째를 가리키는건지 0배열인지 알수가 없음
		/*
		for (int i = 0; i < x.length; i++) {
			x[i] = -1;
		}
		*/
		Arrays.fill(x, -1);		//위에 for문이랑 같음. Arrays 클래스의 fill 함수
		
		for (int i = 0 , j=0; i < m.length; i++) {
			if(m[i]==n) {
				x[j]=i;
				j++;
			}
		}
		return x;
	}
	

	
}//class
package days10;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Ex01_03 {

	public static void main(String[] args) {
		//6번 시험다시냄

		int [] m = new int[10];
		fillM(m);
		int n = getNumber();
		
		int begin = 0;
		
		/*6번
		while (true) {
			int idx = sequenceSearch(m, n, begin);
			if(idx == -1) break;	// -1:배열끝까지 찾았는데 없다
			System.out.println(idx);
			begin = idx + 1;
		}
		*/
		
		
		// *********** 기억,이해,암기
		// 위에 코드 두줄을 조건식 안에 한줄로 ...
		int idx;
		/*
		while ( (idx = sequenceSearch(m, n, begin)) != -1 ) {
			System.out.println(idx);
			begin = idx + 1;
			// 찾는 정수 없다면 while문 한번도 안들어가서 begin=0 상태일 것
		}
		if(begin==0) System.out.println("> 찾는 정수는 없습니다.");
		 */
		
		boolean flag = false;
		while ( (idx = sequenceSearch(m, n, begin)) != -1 ) {
			System.out.println(idx);
			begin = idx + 1;
			flag = true;
			// 찾는 정수 없다면 while문 한번도 안들어가서 flag=false
			// 한번이라도 들어가서 찾으면 flag = true
		}
		if(!flag) System.out.println("> 찾는 정수는 없습니다.");
		
		
		
	}//main
	
	private static int getNumber() {
		Scanner scanner = new Scanner(System.in);
		System.out.print("> 찾을 정수 입력 ? ");
		int n = scanner.nextInt();
		return n;
	}




	private static void fillM(int[] m) {
		Random rnd = new Random();
		for (int i = 0; i < m.length; i++) {
			m[i] = rnd.nextInt(20)+1;
		}
		System.out.println(Arrays.toString(m));
	}



	private static int sequenceSearch(int[] m, int n) {
		for (int i = 0; i < m.length; i++) {
			if(m[i]==n) return i;
		}
		return -1;
	}
	
	
	private static int sequenceSearch(int[] m, int n, int begin) {		//찾기시작하는 위치
		for (int i = begin; i < m.length; i++) {
			if(m[i]==n) return i;
		}
		return -1;
	}
	

	
}//class

package days26;

import java.util.Arrays;

public class Ex07 {

	public static void main(String[] args) {
		// p.624 Arrays 클래스
		// 배열을 다루는 유용한 메서드가 정의되어 있다
		int[] m = new int[10];
		// [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
		System.out.println(Arrays.toString(m));
		
		Arrays.setAll(m, i -> (int) (Math.random()*100)+1);
		// Arrays.fill(m, -1);
		Arrays.parallelSort(m);	//오름차순 정렬
		int idx = Arrays.binarySearch(m, 50);
		System.out.println(Arrays.toString(m));
		
		
		// 배열 복사 - 다른 객체 참조
		int[] copy_m = Arrays.copyOf(m, m.length);
		copy_m[0] = 111;
		System.out.println(Arrays.toString(copy_m));	//111 저장됨
		System.out.println(Arrays.toString(m));			//111X 원래값
//		Arrays.copyOfRange();	//배열의 일부분만 복사..
//		System.arraycopy(src, srcPos, dest, destPos, length);
		
		
		// p.628 Comparator와 Comparable
		
		
	}//main

}//class
Comments