배열
- for문이랑 거의 같이 쓰게 됩니다.
- int num[ ] = int[ ] num
- new.length = 개수를 알고 싶을 때 (최대값대신 쓰임)
- int num[ ] = new int[x] ← [x]는 자료형 int의 개수를 나타냅니다.
📌 Note Code
Test1. 사용자에게 수 입력을 받아 배열 개수 및 값 확인
💻 입력
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //Scanner 특징 : 사용자에게 값을 받음
int[] num = new int[6]; // 몇 개의 수 입력할지? [개수]
System.out.print("6개 수입력해봐");
for(int i=1;i<num.length;i++) {
num[i]= sc.nextInt();
}
for(int i=1;i<num.length;i++) {
System.out.println("num["+i+"] = "+ num[i]);
}
System.out.print("배열의 개수 : "+num.length+"개");
}
}
6개 수입력해봐1 2 3 4 5 6
num[1] = 1
num[2] = 2
num[3] = 3
num[4] = 4
num[5] = 5
배열의 개수 : 6개
📌 Note Code
Test2-1. 만년 달력 만들기
💻 입력
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// int months[] = new int[12]; // months 1월에는 31, 2월에는 28.29일~
int months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 배열을 만듦과 동시에 변수의 값에 바로 초기화하는 방법{,,,}
int y, m, nalsu, i, week; // week[0~6 나머지]
do {
System.out.print("년도?");// 2023
y = sc.nextInt();
} while (y < 1); // 안돼요~ true의 반대인 false값이 나오게 적어야함.
do {
System.out.print("월?");
m = sc.nextInt();
} while (m < 1 || m > 12);
// (윤년은 4번에 한번씩- 2월29일)
// y년이 윤년(인지 확인하는 공식 -> 2월 28일? or 29일?
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) { // &&먼저 , y%400==0이면 윤년임 -> true면 윤년임
months[1] = 29;
// System.out.print("윤년이다");
}
// 전년도(y-1)년 12월 31일까지의 날수를 구하여라
nalsu = (y - 1) * 365 + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400;// &&는 빼기, ||는 더하기
// int yy = (y-1)/4 - (y-1)/100 + (y-1)/400;
// System.out.print("날수 : "+nalsu+", 윤년 : "+yy);
// y년(m-1)월까지의 날수
// index(번지) : 0 1 2 3 4 5 6 7 8 9 10 11
// 배열 : 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
// 월(months) : 1 2 3 4 5 6 7 8 9 10 11 12
for (i = 0; i < (m - 1); i++) { // m-1 => ex) 5월이라고 했을 때 months는 4월까지지만 index번지를 생각했을 때 3번지까지이므로 m-1
nalsu += months[i]; // nalsu = nalsu+months[i]
}
// y년m월1일까지의 날수
nalsu += 1;
// 입력한 y년m월1일이 무슨 요일인지 확인(나머지 : 0~6사이)
week = nalsu % 7;
// System.out.print(week);
// 달력 출력
// [2023년 11월]
System.out.printf("%8s[ %d년 %d월 ]"," ",y,m); // 공백 = 문자 = %s
System.out.println();
System.out.println("\n 일 월 화 수 목 금 토"); // ln + \n =2줄 띔, 공백2칸+한글 2byte = 4byte
System.out.println("------------------------------");
// 앞에 수요일(1일)까지 빈공간 채우기
for (i = 0; i < week; i++) {
System.out.print(" "); // 공백 4칸 (4byte)
}
// index(번지) : 0 1 2 3 4 5 6 7 8 9 10 11
// 배열 : 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
// 월(months) : 1 2 3 4 5 6 7 8 9 10 11 12
// 월의 날짜 출력
for (i = 1; i <= months[m - 1]; i++) {
System.out.printf("%4d", i); // %.2f - 소수점 아래 두자리까지 표시해라, %4d - 4자리 (4번째 자리에 찍힌다! <=숫자는 오른쪽 정렬 , 문자는 왼쪽 정렬)
week++;
if (week % 7 == 0) {
System.out.println();
}
}
if (week % 7 != 0) {
System.out.println();
}
System.out.println("------------------------------");
}
}
년도?2023
월?11
[ 2023년 11월 ]
일 월 화 수 목 금 토
------------------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
------------------------------
📌 Note Code
Test2-2. 입력한 년도,월,일에 따라 요일 출력하기
💻 입력
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
//*요일구하기
//(사용자한테) 년도?
//월?
//일?
//결과 : 2023년 11월20일 월요일
// 만년 달력 만들기 (윤년은 4번에 한번씩- 2월29일)
Scanner sc = new Scanner(System.in);
// int months[] = new int[12]; // months 1월에는 31, 2월에는 28.29일~
int months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 배열을 만듦과 동시에 변수의 값에 바로 초기화하는 방법{,,,}
int y, m, d, nalsu, i, week; // week[0~6 나머지]
do {
System.out.print("년도?");// 2023
y = sc.nextInt();
} while (y < 1); // 안돼요~ true의 반대인 false값이 나오게 적어야함.
//년도 다음에 윤년인지 그다음 확인
// y년이 윤년(인지 확인하는 공식 -> 2월 28일? or 29일?
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) { // &&먼저 , y%400==0이면 윤년임 -> true면 윤년임
months[1] = 29;
// System.out.print("윤년이다");
}
do {
System.out.print("월?");
m = sc.nextInt();
} while (m < 1 || m > 12);
do {
System.out.print("일?");
d = sc.nextInt();
} while (d < 1 || d >months[m-1]);// *** m-1 = index번호는 m-1
// 전년도(y-1)년 12월 31일까지의 날수를 구하여라
nalsu = (y - 1) * 365 + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400;
for (i = 0; i < (m - 1); i++) {
nalsu += months[i];
}
// y년m월1일까지의 날수 = nalsu +=1인데, 지금까지의 날수를 사용자가 정하게되면 nalsu+=d, nalsu = nalsu + d
nalsu += d;
// 입력한 y년m월1일이 무슨 요일인지 확인(나머지 : 0~6사이)
week = nalsu % 7;
String yoil[] = {"일","월","화","수","목","금","토"};
//char yoil[] = {'일','월','화','수','목','금','토'};
System.out.printf("%d년 %d월%d일 %s요일",y,m,d,yoil[week]); //-> yoil[week=숫자] -> 1번지 = 월요일
//요일 출력
//결과 : 2023년 11월20일 월요일ㄴ
}
}
년도?2023
월?11
일?11
2023년 11월11일 토요일
📌 Note Code
Test3. 5개 숫자를 받아 오름차순으로 정렬하기
💻 입력
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
//selection sort - 왼쪽 기준으로 계속 비교하는 것 (오름차순일때 가장 왼쪽이 낮은 수)
//다중 for문 이용
int[] num = {35,27,13,10,5};
int i,j,temp;
System.out.print("Source Data : ");
for(i=0;i<num.length;i++) {
System.out.printf("%4d",num[i]);
}
System.out.println();
//정렬작업
for(i=0;i<num.length-1;i++) { // ex) 배열[5]개수 - 1 = 4번 반복횟수
for(j=i+1;j<num.length;j++) { //j = i+1
//System.out.println(i+" : "+j);
if(num[i]>num[j]){
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
/*System.out.print("Sorted Data : ");
for(int su : num) {
System.out.printf("%4d",num[i]);
}
System.out.println();
*/
//배열같은 구조에서 쓸 수 있는 for문 = 확장 for문(microsoft의 for문)
System.out.print("Sorted Data : ");
for(int su : num) { //시작과 끝값이 몇개건 상관없이 맨 처음 값 su를 꺼내와서 계속 반복하다가 -> 나중에 없으면 for문 중지 [int su : num]
System.out.printf("%4d",su);
}
System.out.println();
}
}
Source Data : 35 27 13 10 5
Sorted Data : 5 10 13 27 35
📌 Note Code
Test4. 두 개의 수를 입력받아 적은 수에서 큰수까지의 합
💻 입력
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("두개의 수 입력?");// 1 100
int[] num = new int[2];
int[] temp = { 0 };
for (int i = 0; i < num.length; i++) {
num[i] = sc.nextInt();
}
if (num[0] > num[1]) { // temp값을 이용하면 오른차순순으로 정렬됨 그래서 왼쪽이
temp[0] = num[0];
num[0] = num[1];
num[1] = temp[0];
}
int sum = 0;
for (int i = num[0]; i <= num[1]; i++) {
sum += i;
}
System.out.println(num[0] + "부터" + num[1] + "까지 총합 : " + sum);
}
}
두개의 수 입력?7 10
7부터10까지 총합 : 34