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

[Java] 입력한 정수 n의 근사치인 배열 요소 찾기 본문

Java

[Java] 입력한 정수 n의 근사치인 배열 요소 찾기

H' 2021. 7. 16. 12:06
package days14;

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

/**
 * @author user
 * @date 2021. 3. 25 - 오후 3:33:31
 * @subject	근사치
 * @content
 * 
 */
public class Ex04 {

	public static void main(String[] args) {

		int [] m = new int[20];
		fillRandom(m);
		Arrays.parallelSort(m);
		System.out.println(Arrays.toString(m));
		int n = getNumber();
		// 찾는 정수 n의 근사치를 출력하는 함수
//		approximateValue(m, n);
		
		
		// 근사치 출력
		int appValue1 = m[0], appValue2 = -1;
		int minGap = Math.abs(m[0]-n);
		
		//m[1]-n=gap
		int gap;
		for (int i = 1; i < m.length; i++) {
			gap = Math.abs(m[i]-n);
			if (gap < minGap) {
				minGap = gap;
				appValue1 = m[i];
			} else if (gap == minGap) {
				appValue2 = m[i];
			}
		}
		System.out.println(appValue2==-1? appValue1: appValue1+" "+appValue2);
		
		
		
	}//main

	
	
	
	private static void approximateValue(int[] m, int n) {
		int appVal = m[0], idx = 0;
		for (int i = 0; i < m.length; i++) {
			if (Math.abs(m[i]-n) < Math.abs(appVal-n)) {
				appVal = m[i];
				idx = i;
			}
		}//for
		if (Math.abs(appVal-n) == Math.abs(m[idx+1]-n)) {
			int appVal2 = m[idx+1];
			System.out.printf("%d의 근사값은 %d번째 위치의 %d, %d번째 위치의 %d입니다.",
								n, idx+1, appVal, idx+2, appVal2);
		} else {
			System.out.printf("%d의 근사값은 %d번째 위치의 %d입니다.", n, idx+1, appVal);
		}//if
	}//approximateValue

	
	
	
	
	private static int getNumber() {
		Scanner scanner = new Scanner(System.in);
		System.out.print("> 찾을 정수 입력 ? ");
		int n = scanner.nextInt();
		return n;
	}

	private static void fillRandom(int[] m) {
		// 중복이 되지 않는 1~100까지의 정수를 m 배열에 채워넣는 코딩
		Random rnd = new Random();
		int idx = 0, ranNum;
		while (idx < 20) {
			ranNum = rnd.nextInt(100)+1;
			if (!isDuplicate(m, ranNum)) m[idx++] =ranNum;
		}
	}

	private static boolean isDuplicate(int[] m, int ranNum) {
		for (int i = 0; i < m.length; i++) {
			if(m[i]==ranNum) return true;
		}
		return false;
	}

	

}//class
Comments