アカデミー11日目-Java
2021.04.12
カレンダーの作成
public class Ex23_Calendar {
public static void main(String[] args) throws NumberFormatException, IOException {
//변수 선언
//- 보통 변수의 초기값은 해당 변수가 가질 수 없는 값으로 하는 것이 좋다. -> 실수 하더라도 피해가 적거나 발견하기 쉬워서
//0년은 없기 때문에 0으로, 월은 0부터 시작하기 때문에 -1을 준다.
int year = 0, month = -1;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("달력만들기");
System.out.print("년 : ");
year = Integer.parseInt(reader.readLine());
System.out.print("월 : ");
month = Integer.parseInt(reader.readLine());
output(year,month);
//2021년 1~12월 달력 출력
//for(int i=1; i<=12; i++) {
// output(2021, i);
//}
//System.out.println();
} //main
public static void output(int year, int month) {
int lastDay = 0; //마지막 일
int day_of_week = 0; //요일
//해당년월에 마지막일이 몇일로 끝나는지?
lastDay = getLastDay(year, month);
//해당 월의 1일이 무슨 요일?
day_of_week = getDayOfWeek(year, month);
// System.out.println(day_of_week);
//달력 출력하기
System.out.println();
System.out.println("===================================================");
System.out.printf(" %d년 %d월\n", year, month);
System.out.println("===================================================");
System.out.println("[일]\t[월]\t[화]\t[수]\t[목]\t[금]\t[토]");
//1일의 요일을 맞추기 위해서 ..
for(int i=0;i<day_of_week;i++) {
System.out.print("\t");
}
//날짜 출력
for (int i=1; i<=lastDay; i++) {
System.out.printf("%3d\t", i);
//토요일마다 개행
//3월(1) -> 6
//4월(4) -> 3
//5월(6) -> 1
//8월(0) -> 7
//고민?????????? 에러.....
if (i % 7 == (7 - day_of_week)) {
System.out.println();
}
}
}//output
public static int getDayOfWeek(int year, int month) {
//서기 1년 1월 1일 ~ year년 month월 1일까지 총 며칠이 흘렀는지?
//누적변수
int totalDays = 0;
//1.1.1 ~ 2021.4.1
//1.1.1 ~ 2020.12.31 -> 1년 ~ 2020년 x 365
//윤년인지 확인
for (int i=1; i<year; i++) {//전년도까지
if(isLeafYear(i)) { //i가 윤년인지 검사
totalDays+= 366; //윤년일때
} else {
totalDays+= 365; //아닐때
}
}
//2021.1.1 ~ 2021.3.31
for(int i=1; i<month; i++) { //전월까지
totalDays += getLastDay(year, i);
}
//2021.4.1 ~ 2021.4.1
totalDays++;
return totalDays % 7; //1(월) ~ 7(일)
}
// getLastDay() 마지막일 구하는 메소드
public static int getLastDay(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31; //return문: 메소드를 종료하는 역할(break랑 유사) + 값 반환
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return isLeafYear(year) ? 29 : 28;
//default:
//return 0;
}
return 0; //맞는 값을 넣지 않았을 경우 0을 return함.
}//getLastDay
//윤년이면 true, 평년이면 false로 반환하는 메소드
//is~로 시작하는 메소드 : 이거 ~맞아~틀려하는 메소드
public static boolean isLeafYear(int year) {
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0) {
return true; //윤년
} else {
return false; //평년
}
} else {
return true; //윤년
}
} else {
return false; //평년
}
}
}
複文
オーバーラップ
//2중 for문
//- 바깥쪽 회전수 x 안쪽 회전수
for(int i=0; i<10; i++) { //대회전
for(int j=0; j<10; j++) { //소회전
//System.out.println("실행문"); //실행횟수..?-> 100번
System.out.printf("i: %d, j: %d\n", i, j); //루프변수 확인 ->
}
}
//1중 for문 -> 똑같이 100회를 반복하지만 루프변수의 활용이 다르다.
for(int i=0; i<100; i++) {
//System.out.println("실행코드");
System.out.printf("i: %d\n", i); //루프변수 확인
}
//A.시계(시침, 초침)
for (int i=0; i<24; i++) { //시침
for (int j=0; j<60; j++) { //분침 (시침이 1바퀴돌때 분침이 60번 돈다.)
System.out.printf("%02d:%02d\n", i, j);
}
//B. 강의실(6개)+ 학생(30명)
// -> 전부 체크
for(int i=1; i<=6; i++) { //강의실
for(int j=1; j<=30; j++) { //학생
System.out.printf("%d강의실 %d번 학생\n", i, j);
}
}
//C. 아파트 110동 -> 15층 -> 층마다 5세대(1호~5호)
for(int i=1; i<=15; i++) { //층
for(int j=1; j<=5; j ++) { //세대(호)
System.out.printf("%d층 %d호 ",i, j);
}
}
// 3중 for문 10x10x10 = 1000회 실행
//for -> 1~3중 for문을 많이 씀.
for (int i = 0; i < 10; i++) {
for (int j = 0; j<10; j++) {
for (int k = 0; k < 10; k++) {
System.out.println("실행문");
}
}
}
//시분초
for (int i=0; i<24; i++) { //시침
for (int j=0; j<60; j++) { //분침
for(int k=0; k<60; k++) {
System.out.printf("%02d:%02d:%02d\n", i, j, k);
}
}
}
// 2중 for문 -> 구구단(2단~9단)
for (int dan=2; dan<10; dan++) {
//int dan = 2;
for (int i=1; i<10; i++) {
System.out.printf("%d x %d = %2d\n", dan, i, dan * i);
}
System.out.println();
}
//1. 루프변수 제어
//2. 분기문 개입
for (int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
if(i == 5) {
//자신이 직접 포함된 제어문만 탈출한다.(j for문 탈출)
break;
//continue;
}
System.out.printf("i: %d, j: %d\n", i, j);
}
}
//별찍기 -> 루프 연습
for(int i=0; i<10; i++) { //행 출력 (증감)
for(int j=0; j<10; j++) { //열 출력(증감)
System.out.print("*");
}
System.out.println();
}
for(int i=0; i<5; i++) {
for(int j=0; j<=i; j++) {
System.out.print("*");
}
System.out.println();
}
for(int i=0; i<5; i++) {
for(int j=i; j<5; j++) {
System.out.print("*");
}
System.out.println();
}
for(int i=0; i<5; i++) {
for(int j=0; j<(4-i); j++) {
System.out.print(" ");
}
for(int j=0; j<=i; j++) {
System.out.print("*");
}
System.out.println();
}
while
While(조건식){
실행문;
}
//숫자 1~10까지 출력
//for문
for(int i=1; i<=10; i++) {
System.out.println(i);
}
System.out.println();
//while문
int n = 1; //초기식
while(n<=10) { //조건식
System.out.println(n);
n++; //증감식
}
//누적값 1000이 넘어가면 중단
//for문
int sum = 0;
for(int i=0; ; i++) {
sum+=i;
if(sum>=1000) {
System.out.println(i);
break;
}
}
System.out.println(sum);
//while문
sum = 0;
n = 1; //루프 변수 역할
while(true) {
sum += n;
if(sum >= 1000) {
break;
}
n++;
}
System.out.println(sum);
//while문
sum = 0;
n = 1; //루프 변수 역할
while(sum < 1000) {
sum += n;
n++;
}
System.out.println(sum);
//for문
sum = 0;
for(int i=0; sum<=1000; i++) {
sum+=i;
}
System.out.println(sum);
do while
//while문
//선조건 후실행
while (조건식){
실행코드;
}
//do while문
//선실행 후조건 -> 무조건 1회 실행 보장
do {
실행코드;
} while (조건식);
int n = 20;
do {
System.out.println(n);
n++;
} while (n <= 10);
String
JAvaは
文字列の長さ
String txt = "";
txt = "ABCDEF";
System.out.println(txt.length()); //6글자
System.out.println("ABCDEF".length()); //6글자 -> 상수도 대입 가능
txt = "123 홍길동 !@#"; // -> 숫자, 한글, 영어, 특수문자, 공백 -> 모두 1글자 취급
System.out.println(txt.length()); //11
System.out.println((int)' '); //스페이스(32)
System.out.println((int)' '); // 탭(9)
System.out.println((int)'\t');
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("문장 입력 : ");
txt = reader.readLine();
//요구사항) 사용자 입력한 문장이 몇글자로?
System.out.printf("입력한 문장은 총 %d개의 문자로 구성되어있습니다.\n", txt.length());
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//길이
// - 유효성 검사
//회원가입 > 이름 입력 > [유효성검사] > DB 저장(10글자제한)
// -> 20입력 -> 에러 발생
//이름 입력 > 2~5자 이내
System.out.print("이름 입력: ");
String name = reader.readLine();
if(name.length() >= 2 && name.length() <= 5) {
System.out.println("환영합니다.");
} else {
System.out.println("이름은 2~5자 이내로 입력하세요.");
}
//올바른 이름을 입력할 때까지 위의 작업을 반복해보자.
String name ="";
while (true) {
System.out.println("이름 : ");
name = reader.readLine();
if(name.length() >= 2 && name.length() <= 5) {
break;
} else {
System.out.println("이름은 2~5자 이내로 입력하세요.");
}
} //while
System.out.println("회원가입을 진행합니다.");
文字列抽出-char charAt(int index)
String txt = "홍길동"; //0,1,2 + 3(문자열의 길이)
char c = txt.charAt(3);
System.out.println(c);
//문자열의 모든 문자를 추출하기
//java.lang.StringIndexOutOfBoundsException 에러 조심.
for(int i=1; i<=10; i++) {
//10회전(빈도 낮음)
}
for (int i=0; i<10; i++) {
//10회전(빈도 높음★)
}
for(int i=0; i<txt.length(); i++) {
System.out.println(txt.charAt(i));
}
// 유효성 검사
//- 이름 입력 > 2~5자 이내 + 한글만 입력했는지
//영소문자로만 구성
String id = "test";
for (int i = 0; i < id.length(); i++) {
char c = id.charAt(i);
int code = (int) c;
// 유효성 검사 -> 잘못된 경우를 찾는 것이 좋다. -> 코드짜기 더 편함
if (code < 97 || code > 122) {
System.out.println("잘못된 문자가 있습니다.");
break; // 잘못된 문자가 발견되면 더이상 유효성 검사가 필요없다.
}
}
System.out.println("종료");
Reference
この問題について(アカデミー11日目-Java), 我々は、より多くの情報をここで見つけました https://velog.io/@hi-dae-in/국비-학원-11일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol