Utility api 를 만들어 사용해보자

public class MinMaxFinder {
private MinMaxFinder(){
//private을 하면 객체 생성을 막을 수 있다.
//new 못하고 클래스이름과 도트연산자
}
public static int findMin(int[]arr){
int min = arr[0];//초기값 세팅
for(int i=1; i< arr.length; i++){
if( arr[i]< min){//arr[i]값이 min보다 적게 되면
min =arr[i]; //min에 arr에 있는 값을 옮겨줌
}
}
return min;
}
public static int findMax(int[]arr){
int max = arr[0];//초기값 세팅
for(int i=1; i< arr.length; i++){
if( arr[i]> max){//arr[i]값이 min보다 적게 되면
max =arr[i]; //min에 arr에 있는 값을 옮겨줌
}
}
return max;
}
}
최소값, 최대값을 구하는 클래스이다.
int min = arr[0] // 모든 원소는 0보다 크다. 0은 최소값
최소, 최대 값이 들어갈 공간을 초기화한다.
원소보다 큰 값, 원소의 가장 큰 값을 min = arr[0]에 저장한다
min에 가장 작은 큰 값이 있다 -> 다음 원소가 5라면 -> 5 저장 후, 다음 값과 비교 -> 오는 원소들과 비교, 작으면 저장, 크면 현 원소 유지.
min에 최소값이 들어가려면, 가장 큰 수를 넣는다. 다음 차례 원소들과 비교해가며 작은 값 찾음
min보다 작으면 교체
max는 가장 작은 수를 넣는다.
큰 값 -> 다음 수가 6이라면? 원래 값 보다 크면 저장, 아니면 유지.
배열의 0번. 맨 앞 값을 min, max로 넣고 시작한다.
왜?
첫원소 기준으로 비교하며 시작한다.
findMin
arr[i] < min // ex ) 3 < 5 라면, 배열에 저장되어 있는 값이 더 작다. 참이다. 이런 경우 min에 arr 값을 저장한다.
// 10 < 9 라면, 배열에 저장되어 있는 값이 더 크다. 거짓. 넘어간다.
findMax
5(배열의 첫번째 값)를 최대값 이라고 가정. 5보다 클 때 바꿔준다
5 > 3 //5가 더 크다. 거짓. 패스.
5 > 9 // 9가 더 크다. 참. 9를 max값에 넣어준다.

자바에서 제공해주는 class
public class RandomAPI {
public static void main(String[] args) {
Random rand = new Random();
int[]arr = new int[6];
int i=0;// 저장위치, 반복횟수
while (i<6){
int num =rand.nextInt(45)+1 ; //1-45
boolean isDuplicate = false;
for(int j=0; j<i; j++){ //중복확인
if(arr[j] == num){
isDuplicate =true;
break;
}
}
if(!isDuplicate){
arr[i++] =num;
}
}//6개의 랜덤 수를 저장하는것
for(int num : arr){
System.out.print(num+ " ");
}
}
}
Boolean isDuplicate =false; // false 는 중복이 아니라는 뜻이다.
True 는 중복.
처음 반복문은 무조건 탈출된다. i값이 0이라.
처음은 무조건 중복이 아니다. 그래서 데이터를 넣는다. int i=0;
arr[i++] = num // num 이 4라면, 후위 연산자 이기 때문에 0.0에 num 4가 들어간다.
다음 문장으로 넘어갈 때 i가 1로 증가한다.
arr[1]로 이동, arr[0]과 비교해 값을 넣는다.
2번째 for 문, i=0, j=0이니 한 번은 반복이 된다.
0에 4가 들어가 있다 ? -> 9와 4 비교, if문 실행하지 않음
-----------------------------

maver - pom.xml이라는 관리 파일, 환경 설정 파일
jar - 직접 다운로드
pom, build, gradle 은 자동 다운로드( 코드 삽입 해줘야함)
Json?
Json: 언어마다 데이터 포맷이 다른데, 다른 진영과 데이터 포맷을 문자열 형태로 주고받는다
{"key" : "value", "age" :23}
키와 값으로 이루어진 데이터 객체. 데이터 교환 방식이다.
플랫폼, 언어와 상관 없이 교환 가능하다.

Gson을 쓰기 위한 라이브러리 추가
File - Prohect structure - libraries -추가 - 다운 받은 파일 추가


import com.google.gson.Gson;
import fc.java.model2.Person;
public class GsonTwoAPI {
public static void main(String[] args) {
Person person = new Person("n1me",30);
Gson gson = new Gson();
String json = gson.toJson(person); //toJson이 데이터 타입을 문자열로 바꿔준다
System.out.println(json);
}
}
toJson이 문자열로 변경시켜준다. 변경된 문자열을 String json에 저장 후 출력하면
-> {"name":"n1me","age":30}
이렇게 출력된다. 이것을 json 문자 포맷이라고 한다.
이 json형식을 person형식으로도 바꿀 수 있어야 하는데...

import com.google.gson.Gson;
import fc.java.course2.model3.Member;
public class GsonFromJson {
public static void main(String[] args) {
String json ="{\"name\":\"name\",\"age\":24}";
//json문자열을 object, Memeber 로 변환 시킨 것
Gson gson = new Gson();
Member mvo = gson.fromJson(json, Member.class);
System.out.println("mvo = " + mvo);
//제이슨 문자열을ㅍ멤버로 프롬 제이슨이 바궈줌.
}
}
String json ="{\"name\":\"name\",\"age\":24}";
역슬래시를 넣어줘야 한다.
Member 객체로 바꾸려면
Member mvo = gson.fromJson(json, Member.class);
Gson.fromJson(json, Member.class) 를 사용해 Member 타입으로 변환.
'JAVA > Bootcamp 자바' 카테고리의 다른 글
내가 만드는 API, 사용자 정의 자료형 배열 , Object Array (0) | 2024.03.14 |
---|---|
내가 만드는 API, int array (0) | 2024.03.14 |
추상클래스와 인터페이스 (1) | 2024.03.13 |
최상위 클래스 Object (0) | 2024.03.13 |
추상 클래스, 인터페이스 (2) | 2024.03.05 |