728x90
1.ex01
package days09;
/**
* @author kimjieun
* @date 2023. 2. 7.-오전 10:10:19
* @subject 함수(메서드) + 매개변수 ->호출방법
* @content 1)Call By Name drawLine(); //함수호출부
* 매개변수 없이 함수만 출력하는것
* 2)Call By Value swap(x,y);
* 3)Call By Point ->java에는 없음
* 4)Call By Reference 참조형(배열, 클래스, 인터페이스)
*
*/
public class Ex01 {
public static void main(String[] args) {
int x=10, y=20; //지역변수
System.out.printf("x=%d, y=%d\n", x, y);
//x,y 두 기억공간의 값을 바꾸기(교환)-swap
/*
{
int temp=x;
x=y;
y=temp;
}
*/
//두 기억공간의 값을 바꾸는 swap()이라는 함수를 선언+호출
//1.기능 swap 2)매개변수 x,y 3)리턴값 void
swap(x,y);//함수 호출부 Call By Value
System.out.printf("x=%d, y=%d\n", x, y);
}//main
//왜? x,y값이 교환이 안된건지...?->
//함수선언부
public static void swap( int x, int y) { //지역변수
System.out.printf("swap before : x=%d, y=%d\n",x, y);
int temp=x;
x=y;
y=temp;
System.out.printf("swap after : x=%d, y=%d\n",x, y);
}
}//class
2.ex01_02
package days09;
/**
* @author kimjieun
* @date 2023. 2. 7.-오전 10:10:19
* @subject 함수(메서드) + 매개변수 ->호출방법
* @content 1)Call By Name drawLine(); //함수호출부
* 매개변수 없이 함수만 출력하는것
* 2)Call By Value swap(x,y);
* 3)Call By Point ->java에는 없음
* 4)Call By Reference 참조형(배열, 클래스, 인터페이스)
*
*/
public class Ex01_02 {
public static void main(String[] args) {
int [] m= {10,20};
System.out.printf("x=%d, y=%d\n", m[0], m[1]);
//The method swap(int, int) in the type Ex01_02 is not applicable for the arguments (int[])
swap(m); //Call By Reference
System.out.printf("x=%d, y=%d\n", m[0], m[1]);
}//main()
private static void swap(int[] m) {
//[10][20] [0*100번지]m main배열명 m
//0*100번지
int temp=m[0];
m[0]=m[1];
m[1]=temp;
// [0*100번지]m
}
public static void swap( int x, int y) { //지역변수
System.out.printf("swap before : x=%d, y=%d\n",x, y);
int temp=x;
x=y;
y=temp;
System.out.printf("swap after : x=%d, y=%d\n",x, y);
}
}//class
3.ex02
package days09;
/**
* @author kimjieun
* @date 2023. 2. 7.-오전 10:48:29
* @subject 재귀함수활용
* @content
*
*/
public class Ex02 {
public static void main(String[] args) {
int n=10;
//1~n까지의 합을 반환하는 함수
//int result=sum(n);
int result=recursiveSum(n);
System.out.println(result);
//System.out.print(sum(n));//sum(n)에는 return값이 돌아온 것
//recursiveSum(10)
//10 + recursiveSum(9)
// 9+recursiveSum(8)
// 8+recursiveSum(7)
// :
// 2+recursiveSum(1)
//10+9+8+7+6+5+4+3+2+1
}//main
//1~n 합 변환 함수 선언+(재귀함수)[시험2]X왜? 성능이 좋지 않음
//꼭 사용하는 곳? 트리구조 탐색, 윈도우 탐색기,
public static int recursiveSum(int n) {
if(n==1) return n;
else return n+recursiveSum(n-1);
}
private static int sum(int n) {
int result=0;
for (int i = 1; i <= n; i++) {
result+=i;
}
return result;
}
}
4.ex02_02
package days09;
/**
* @author kimjieun
* @date 2023. 2. 7.-오전 11:21:25
* @subject 재귀함수-일반함수, 팩토리얼 재귀함수
* @content 일반함수를 먼저 만들고, 팩토리얼 재귀 함수를 만들도록 하겠다.
*
*/
public class Ex02_02 {
public static void main(String[] args) {
/*
1. 팩토리얼(Factorial)==계승(0부터 양의 정수만 구할 수 있음)
정의)1에서 부터 양의 정수의 곱
n! = n*(n-1)*(n-2)*...*1
5! = 5*4*3*2*1
0! = 1(약속)
*/
int n=-5;
//int result = factorial(n);
int result = recursiveFactorial(n);
System.out.println(result==-1?"입력잘못!!":result);
}//main
//팩토리얼 재귀함수
public static int recursiveFactorial(int n) {
if(n>1)return n*recursiveFactorial(n-1);
else if(n==1) return n; //if(n==1||n==0) return 1;
else if(n==0) return 1;
//else System.out.println("입력이 잘못되었습니다."); else에 return값이 없어서 오류가 생김
else return -1;
}
public static int factorial(int n) { //factorial구하는 함수
int result=1;
for (int i = n; i >=1; i--) { //5 4 3 2 1
result*=i;
}
return result;
}
}
5.ex02_03
package days09;
/**
* @author kimjieun
* @date 2023. 2. 7.-오전 11:47:06
* @subject 재귀함수
* @content
*
*/
public class Ex02_03 {
public static void main(String[] args) {
/*
[합]
[팩토리얼]
[거듭제곱]==누승==멱==pow=power
2^3=2*2*2=8 //2의 세제곱
밑수를 지수만큼 반복해서 곱하는 것
지수==2 제곱
지수==3 세제곱
지수==1/2 제곱근
지수==1/3 세제곱근
*/
//int result=power(2,3);
double result=power(2,-3); //2^-3==2^1/3
System.out.println(result);
}//main
//절대값구하는 함수
private static int abs(int i) {
if(i<0) return i*-1;
else return i;
}
//[과제]누승을 구하는 재귀 함수를 선언
private static double recursivePower(int a, int n) {
return 0;
}
private static double power(int a, int n) {
int result = 1;
//int m=abs(n);
int m=Math.abs(n);
for(int i=1; i<=m; i++) {
result*=a;
}
return n<0?(double)1/result:result;
}
/*
private static double power(int a, int n) {
// 2 , 3 = 2 * 2 *2 -3
int result = 1;
if( n < 0 ) {
for (int i = 1; i <= -n; i++) { // 3
result *= a;
}
return (double)1/ result; // 0.125
}else {
for (int i = 1; i <= n; i++) {
result *= a;
}
return result;
}
}
*/
}//class
6.ex03
package days09;
import java.util.Random;
public class Ex03 {
public static void main(String[] args) {
//제어문+[***요구분석***]+코딩~
//로또 게임
//1~45중에서 6개 뽑기
//0.0<=doubleMath.random()<1.0
//0.0*45<=double Math.random()*45<1.0*45
//0<=(int)Math.random()*45<45
//0+1<=(int)Math.random()*45+1<45+1 ->//1<=(int)(Math.random()*45)+1<46
//java.util.Random 클래스
Random rnd =new Random();
for (int i = 1; i < 6; i++) {
System.out.println(rnd.nextInt(45)+1); //0<=int<46
}
/*
* 7
* 28 ***** 중복된 로또번호 발생.(문제점) Ex03_02.java 중복된 로또번호가 발생한다.
* 26
* 3
* 20
* 28 ***** 중복된 로또번호 발생.
*/
}
}
7.ex03_02
package days09;
import java.util.Random;
/**
* @author kimjieun
* @date 2023. 2. 7.-오후 2:06:01
* @subject 중복되지 않는 로또 번호 발생
* @content
*
*/
public class Ex03_02 {
public static void main(String[] args) {
//int i; 지역변수는 초기화를 해야 사용할 수 있다.
//System.out.println(i);
//배열은 초기화 하지 않아도 기본값으로 초기화 되어져 있다.
//int[]이기 때문에 int의 기본값인 0으로 초기화 되어져 있다.
//[0][0][0][0][0][0]
int [] lotto =new int[6];
//lotto 배열에 로또번호를 임의의 정수를 발생시켜서 채워넣는 코딩
fillLotto(lotto);
//배열을 출력하는 함수 선언->호출
//1)기능:배열 출력 displotto()
//2)매개변수:출력할 배열 int[] lotto
//3)리턴값:X void로 선언
displotto(lotto); //Call By Reference(참조형 레퍼런스)
}//main
public static void fillLotto(int[] lotto) {
//index
// ↓
// 0 1 2 3 4 5
//[0][0][0][0][0][0]
Random rnd = new Random();
int index=0; //배열에 채워넣기 위한 위치값
int n; //임의의 수(임의의 로또 번호)
n = rnd.nextInt(45)+1;
lotto[index++]=n;
//n=lotto 다시 임의의 로또번호 발생
do {
n = rnd.nextInt(45)+1;
} while (lotto[0]==n);
lotto[index++]=n;
do {
n = rnd.nextInt(45)+1;
} while (lotto[0]==n||lotto[1]==n);
lotto[index++]=n;
do {
n = rnd.nextInt(45)+1;
} while (lotto[0]==n||lotto[1]==n ||lotto[2]==n||lotto[3]==n);
lotto[index++]=n;
do {
n = rnd.nextInt(45)+1;
} while (lotto[0]==n||lotto[1]==n ||lotto[2]==n||lotto[3]==n||lotto[4]==0);
lotto[index++]=n;
do {
n = rnd.nextInt(45)+1;
} while (lotto[0]==n||lotto[1]==n ||lotto[2]==n||lotto[3]==n||lotto[4]==0||lotto[5]==0);
lotto[index++]=n;
/*
[32][21][45][0][0][0]
Random rnd = new Random();
int n = rnd.nextInt(45)+1; // 32
lotto[0] = n;
n = rnd.nextInt(45)+1; // 21
// 중복체크 X
lotto[1] = n;
n = rnd.nextInt(45)+1; // 45
// 중복체크 X
lotto[2] = n;
n = rnd.nextInt(45)+1; // 1 ~ 45
// 중복체크 X
lotto[3] = n;
n = rnd.nextInt(45)+1; // 1 ~ 45
// 중복체크 X
lotto[4] = n;
n = rnd.nextInt(45)+1; // 1 ~ 45
// 중복체크 X
lotto[5] = n;
*/
}//fillLotto
public static void displotto(int[] lotto) {
//배열명.length==배열크기
for(int i=0;i<lotto.length;i++) {
System.out.printf("[%d]", lotto[i]);
}//for i
System.out.println();//개행
}//displotto
}//class
8.ex03_03
package days09;
import java.util.Random;
/**
* @author kimjieun
* @date 2023. 2. 7.-오후 2:06:01
* @subject 중복되지 않는 로또 번호 발생
* @content
*
*/
public class Ex03_03 {
public static void main(String[] args) {
int [] lotto =new int[6];
fillLotto(lotto);
displotto(lotto);
}//main
public static void fillLotto(int[] lotto) {
Random rnd = new Random(); //Random()객체 생성
int index=0;
int n; //임의의 정수 저장 변수
n = rnd.nextInt(45)+1;
lotto[index++]=n;
boolean flag=false; //중복이 되면 flag=true이다.
while(index<=5) {
flag=false; //중복된 값이 있을때 다시 초기화 해주는 값이 필요하기 때문에
for (int i = 0; i < index; i++) {
if(lotto[i]==n) {
flag=true; //중복이 되는 것이 있으면 flag는 true로 설정
break;
}//if문
}//for문
System.out.println(n);
if( flag==false ) lotto[index++]=n; //if(!flag) lotto[index++]=n;
}//while
}//fillLotto
public static void displotto(int[] lotto) {
for(int i=0;i<lotto.length;i++) {
System.out.printf("[%d]", lotto[i]);
}
System.out.println();
}//displotto
}//class
/*
* do {
n = rnd.nextInt(45)+1;
} while (lotto[0]==n||lotto[1]==n ||lotto[2]==n||lotto[3]==n||lotto[4]==0||lotto[5]==0);
lotto[index++]=n;
*/
9.ex03_04
package days09;
import java.util.Random;
/**
* @author kimjieun
* @date 2023. 2. 7. - 오후 3:14:23
* @subject
* @content
*
*/
public class Ex03_04 {
public static void main(String[] args) {
int [] lotto = new int[6];
fillLotto( lotto );
dispLotto( lotto );
} // main
public static void fillLotto(int[] lotto) {
int index = 0 , n;
Random rnd = new Random();
// [0]
lotto[index] = rnd.nextInt(45)+1; //lotto[index++] = rnd.nextInt(45)+1;
index++; // 1
while( index <= 5 ) {
n = rnd.nextInt(45)+1;
if( !isDuplicateLotto( lotto, index, n ) ) {
lotto[index++] = n;
} // if
} // while
} // fillLotto
public static boolean isDuplicateLotto(int[] lotto, int index, int n) {
for (int i = 0; i < index; i++) {
if( lotto[i] == n) {
return true; // 중복 된다.
}
} // for
return false; // 중복 X
}
public static void dispLotto(int[] lotto) {
for (int i = 0; i < lotto.length; i++) {
System.out.printf("[%d]", lotto[i]);
}
System.out.println(); // 개행
}
} // class
10.ex03_05
package days09;
import java.util.Random;
import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
* @author kimjieun
* @date 2023. 2. 7.-오후 3:36:03
* @subject
* @content
*
*/
public class Ex03_05 {
public static void main(String[] args) {
//[람다식+스트림]
//->람다연산자
IntStream st = new Random().ints(1, 46);
Stream<String> lotto = st.distinct().limit(6).sorted().mapToObj(i -> i +", ");
lotto.forEach(System.out::print);
}
}
11.ex04
package days09;
import java.util.Random;
public class Ex04 {
public static void main(String[] args) {
//신용카드
// 1 2 3 4 랜덤하게 1~4정수를 발생.
String card ="7655-8988-9234-5677";
// -String [] '-'라는 구분자로 card문자열을 잘라내기.split()
// [1]="****"
// 배열의 문자열을 다시 조립(결합)해서 출력.
String[] cards = card.split("-") ;
// for (int i = 0; i < cards.length; i++) {
// System.out.printf("cards[%d]=%s\n", i, cards[i]);
// }
Random rnd = new Random();
int index = rnd.nextInt(4); //0,1,2,3
cards[index]="****";
// for (int i = 0; i < cards.length; i++) {
// System.out.printf("cards[%d]=%s\n", i, cards[i]);
// }
/*
card=String.format("%s-%s-%s-%s",cards[0], cards[1], cards[2], cards[3]);
System.out.println(card);
*/
String.join("-", cards);
System.out.println(card);
//결제할 때 마다 랜덤하게 특정위치 4자리 숫자가 ****로 출력(표시)
/*
System.out.println("7655-8988-****-5677");
System.out.println("7655-****-9234-5677");
System.out.println("****-8988-9234-5677");
System.out.println("7655-8988-9234-****");
*/
}//main
}//class
12.ex04_02
package days09;
public class Ex04_02 {
public static void main(String[] args) {
// [String 클래스의 메서드]
String card ="7655-8988-9234-5677";
//1.문자열의 길이:length()
System.out.println(card.length() );
//2.charAt(i)
for (int i = 0; i < card.length(); i++) {
System.out.printf("'%c'\n", card.charAt(i));
}
//3.String.format()
String name="hong";
int age=20;
String output = String.format("name=%s, age=%d", name, age);
System.out.println(output);
//4.String.matches()
String regex="\\d{3}";
System.out.println("100".matches(regex) );
//5.split()+trim()공백제거
String input="홍길동, 89, 90, 92";
String [] datas = input.split(",");
name = datas[0];
int kor=Integer.parseInt(datas[1].trim()); //"_98"->"98"
int eng=Integer.parseInt(datas[2].trim());
int math=Integer.parseInt(datas[3].trim());
//6.문자열 비교 equals().equalsignoreCase()
//"".equals();
//"".equalsIgnoreCase(null);
//7.join() 각배열을 요소를
//String join("조인기준이 될 문자", 문자열);
//8.Substring()
}//main
}//class
13.ex05
package days09;
import java.util.Random;
import javax.sql.rowset.Joinable;
public class Ex05 {
public static void main(String[] args) {
String rrn = "830412-1700001";
//1.System.out.println("830412-*******");
/*
String[] pass = rrn.split("-");
Random rnd = new Random();
int index = rnd.nextInt(2);
if(index==0) {
pass[index]="*******";
}else pass[index]="******";
for (int i = 0; i < pass.length; i++) {
System.out.printf("pass[%d]=%s\n", i, pass[i]);
}
String.join("-", pass);
System.out.println(rrn);
*/
System.out.println(rrn.split("-")[0]+"-*******");
//2.System.out.println("830412-2******");
System.out.println(rrn.split("-")[0]+"-"+rrn.charAt(7)+"******");
}
}
14.ex05_02
package days09;
import java.util.Random;
import javax.sql.rowset.Joinable;
/**
* @author kimjieun
* @date 2023. 2. 7.-오후 4:44:45
* @subject String.substring() 함수(메서드)
* @content 1.기능
* 2.매개변수
* 3.리턴값
*
*/
public class Ex05_02 {
public static void main(String[] args) {
String rrn = "830412-1700001";
//1.System.out.println("830412-*******");
//String rrn.substring(beginIndex);
//String rrn.substring(beginIndex, endIndex);
System.out.println(rrn.substring(0,7)+"*******");
//2.System.out.println("830412-2******");
System.out.println(rrn.substring(0,8)+"******");
}
}
15.ex06
package days09;
/**
* @author kimjieun
* @date 2023. 2. 7.-오후 5:02:54
* @subject
* @content
*
*/
public class Ex06 {
public static void main(String[] args) {
/*
* [주민등록번호] Resident registration number, RRN
* -생년월일
* -나이
* -성별
* -출생지역
* -검증
*
*/
/*
* [ 주민등록번호 ]
* 1. 개요 - 요구분석서
* ㄱ. 영어: Resident Registration Number, (RRN)
* ㄴ. 주민등록법에 의해 등록
* ㄷ. 대한민국에서 대한민국에 거주하는 모든 국민에게 발급
* ㄹ. 1968년 11월 21일부터 편리한 [간첩 식별 등의 목적]으로 주민등록증이 발급
* ㅁ. 1975년 3개편 ㄱㄴㄷㄹㅁㅂ - ㅅㅇㅈㅊㅋㅌㅍ 13자리.
* ㅅ. ‘ㄱㄴㄷㄹㅁㅂ’ 여섯 숫자는 생년월일 830412-1700001
* 19/18/20 03년 4월 12일
* ㅈ. ㅅ’은 성별 830412-[1 ㅅ]700001
* 출생년도(세기)
9 : 1800 ~ 1899년에 태어난 남성(현재 대부분 사망)
0 : 1800 ~ 1899년에 태어난 여성(현재 대부분 사망)
1 : 1900 ~ 1999년에 태어난 남성
2 : 1900 ~ 1999년에 태어난 여성
3 : 2000 ~ 2099년에 태어난 남성
4 : 2000 ~ 2099년에 태어난 여성
5 : 1900 ~ 1999년에 태어난 외국인 남성
6 : 1900 ~ 1999년에 태어난 외국인 여성
7 : 2000 ~ 2099년에 태어난 외국인 남성
8 : 2000 ~ 2099년에 태어난 외국인 여성
ㅊ. 'ㅇㅈㅊㅋ’는 출생등록지 830412-1[7000]01
1) oㅈ 출생지역
서울특별시 : 00~08
부산광역시 : 09~12
인천광역시 : 13~15
경기도 : 16~25
강원도 : 26~34
충청북도 : 35~39
대전광역시 : 40~41
충청남도 : 42~47
세종특별자치시 : 44, 96[10]
전라북도 : 48~54
전라남도 : 55~66
광주광역시 : 55, 56
대구광역시 : 67~69, 76
경상북도 : 70~75, 77~81
경상남도 : 82~84, 86~89, 90~92
울산광역시 : 85, 90
제주특별자치도 : 93~95
2) ㅊ ㅋ 주미센타 고유번호
ㅋ) ‘ㅌ’은 일련번호로, 그날 주민센터에서 출생신고를 한 순서
ㅌ) ‘ㅍ’은 주민등록번호에 오류가 없는지 확인하는 검증번호
ㅍ = 11-{(2×ㄱ+3×ㄴ+4×ㄷ+5×ㄹ+6×ㅁ+7×ㅂ+8×ㅅ+9×ㅇ+2×ㅈ+3×ㅊ+4×ㅋ+5×ㅌ) mod 11}
즉, 소괄호 안에 있는 것을 계산한 값을 11로 나눠서 나온 나머지를 11에서 뺀 값이 ㅍ이다. (단, 10은 0, 11은 1로 표기한다.)
* */
}
}
728x90
'쌍용국비교육 > java' 카테고리의 다른 글
days12 : java수업내용정리(2월 10일) (0) | 2023.02.10 |
---|---|
days10 : java수업내용정리(2월 8일) (0) | 2023.02.10 |
day08 : java수업내용정리(2월 6일) (0) | 2023.02.09 |
day07 : java수업내용정리(2월 3일) (0) | 2023.02.09 |
day06 : java수업내용정리(2월 2일) (0) | 2023.02.09 |