카테고리 없음

15.JAVA 예제 정리 [배열 응용 / 달력]

woogy99 2024. 12. 2. 18:44

//6개의 난수 발생 => 중복이 없는 데이터 출력 (1~45사이의 난수)

//=> 피망(고스톱) => 로직

 

import java.util.Arrays;

 

public class 배열_4 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

 

 

int lotto[]=new int[10];

int su=0; // 난수 발생시 저장하는 변수

boolean bCheck=false; // 중복 여부 확인

 

for(int i=0; i<lotto.length; i++) {

 

bCheck=true;

while(bCheck) { //중복여부 확인

 

su=(int)(Math.random()*45)+1;

bCheck=false; //while만 종료

 

for(int j=0; j<i; j++) {

if(lotto[j]==su) { //저장된 데이터중에 난수와 같은 값이 있는지

bCheck=true;

break;

}

}

}

 

lotto[i]=su;

}

//

// for(int i=0; i<arr.length; i++) {

//

// arr[i]=(int)(Math.random()*10)+1;

//

// for(int j=0; j<i; j++) {

//

// if(arr[i]==arr[j]) {

// i--;

// break;

// }

// }

//

// }

 

 

 

 

Arrays.sort(lotto);

System.out.println(Arrays.toString(lotto));

}

 

}


/*

정렬

= 선택정렬 / 버블정렬

= ASC / DESC ====> Oracle : Order by

 

| 내림차순 (******) => 최신순

| 올림차순

 

86~96page => 1차원 배열

알고리즘 => 정렬 알고리즘 => 108page

 

선택정렬 : 한개의 데이터를 선택한 후에 기준점으로 변경

 

10 30 50 20 40 => 10 20 30 40 50 , 50 40 30 20 10

----------------- -------------

올림차순 내림차순

 

내림 차순

10 30 50 20 40

-- --

30 10

-- --

50 30

-- --

50 20

-- --

50 40

----------------- 1round => for문 한번 수행

50 10 30 20 40

--

고정

-- --

30 10

-- --

30 20

-- --

40 30

------------ 2round => for문 한번 수행

 

 

 

 

*/

 

public class 배열응용_4 {

static void sort(int[] arr) {

 

for (int i = 0; i < arr.length - 1; i++) {

 

for (int j = i + 1; j < arr.length; j++) {

if (arr[i] < arr[j]) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

 

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] arr = new int[5];

// 초기화

for (int i = 0; i < arr.length; i++) {

arr[i] = (int) (Math.random() * 100) + 1;

 

}

System.out.println("정렬 전 :");

for (int i : arr) {

System.out.print(i + " ");

}

System.out.println();

 

for (int i = 0; i < arr.length - 1; i++) {

 

for (int j = i + 1; j < arr.length; j++) {

if (arr[i] < arr[j]) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

 

}

}

 

 

System.out.println("정렬 후 :");

for (int i : arr) {

System.out.print(i + " ");

}

}

 

}


import java.util.*;

 

public class 배열응용_5 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] arr = new int[5];

for (int i = 0; i < arr.length; i++) {

arr[i] = (int) (Math.random() * 100) + 1;

 

}

System.out.println("정렬 전 : ");

 

for (int i : arr) {

System.out.print(i + " ");

}

 

System.out.println();

System.out.println("정렬 후 : ");

 

Arrays.sort(arr); //올림차순

 

for (int i : arr) {

System.out.print(i + " ");

}

System.out.println();

for(int i=arr.length-1; i>=0; i--) {

System.out.print(arr[i]+" ");

}

 

// 자바 => 조립식 / 라이브러리 중심 / 오버라이딩 프로그램

// ------------- ** 핵심

// Math.random()*100 => int => .jar

// 데이터베이스 연동 / 웹에서 브라우저 전송 => 사용자 정의 라이브러리

// 반복 => 공통 모듈 => 중복제거

 

 

 

}

 

 

 

}


import java.util.Arrays;

 

public class 배열응용_7 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

char[] arr=new char[5];

 

for(int i=0; i<arr.length; i++) {

arr[i]=(char)((Math.random()*26)+65);

}

System.out.println("정렬 전 : ");

for(char c: arr) {

System.out.print(c+" ");

}

System.out.println("\n정렬 후: ");

 

for(int i=0; i<arr.length-1; i++) {

 

for(int j=i+1; j<arr.length; j++) {

 

if(arr[i]<arr[j]) {

 

char temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

}

System.out.println((i+1)+"Round"+Arrays.toString(arr));

}

for(char i:arr) {

System.out.print(i+" ");

}

}

 

}


/*

버블 정렬

=> 인접한 데이터끼리 비교

=> 선택 정렬 => 앞에서부터 고정

=> 버블 정렬 => 뒤에서부터 고정

 

방식

20 30 40 50 10 => DESC

-- --

30 20

-- --

40 20

-- --

50 20

-- --

20 10

----------------

30 40 50 20 10 => 1round

-- --

40 30

-- --

50 30

-- --

30 20

---------------

40 50 30 20 10 => 2round

-- --

50 40

-- --

40 30

---------------

50 40 30 20 10 => 3round

 

 

 

*/

 

import java.util.Arrays;

public class 배열응용_8 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] arr=new int[5];

// 초기화

 

 

 

for(int i=0; i<arr.length; i++) {

arr[i]=(int)(Math.random()*100)+1;

 

}

System.out.println("정렬 전 : ");

for(int i:arr) {

System.out.print(i+" ");

}

 

System.out.println("\n");

for(int i=0; i<arr.length-1; i++) {

 

for(int j=0; j<arr.length-1-i; j++) {

if(arr[j]<arr[j+1]) {

int temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

System.out.println((i+1)+"Round"+Arrays.toString(arr));

}

System.out.println("최종 결과값: ");

 

for(int i:arr) {

System.out.print(i+" ");

}

 

 

}

 

}


/*

배열 복사

=얕은 복사 (Call By Reference) => 주소에 의한 참조

=> 같은 메모리를 이용

=깊은 복사 => 새로운 배열 생성 (메모리 공간이 따로 생성)

 

 

*/

public class 배열정리_추가내용 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] arr= {10,20,30,40,50};

int[] arr_copy=arr.clone(); //clone => 값을 복사하여 새로운 배열 생성 => 깊은 복사 => 아바타 =< adapter

System.out.println("arr="+arr);

 

System.out.println("arr_copy"+arr_copy);

 

arr_copy[0]=100;

arr_copy[1]=200;

arr_copy[2]=300;

arr_copy[3]=400;

arr_copy[4]=500;

 

for(int i:arr) {

System.out.print(i+" ");

}

System.out.println();

for(int i:arr_copy) {

System.out.print(i+" ");

}

}

 

}


/* =>달력

 

1. 사용자 정의

=> 달력 : 1일자의 요일 확인

------

=> 1년도 1월 1일 => 월요일

1) 1/1/1 ~ 2023/12/31 => 총날수 계산

2) 2023/11/30 => 총날수 계산

3) ------------------------------+1

1)+2)+3) / 7 => 요일을 구한다

0~6 => 0일=> 일요일 6=>토요일

=> 예약 / 일정 관리

2. 라이브러리 Calendar

 

*/

 

import java.util.*;

 

public class 배열응용_2 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

// 입력 받기 => year/month/day => 요일

 

Scanner scan=new Scanner(System.in);

System.out.print("년도 입력:");

int year=scan.nextInt();

 

System.out.print("월 입력:");

int month=scan.nextInt();

 

// System.out.print("일 입력:");

// int day=scan.nextInt();

 

// 전년도까지 날 수

int total=(year-1)*365

+(year-1)/4

-(year-1)/100

+(year-1)/400; //윤년 처리

 

 

int[] lastday= {

31,28,31,30,31,30,

31,31,30,31,30,31

};

 

//모든 언어에서 사용되는 윤년 계산법

if((year%4==0 && year%100!=0)||(year%400==0)) {

 

lastday[1]=29;

}else {

lastday[1]=28;

}

 

for(int i=0; i<month-1; i++) {

total+=lastday[i];

}

 

// 입력 날 +

//total+=day;

total++;

//요일 구하기

//=> switch대신 사용하는 배열

char[] strWeek= {'일','월','화','수','목','금','토'};

int week=total%7;

 

System.out.println(year+"년도"+month+"월");

System.out.println();

for(char c:strWeek) {

System.out.print(c+"\t"); // \t => 일정간격으로 띄우기

}

// 첫 번째 날짜 위치에 맞춰 공백 출력 (변경된 부분)

 

System.out.println();

for(int i=1; i<=lastday[month-1]; i++) {

 

 

if(i==1) {

for(int j=0; j<week; j++) {

System.out.print("\t");

}

}

System.out.printf("%2d\t",i);

week++; //요일 변경

if(week>6) { //일요일 이라면

week=0;

System.out.println(); //다음줄에 출력

}

}

}

 

}


/* =>달력

 

1. 사용자 정의

=> 달력 : 1일자의 요일 확인

------

=> 1년도 1월 1일 => 월요일

1) 1/1/1 ~ 2023/12/31 => 총날수 계산

2) 2023/11/30 => 총날수 계산

3) ------------------------------+1

1)+2)+3) / 7 => 요일을 구한다

0~6 => 0일=> 일요일 6=>토요일

=> 예약 / 일정 관리

2. 라이브러리 Calendar

 

*/

 

import java.util.*;

 

public class 배열응용_2 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

// 입력 받기 => year/month/day => 요일

 

Scanner scan=new Scanner(System.in);

System.out.print("년도 입력:");

int year=scan.nextInt();

 

System.out.print("월 입력:");

int month=scan.nextInt();

 

// System.out.print("일 입력:");

// int day=scan.nextInt();

 

// 전년도까지 날 수

int total=(year-1)*365

+(year-1)/4

-(year-1)/100

+(year-1)/400; //윤년 처리

 

 

int[] lastday= {

31,28,31,30,31,30,

31,31,30,31,30,31

};

 

//모든 언어에서 사용되는 윤년 계산법

if((year%4==0 && year%100!=0)||(year%400==0)) {

 

lastday[1]=29;

}else {

lastday[1]=28;

}

 

 

for(int i=0; i<month-1; i++) {

total+=lastday[i];

}

 

 

// 입력 날 +

//total+=day;

total++;

//요일 구하기

//=> switch대신 사용하는 배열

char[] strWeek= {'일','월','화','수','목','금','토'};

int week=total%7;

 

System.out.println(year+"년도"+month+"월");

System.out.println();

for(char c:strWeek) {

System.out.print(c+"\t"); // \t => 일정간격으로 띄우기

}

// 첫 번째 날짜 위치에 맞춰 공백 출력 (변경된 부분)

 

 

System.out.println();

for(int i=1; i<=lastday[month-1]; i++) {

 

 

if(i==1) {

for(int j=0; j<week; j++) {

System.out.print("\t");

}

}

System.out.printf("%2d\t",i);

week++; //요일 변경

if(week==7) { //일요일 이라면

week=0;

System.out.println(); //다음줄에 출력

}

 

}

}

 

}