Dev/Java

[java] 배열, 달력만들기

창문닦이 2019. 1. 21. 22:46

배열 예제

import java.util.Scanner;

public class Test4 {

public static void main(String[] args) {

// 배열. 두 방식 다 작성 가능

// 일반적으로 1차원 배열,2차원 배열 많이 사용함. 3차원 배열도 가끔 씀

// int num[]= new int[5];

int[] num = new int[5];

Scanner sc = new Scanner(System.in);

System.out.println("정수 입력하세요");

// 배열을 만들고 초기값을 설정안하면 디폴트값이 존재

// String:null, int:0, boolean:False(0)

// for문안에서 쓰인 변수는 지역변수. 다른 for문의 지역변수와는 서로 겹치지 않음

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

num[i] = sc.nextInt();

}

// 시작값과 끝값이 정해져 있으므로 배열 + 반복문 함께쓰는 게 간편

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

System.out.println("num[" + i + "]: " + num[i]);

}

// 배열의 갯수

System.out.println("배열의 갯수: " + num.length); // 배열의 length 메소드만 ()가 없다.

System.out.println("배열의 마지막 방 번호: " + (num.length - 1));

sc.close();

}

}



실행결과





만년 달력 만들기

import java.util.Scanner;

public class Test5 {

public static void main(String[] args) {

/*

//만년달력

1년 1월 1일 : 월요일부터 시작

주의에 있는 날짜를 7로 나누면 나머지가 일요일:0 ~ 토요일:6으로 떨어지게 된다.

현재시점 : 2018.12.01

(y-1)*365+ 윤년의 갯수(2월 29일 카운팅) : 2017.12.31까지의 일 수

2017년*365일 + 윤년의 갯수(2월 29일 카운팅)+ 올해 전월까지의 날수(31일+28일+31일+30일...11.30까지의 달마다 일수)

+ 이번 달 일수(1일이라면 +1) = 현재시점까지의 날 수

날수/7을 하면 나오는 나머지 활용(ㅁ%7==0 이면 일요일, 0~6사이의 값)

2018년 12월 1일은 나눴을 때 6이 나왔기 때문에 토요일이다.

*/

Scanner sc = new Scanner(System.in);

//1~12월마다 일수가 며칠인지 알려주기 위해 배열을 만듦

int months[] = {31,28,31,30,31,30,31,31,30,31,30,31};

int y, m, nalsu, i, week;

//년도 입력시 0년 이전은 오류가 발생하도록 제약조건이 필요

do{

System.out.print("년도?"); //2018

y = sc.nextInt();

}while(y<1);

//월수 입력시 1~12월로 입력

do{

System.out.print("월?"); //12

m = sc.nextInt();

}while(m<1 || m>12);

//입력한 연도가 윤년이면 배열에서 2월의 일자를 29로 바꿔주면 됨.

//윤년에 따른 2월의 날수 계산

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

months[1] = 29;

}

//1년1월1일 부터 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.println(yy);

//월   : 1 2  3 4 5 6  7 8 9 10 11 12

//배열 : {31,28,31,30,31,30,31,31,30,31,30,31}

//idx  : 0 1  2 3 4 5  6 7 8 9 10  11

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

nalsu += months[i]; //nalsu = nalsu + months[i];

}

//1년1월1일 부터 y년m월1일 까지의 날수

nalsu += 1; //nalsu = nalsu +1;

//y년m월1일 의 주의 수 계산

week = nalsu%7;

//System.out.println(week);

System.out.println("\n  일 월 화  수 목 금 토"); // 두칸SPACE + 한글1글자 : 4byte

System.out.println("------------------------------");

//월의 1일을 작성할 때 주의수에 따른 공백을 만들어준 뒤 작성해야함

for(i=0; i<week; i++){ //6이면 토요일의 자리까지 공백을 찍어줌

System.out.print("    ");//공백4칸

}

//해당 월의 날짜 출력

for(i=1; i<=months[m-1];i++){

System.out.printf("%4d",i); //자릿수를 4byte씩 유지해라.

week++;

if(week%7 == 0){

System.out.println();

}

}

if(week%7!=0){

System.out.println();

}

System.out.println("------------------------------");

sc.close();

}//endmain

}//endclass



실행결과



년,월,일을 입력받아 요일을 출력하세요

import java.util.Scanner;

public class Test6 {

public static void main(String[] args) {

// 년,월,일을 입력받아 요일을 출력하세요

// 2018년 12월 3일 월요일

Scanner sc = new Scanner(System.in);

int months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int y, m, nalsu, i, week, day;

String w[] = {"일", "월", "화", "수", "목", "금", "토"};

do {

System.out.print("년도?"); // 2018

y = sc.nextInt();

} while (y < 1);

do {

System.out.print("월?"); // 12

m = sc.nextInt();

} while (m < 1 || m > 12);

do {

System.out.print("일?"); // 31

day = sc.nextInt();

} while (day < 1 || day > months[m-1]);

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

months[1] = 29;

}

nalsu = (y - 1) * 365 + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400;

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

nalsu += months[i];

}

nalsu += day;

week = nalsu % 7;

System.out.printf("%d년 %d월 %d일은 %s요일입니다.", y, m, day, w[week]);

sc.close();

}

}


실행결과




비워진 마름모 찍기

public class Test7 {

public static void main(String[] args) {

//123456789

//1234 6789

//123   789

//12     89

//1       9

//---------

//12     89

//123   789       

//1234 6789              

//123456789                

      //a:행, b:왼쪽, C:오른쪽

for (int a = 0; a < 5; a++) {

          for (int b = 0; b < 5; b++) {

              System.out.print(b < 5 - a ? "*" : " "); //12345

          }

          for (int c = 0; c < 4; c++) {

              System.out.print(c >= a - 1 ? "*" :" "); //6789

          }

          System.out.println();

      }

     

     

      for (int a = 0; a<4; a++) {

          for(int b = 0; b<5; b++) {

              System.out.print(a+1>=b?"*":" "); //12345

          }

          for(int c = 4; c > 0; c--) {

              System.out.print(a+2>=c?"*":" "); //6789

          }

          System.out.println();

      }

}

}


실행결과





(1)+(1+2)+(1+2+3)+...+(1+2+3+...+10) 합계 구하기

public class Test8 {

public static void main(String[] args) {

// (1)+(1+2)+(1+2+3)+...+(1+2+3+...+10)

//방법1

int i, j;

int sum = 0;

for (i = 1; i <= 10; i++) {

for (j = 1; j <= i; j++) {

sum += j;

}

}

System.out.println("(1)+(1+2)+(1+2+3)+...+(1+2+3+...+10):" + sum);

//방법2

int n, sum1, sum2;

n=sum1=sum2=0;

while(n<10){

n++; //1 2 3  4 5 6 7  8 9 10

sum1 +=n; //1 3 6  10 15 21 28 36  45 55

sum2 += sum1; //1 4 10 20 35 56 84 120 165 220

}

System.out.println(sum2);

}

}



실행결과





1에서 100까지 수의 홀수의 합, 짝수의 합, 전체의 합


public class Test9 {

public static void main(String[] args) {

// 1에서 100까지 수의 홀수의 합, 짝수의 합, 전체의 합

int num[] = new int[100];

int sum = 0;

int sum1 = 0;

int sum2 = 0;

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

num[i] = i + 1;

// System.out.println(num[i]);

if (num[i] % 2 == 0) {

sum1 += num[i]; //짝수합

} else {

sum2 += num[i]; //홀수합

}

sum = sum1 + sum2; //전체합

}

System.out.println("1~100의 전체의 합:" + sum);

System.out.println("1~100의 짝수의 합:" + sum1);

System.out.println("1~100의 홀수의 합:" + sum2);

}

}



실행결과



1-2+3-4+5-6+7-8+9-10 연산

public class Test10 {

public static void main(String[] args) {

// 1-2+3-4+5-6+7-8+9-10 연산하기_방법1

int num[] = new int[10];

int sum = 0;

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

num[i] = i + 1;

if (num[i] % 2 == 0) {

sum -= num[i];

} else {

sum += num[i];

}

}

System.out.println("1-2+3-4+5-6+7-8+9-10 = " + sum);

// 1-2+3-4+5-6+7-8+9-10 연산하기_방법2

int tot = 0;

for(int j=1;j<=10;j++){

tot = (j%2==0)? tot-j : tot+j;

}

System.out.println("1-2+3-4+5-6+7-8+9-10 = " + tot);

}

}



실행결과




1에서 100까지의 수중 3의 배수의 갯수

public class Test11 {

public static void main(String[] args) {

// 1에서 100까지의 수중 3의 배수의 갯수

int cnt = 0;

for (int i = 1; i <= 100; i++) {

if (i % 3 == 0) {

cnt++;

}

}

System.out.println("1에서 100의 숫자 중 3의 배수 갯수: " + cnt);

}

}



실행결과



두수를 입력받아 적은 수에서 큰수까지의 합 1 10

import java.util.Scanner;

public class Test12 {

public static void main(String[] args) {

//선언

int i, j, k, tot;

int max, min;

//변수 초기화

max = min = tot = 0;

//입력

Scanner sc = new Scanner(System.in);

System.out.print("두 수를 입력하세요.");

i = sc.nextInt();//30

j = sc.nextInt();//20

//연산

if (i > j) {

max = i;

min = j;

}

if (j > i) {

max = j;

min = i;

}

for (k = min; k <= max; k++) {

tot += k;

}

//출력

System.out.printf("%d에서 %d까지의 합 : %d", min, max, tot);

sc.close();

}

}


실행결과