728x90
1.ex01)
package days08;
import java.util.Scanner;
/**
* @author kim
* @date 2023. 2. 6.-오전 11:39:11
* @subject
* @content 1.다시 게임 할껀지?(y/n)
* ㄴ반복처리해야할 부분이 어디인지 찾아야 함
* 2.입력값에 대한 유효성 검사
*
*/
public class Ex01 {
//[시험 1] 5분
public static void main(String[] args) { //days07-Ex06.java
Scanner scanner = new Scanner(System.in);
char con;
int com, user;
do {
com = (int)((Math.random())*3+1);
String regex="[1-3]";
String sUser;
boolean flag=false;
do {
System.out.print(">user 가위(1), 바위(2), 보(3) 선택??"); //a
sUser=scanner.next();
flag=sUser.matches(regex);
} while (!flag); //flag==false
user=Integer.parseInt(sUser);
System.out.printf("com=%d, user=%d\n",com, user);
switch (user-com) {
case 0:
System.out.println("무승부");
break;
case 1: case -2:
System.out.println("사용자 승리");
break;
case -1: case 2:
System.out.println("컴퓨터 승리");
break;
}//switch
//다시 게임할꺼니? y/n y를 입력했을 때 다시 게임 처리...반복 for/while/[do while]
//무조건 게임을 한번은 해야 하니까 do while문을 사용
System.out.print("\n\t다시 게임 할꺼니?");
con=scanner.next().charAt(0); //"y"->'y'
//con cannot be resolved to a variable
} while (con=='y' || con=='Y');
System.out.println("게임종료!!");
}//main
}//class
2.ex01_02)
package days08;
import java.util.Scanner;
public class Ex01_02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(">user 가위(1), 바위(2), 보(3) 선택??");
//scanner.nextInt() <- "a" 오류발생
//scanner.nextInt() <- 4 오류는 나지 x, 결과 컴퓨터 승리
String input=scanner.next();
//입력받은 문자열 속에 숫자가 아닌 문자가 있는지 체크...
//input.length()==1 문자열 길이가 1이상이면 안됨!왜냐면 1~3까지 1자리수니까
boolean flag=false;
if(input.length()==1) {
char ch = input.charAt(0);
if('0'<=ch && ch<='3') {
flag=true;
}
}//길이if
if (flag) {
System.out.println("유효한 입력값 O");
} else {
System.out.println("유효한 입력값 X");
}
}//main
}//class
3.ex01_03)
package days08;
import java.util.Scanner;
/**
* @author kim
* @date 2023. 2. 6.-오후 12:18:24
* @subject 정규표현식(Regular Expression) 사용
* @content regex
*/
public class Ex01_03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(">user 가위(1), 바위(2), 보(3) 선택??");// 1~3 정수
String input=scanner.next();
//String클래스 안에 matches(regex) 함수
//1. 일치하니 물어보는 함수
//2. regex 1~3 정수인지 체크하는 정규표현식
//3. boolean
//String regex="[abc]"; //a||b||c문자가 들어오면, input.matches(regex);참이 된다.
//String regex="[^abc]"; //a,b,를 제어한 모든 문자가 참 [^]는 아니다라는 기호임
//String regex="[123]"; //1, 2, 3만 참 12, 13, 123은 거짓!무조건 하나씩만 계산
String regex="[1-3]"; //[xx-xx] -부터 까지의 의미 [0123456789]==[0-9]
boolean flag = input.matches(regex);
System.out.println(flag);
}//main
}//class
4.ex02)
package days08;
import java.util.Scanner;
public class Ex02 {
public static void main(String[] args) {
//[문제]정규표현식(String.matches() 사용)
//등급을 나타내는 한 문자를 입력받아서 수, 우, 미, 양, 가일 경우에는
//올바른 입력, 잘못된 입력일 경우 do~while문을 사용해서 다시 등급을 입력받도록...
Scanner scanner = new Scanner(System.in);
System.out.print(">(수,우,미,양,가)등급은??");
String grade = scanner.next();
//if(grade.equals("수")||grade.equals("우")||grade.equals("미")||grade.equals("양")||grade.equals("가")
//char grade = scanner.next().charAt();
//if(grade=='수'||grade=='우'||grade=='미'||grade=='양'||grade=='가'
String regex="[수우미양가]";
System.out.println(grade.matches(regex) );
} //main
}//class
5.ex02_02)
package days08;
/**
* @author kim
* @date 2023. 2. 6.-오후 12:52:26
* @subject 정규표현식 예제
* @content
*
*/
public class Ex02_02 {
public static void main(String[] args) {
// 주민등록번호를 입력
//000000-0000000 총 14자리
//String rrn = "123456-1234567";
// \\d=[0-9]
//String regex="[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]";
//Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
//String regex="\\d\\d\\d\\d\\d\\d-\\d\\d\\d\\d\\d\\d\\d";
//X? 0,1
//X* 0~여러번
//X+ 1~여러번
//X{n} 정확히 n번
//X{n,} 적어도 n번
//X{n,m} n~m번
//String regex = "\\d{6}-\\d{7}"
//System.out.println(rrn.matches(regex) );
//[문제] 우편번호Zip-code 000-000 || 00000
//String regex = "\\d{3}-\\d{3}|\\d{5}"; //x|y regex에서 또는으로 쓰임
//System.out.println("123-123".matches(regex) ); //true
//System.out.println("12345".matches(regex) ); //true
//System.out.println("12a45".matches(regex) ); //false
//System.out.println("123-a45".matches(regex) ); //false
//System.out.println("123-3455".matches(regex) ); //false
//[문제]국어 점수(0<= <=100)의 유효성 검사를 정규표현식을 사용해서 처리
//String regex="\\d{1,3}";//숫자 1자리에서 3자리 까지는 참이다. //1~999
//String regex="\\d{1,2}|100"; ->01도 true로 나옴
String regex="[1-9]?\\d|100"; //첫번째는 1-9까지 무조건 와야 되고, \\d에는 0-9, 100은 100만
System.out.println("100".matches(regex) );
System.out.println("01".matches(regex) );
System.out.println("99".matches(regex) );
System.out.println("1a".matches(regex) );
System.out.println("101".matches(regex) );
System.out.println("-10".matches(regex) );
//[과제] 팀장 제출바람
//회원가입
//아이디:[ ][아이디 중복체크 버튼]
//비밀번호:[ ] 5~15, 대문자 1개 이상, 소문자 1개 이상, 숫자 1개 이상, 특수문자(#!@&)1개 이상
}//main
}//class
6.ex03)
package days08;
/**
* @author kim
* @date 2023. 2. 6.-오후 2:36:32
* @subject 메서드(함수) 설명
* @content
*
*/
public class Ex03 {
public static void main(String[] args) {
/*
1.메서드(함수) 정의? 프로그래밍에서 [반복되는 명령어들]을 찾아서 별도로 묶어서
필요할 때 마다 불러서 사용할 수 있도록 한 것.
2.프로그램의 구조화(간단해진다)->유지보수가 편리
3.반복되는 코딩 -> 구조화(재사용) 코딩
4.함수가 기본이 되는 프로그래밍 방식:구조적 프로그래밍 언어->C언어
5.객체가 기본이 되는 프로그래밍 방식:객체 지향적 프로그래밍 언어->Java, 대부분의 언어
oop
6.함수의 선언 형식
수정자(modifier)
[접근제어자][기타제어자] 리턴자료형 함수명([매개변수...]) --->함수원형==함수 프로토타입
{ --->{}부분을 함수 몸체{} 구현부
[return 리턴값;]
}
7.함수 3가지 이해
1)기능
2)매개변수
3)리턴값(리턴자료형)
8.ex) Ex03_02.java
*/
}//main
}//class
7.ex03_02)
package days08;
public class Ex03_02 {
public static void main(String[] args) {
//함수를 선언하면 호출하는 부분이 무조건 있어야 한다.
drawLine(); //함수 호출부
System.out.println("부서명 : 사원명 ");
drawLine(30);
System.out.println("영업부:이태규");
System.out.println("총무부:신희민");
System.out.println("생산부:박현주");
System.out.println("기획부:김예지");
System.out.println("기획부:하동호");
drawLine(15, '$');
}//main
//반드시 함수(메서드) 선언할 때는 클래스 안에 다른 함수 밖에...코딩해야함!!
//함수를 만들어 보기 함수의 이름을 drawLine으로 지정, 매개변수와 리턴값은 없다로 하겠음
//1)기능:라인(선)을 긋는 함수 drawLine
//2)매개변수:x
//3)리턴값:x리턴자료형 --->리턴자료형 void
public static void drawLine()
{
System.out.println("---------------");//line 선 긋는 코딩(50줄 코딩)
}
//1)기능:라인(선)을 긋는 함수 drawLine
//2)매개변수:x
//3)리턴값:x리턴자료형 --->리턴자료형 void
//매개변수의 타입 또는 갯수가 다른 동일한 함수를 중복선언할 수 있다.
//중복함수(Overloading) 오버로딩
//function Overloading
//Duplicate method drawLine() in type Ex03_02(함수명을 중복사용했습니다.)
public static void drawLine(int n) //함수 선언부
{
for(int i=1; i<=n; i++){ //line 선 긋는 코딩(50줄 코딩)
System.out.print("-");
}
System.out.println();
}
//내가 원하는 스타일로 원하는 길이 만큼 선을 그을 수 있는 함수
public static void drawLine(int n, char style) //함수 선언부
{
for(int i=1; i<=n; i++){
System.out.print(style);
}
System.out.println();
}
}//class
8.ex03_03)
package days08;
import java.util.Scanner;
public class Ex03_03 {
public static void main(String[] args) {
int x, y;
Scanner scanner=new Scanner(System.in);
System.out.print(">두 정수 x, y 입력?");
x=scanner.nextInt();
y=scanner.nextInt();
//두 정수의 합을 처리해서 출력...
//int z=x+y;
int z=sum(x, y);
System.out.printf("%d +%d = %d\n", x, y, z);
}//main
//함수 선언
//1.기능:두 정수의 합을 구해서 반환하는 함수
//2.매개변수:두 정수 int, int
//3.리턴값:합, 리턴자료형 int
public static int sum(int x, int y) {
//int result = x+y;
//return result;
return x+y; //리턴문 수식을 사용할 수 있다.
}
}//class
9.ex03_04)
package days08;
import java.util.Scanner;
public class Ex03_04 {
public static void main(String[] args) {
//국어, 영어, 수학 ->총점, 평균 ->출력
//각각의 점수를 입력받아서 유효성 검사(0~100)을 마친 후->
// 반환하는 getScore()함수 선언->호출
int kor, eng, math;
kor=getScore("국어"); //String 과목명을 집어넣으면
eng=getScore("영어");
math=getScore("수학");
int tot=kor+eng+math;
double avg=(double)tot/3;
//출력함수
printScore(kor,eng,math,tot,avg);
}//main
private static void printScore(int kor, int eng, int math, int tot, double avg) {
System.out.printf("kor=%d, eng=%d, math=%d, tot=%d, avg=%.2f\n",
kor, eng, math, tot, avg);
}
private static int getScore(String subject) { //매개변수 String값이 필요하다
Scanner scanner = new Scanner(System.in);
String score;
String scoreRegex="[1-9]?\\d|100";
do {
System.out.print(subject+"점수를 입력하세요:");
score = scanner.next();
} while (!score.matches(scoreRegex));
return Integer.parseInt(score);
}
}//class
10.ex04)
package days08;
import java.util.Scanner;
/**
* @author kimjieun
* @date 2023. 2. 6.-오후 3:51:11
* @subject 함수 선언 연습 -> 함수 호출 사용
* @content
*
*/
public class Ex04 {
public static void main(String[] args) {
// 연도를 입력받아서 윤년/평년을 체크해서 출력
/*
1.년도를 입력받아서 반환하는 함수 만들기
2.윤년? 오차를 보정하기 위해 삽입하는 날이나 주, 달이 들어가는 해
ㄴ삽입하는 달을 정하는 방법을 치윤법
why? 오차가 생기고->생기는 오차에 따라서 치윤법(오차보정)을 하는가?
윤년:한국법=그레고리력?현 인류사회에서 가장 널리 쓰이기에
(윤년=2월 29일)이 있는 해
2월 28X->29일까지 있는 해를 윤년.
[그레고리력]-오차보정 2월 29일 이해
평년?
지구 자전주기와 공전주기 맞지 않다(자연현상)
공전주기(1년) 365.2422일 0.25
공전주기(1년) 365.2422일 0.25
공전주기(1년) 365.2422일 0.25
공전주기(1년) 365.2422일 4년 마다 1루의 오차가 발생 + 4년 마다 2월 29일로 처리하는 달력(율리우스력)
1년 365.2425일 [오차 0.003일] 보정
설명) 400년 97번의 윤년이 발생한다. 2월 29일
400년 동안 4의 배수년도 100=>윤년 +3년
100의 배수년도 4번=>평년 1년
400의 배수년도 1번=>윤년
[치운법]
1.서력 기원 연수가 4로 나누어 떨어지는 해는 우선 윤년이라고 하고,
2.그 중에서 100으로 나누어 떨어지는 해는 평년으로 하며,
3.다만 400으로 나누어 떨어지는 해는 다시 윤년으로 정하였다.
년도를 매개변수 윤녕/평년을 반환하는 함수
3.출력
*/
int year=getYear();
//함수
//1.기능:윤년, 평년인지 체크해주는 함수 isLeapYear()
//2.매개변수: 체크할 년도 int year;
//3.리턴값: 윤년(true), 평년(False) 리턴 자료형 boolean
boolean cheak=isLeapYear(year);
if (cheak) {
System.out.println("윤년(leap year)");
}else {
System.out.println("평년(common year)");
}
/*
if (isLeapYear(year)) {
System.out.println("윤년(leap year)");
}else {
System.out.println("평년(common year)");
}
*/
}//main
public static boolean isLeapYear(int year) {
/*
* [치운법]
1.서력 기원 연수가 4로 나누어 떨어지는 해는 우선 윤년이라고 하고,year%4==0
2.그 중에서 100으로 나누어 떨어지는 해는 평년으로 하며, year%100==0
3.다만 400으로 나누어 떨어지는 해는 다시 윤년으로 정하였다. year%400==0
return year%4==0; 율리우스 역
&&>||
*/
return year%4==0&&year%100!=0||year%400==0; //그레고리오력
}
private static int getYear() {
Scanner scanner = new Scanner(System.in);
String year;
String yearRegex="\\d+"; // \\d정수를 나타냄, \\d+ 정수가 1자리 이상
do {
System.out.print("연도를 입력하세요:");
year = scanner.next();
} while (!year.matches(yearRegex));
return Integer.parseInt(year);
}
}//class
11.ex04_02)
package days08;
public class Ex04_02 {
public static void main(String[] args) {
//윤년을 출력하고 싶다.
for(int i=1500; i<=2023; i++) {
//재사용
if(Ex04.isLeapYear(i) ) System.out.print("윤년 - ");
System.out.println(i);
}
}//main
}//class
12.ex05)
package days08;
/**
* @author kimjieun
* @date 2023. 2. 6.-오후 4:53:14
* @subject 재귀 호출 함수(recursive call)
* @content
*
*/
public class Ex05 {
public static void main(String[] args) {
//재귀[호출]함수? 함수 안에서 자기 자신을 다시 호출하는 함수를 "재귀 [호출] 함수"
disp(); //함수호출부분
//재귀 함수를 사용하는 이유? -내일부터...
}//main
//예외처리 설명할 때 예외(exception), error(에러) 차이점
//~ [Exception]
//StackOverflowError
//스택
//1.기능 2.매개변수 3.리턴값
public static void disp() { //함수 선언 부분
System.out.println("disp()메서드 호출됨...");
disp(); //함수 호출 부분
}
}//class
13.test01)
package days08;
public class Test01 {
public static void main(String[] args) {
for (int i = 1; i<=3; i++) {
for (int j = 1; j <=3-i; j++) {
System.out.print("_");
}
for (int j = 1; j <= 2*i-1; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
14.test02)
package days08;
import java.io.IOException;
/**
* @author kim
* @date 2023. 2. 6.-오전 10:09:48
* @subject
* @content 5라인을 출력한 후 엔터를 치면 다음 5라인 출력
* 1)5라인이 출력되었는지 체크 할 수 있다. -lineNumber
* 2)for문이 더 이상 반복되지 않고 멈춰야 한다.-방법?
* System.in.read(), scanner.next(), br readLine()
*
*/
public class Test02 {
public static void main(String[] args) throws IOException {
int lineNumber=1;
for(int i=0; i<256; i++) {
if(i%15==0) {
System.out.printf("%d :", lineNumber++); //라인번호 1증가
}System.out.printf("[%c]", (char)i);
if(i%15==14) {
System.out.println(); //개행
//5라인 출력-일시정지
//if(i%75==74) {
if(lineNumber%5==1) { //첫번째만 1~4까지만 출력됨? WHY?~~디버깅 해서 확인ㄱㄱ
System.out.print("\t 계속하려면 엔터 치세요");
System.in.read();
System.in.skip(System.in.available());
}
}
}
}//main
}//class
/*
* int lineNumber=1;
for(int i=0; i<256; i++) {
if(i%15==0) {
System.out.printf("%d :", lineNumber); //라인번호 1증가
}System.out.printf("[%c]", (char)i);
if(i%15==14) {
System.out.println(); //개행
//5라인 출력-일시정지
//if(i%75==74) {
if(lineNumber%5==1) { //첫번째만 1~4까지만 출력됨? WHY?~~디버깅 해서 확인ㄱㄱ
System.out.print("\t 계속하려면 엔터 치세요");
System.in.read();
System.in.skip(System.in.available());
}
lineNumber++;
}
}
*/
15.test03)
package days08;
import java.util.Arrays;
public class Test03 {
public static void main(String[] args) {
int[] m=new int[20];
for (int i = 0; i < m.length; i++) {
m[i]=(int)((Math.random()*146)+5);
}
System.out.println(Arrays.toString(m));
int max, min;
max=min=m[0];
for(int i=1;i<m.length;i++) {
if(max<m[i]) max=m[i];
else if(min>m[i]) min = m[i];
}
System.out.printf("max=%d, min=%d\n", max, min);
}//main
}//class
16.test04)
package days08;
public class Test04 {
public static void main(String[] args) {
int sum=0; int i=1;
boolean sw=false;//스위치 변수
while (i<=10) {
if(i%2==0) {
System.out.printf("%d+", i);
sum-=i;
} else {
System.out.printf("%d-", i);
sum+=i;
}
i++;
}//while
System.out.printf("=%d", sum);
}//main
}//class
/*
int sum=0; int i=1;
boolean sw=false;//스위치 변수
while (i<=10) {
if(sw) {
System.out.printf("%d+", i);
sum-=i;
sw=false;
} else { //sw=false; else문 먼저 수행, 끝나면 sw=true니까 i++해서 if문으로 감
System.out.printf("%d-", i);
sum+=i;
sw=true;
}
//sum+=sw?-i:i;
// sw=!sw;
i++;
}//while
System.out.printf("=%d", sum); //System.out.printf("\b=%d\n", sum);
*/
17.test05)
package days08;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//[과제] 팀장 제출바람
//회원가입
//아이디:[ ][아이디 중복체크 버튼] //정규표현식
//비밀번호:[ ] 5~15, 대문자 1개 이상, 소문자 1개 이상, 숫자 1개 이상, 특수문자(#!@&)1개 이상
//^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{5,15}
System.out.println("회원가입");
System.out.println("---------------");
Scanner scanner = new Scanner(System.in);
System.out.print(">로그인(아이디):");
String id=scanner.next();
System.out.println(id);
System.out.print(">비밀번호는:");
String password = scanner.next();
String regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{5,15}";
System.out.println(password.matches(regex) );
}
}
728x90
'쌍용국비교육 > java' 카테고리의 다른 글
days10 : java수업내용정리(2월 8일) (0) | 2023.02.10 |
---|---|
day09 : java수업내용정리(2월 7일) (0) | 2023.02.10 |
day07 : java수업내용정리(2월 3일) (0) | 2023.02.09 |
day06 : java수업내용정리(2월 2일) (0) | 2023.02.09 |
days11 : java수업내용정리(2월 9일) (0) | 2023.02.09 |