728x90
반응형
오전에는 먼저 배열+제어문 활용을 마저 하고 오후부터 method 기초부터 배우기 시작했다
양이 꽤 많아서 같이 포스팅하는건 효율이 떨어질 것 같아서 프로그램 만든 코드들 부터 복습해보고자 한다.
그리고 중복없는 숫자 만드는거 복습 안해주셨다... ㄱ-
따로 해야할덧.......
일단 달력만드는 로직부터 복습 고
import java.util.Scanner;
public class 달력만들기연습 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.print("년도를 입력하세요:");
int year = scan.nextInt();
System.out.print("달을 입력하세요:");
int month = scan.nextInt();
System.out.println();
System.out.printf("%d년 %d월의 달력", year, month);
System.out.println();
String [] weekStr = {"일", "월", "화", "수", "목", "금", "토"};
for(String i : weekStr)
{
System.out.printf("%s \t",i);
}
System.out.println();
/*
*
* 1. 1년 1월 1일부터 전년도 12월 31일까지 날짜의 합
* 2. 바로 전달까지의 합
* 3. +1 (1일부터 달력을 출력해야하기 때문)
*
*/
// 1. 전년도 12월 31일까지의 합
int total;
total=365*(year-1)+(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];
}
// +1
total++;
// 이번달 1일이 무슨 요일인지 구해주기, 0이면 일요일 1이면 월요일...
int week=total%7;
// 출력...
// 1일부터 이번달 날짜 만큼 for문 돌려주기
// 대신 1일 이면 시작하는 요일에 맞춰 공백을 줘야함 (if문 처리)
// 그 다음에 날짜 출력
// week를 하나씩 더해줌 (요일 +1)
// 요일이 6이 (토요일)이 넘어가면 0(일요일)로 다시 셋팅해주고, 한줄 띄어줌
// 그 다음날 (2일)부터 다시 for문 돌림->출력
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("%d\t", i);
week++;
if(week>6)
{
week=0;
System.out.println();
}
}
}
}
하 진짜... 윤달 계산까진 어떻게 대충 외워서 알겠는데
요일 맞춰서 출력하는 저 로직이 너무... 헷갈렸다.
그래서 진짜 한줄 한줄 보고 생각하면서 썼다.
지금은 이해했는데 하루 지나면 또 까먹을 것 같은 느낌이 온다... 일단 미래의 내가 보라고 친절히 한줄한줄 적어놨다
2020년이 윤달이었던걸 기억하고 2020년 2월을 찍어봤는데 29일이 안나와서 또 엄청 당황했다
알고보니 lastDay 로직에 오타가 하나 있어서 또 급히 수정했다
안찍어봤으면 절대 몰랐을듯
아 숫자 게임까지 해야하는데 벌써 힘 다썼다.....
숫자야구게임이 더 쉬웠음
import java.util.Scanner;
public class 숫자야구게임연습 {
public static void main(String[] args) {
int[] com = {3, 6, 9};
int[] user = new int [3];
Scanner scan=new Scanner(System.in);
//비교
while(true)
{
System.out.print("\n세자리 정수를 입력하세요:");
int input=scan.nextInt();
if(input>999||input<100) {
System.out.println("세자리 정수를 입력하라니까.. 또 말 안듣죠?");
continue;
}
user[0]=input/100;
user[1]=(input%100)/10;
user[2]=input%10;
if(user[0]==user[1]||user[1]==user[2]||user[2]==user[0])
{
System.out.println("중복된 수는 입력할 수 없습니다.");
continue;
}
System.out.print("님이 입력한 값은");
for(int i : user)
{
System.out.print(i);
}
System.out.println("입니다.");
int s=0;
int b=0;
for(int i =0; i<3; i++)
{
for(int j =0; j<user.length; j++)
{
if(com[i]==user[j])
{
if(i==j)
s++;
else
b++;
}
}
}
//힌트 출력
System.out.printf("Input Number: %d Result: %dS-%dB", input, s, b);
if(s==3)
{
System.out.println("\n-End-");
break;
}
}
}
}
예외처리 해주는것 말고는 크으으게 헷갈리는건 없는데
역시 2중 for문 돌려주는게 좀 헷갈린다
com[i], user[j] 중에 같은게 있으면 이라는 조건문을 걸어서
자리수가 같지 않아도 b처리를 해줄 수 있게 만드는것만 조심해서 만들면 될 것 같다.
이제 끗
메소드 복습은 내일 한꺼번에 할란다...
728x90
반응형
'programming > Gukbi' 카테고리의 다른 글
국비 교육 12일차 - Class 변수 (0) | 2021.01.11 |
---|---|
국비 교육 11일차 - Method (0) | 2021.01.10 |
국비 교육 9일차 - 배열 활용 (2) | 2021.01.06 |
국비 교육 8일차 - 배열 (0) | 2021.01.05 |
국비 교육 7일차 - 2차 for문 (0) | 2021.01.04 |