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