728x90

1.ex01)

package days13;

import java.util.Random;

public class Ex01 {

	public static void main(String[] args) {
		// 9:35 제출 ~ 
		String [] names = new String[30];
		int [] tots = new int[30];
		double [] avgs = new double[30];
		int [] ranks = new int[30];

		System.out.println(  getAlphabetName(3) );
		System.out.println(  getAlphabetName(5) );
		System.out.println(  getAlphabetName(10) );

	} // main

	public static String getAlphabetName(int length) {
		// 성씨  128 개  44032	~ 55203  임의의 정수 -> char  한글 한 문자
		char [] nameArr = new char[length];
		Random rnd = new Random();
		// 대문자   65~90
		//    91~96 X
		// 소문자   97~122
		int index = 0;
		while( index < length ) {		
			int code =  ( rnd.nextInt('z' - 'A' + 1) + 'A' );
			if(  'A' <= code && code <='Z'  ||  'a' <= code && code <='z' ) {
				nameArr[index++] = (char)code;
			}
		}

		// char [] -> String 변환
		String name = new String( nameArr );
		return name;
	}

	private static int getTotalScore() {		
		return     (int)( Math.random()*301 ) ;  // 0 <=     < 301
	}

} // class

 

2.ex02)

package days13;

import java.util.Arrays;

/**
 * @author kimjieun
 * @date 2023. 2. 13.-오전 9:57:14
 * @subject 배열 + 제어문 연습
 * @content
 */
public class Ex02 {
	public static void main(String[] args) {
		int [] m =new int [30];
		//1. 0<= <=9 임의의 정수를 채워넣는 코딩
		//2. 배열 값을 확인하는 코딩
		for(int i=0; i<m.length; i++) {
			//m[i]=0~9;
			m[i]=(int)(Math.random()*10);
		}
		System.out.println(Arrays.toString(m));

		int [] counter = new int [10];
		for(int i=0; i<m.length; i++) { //30번 반복
			counter[m[i]]++; //0~9 m[i]를 counter의 index 값으로 사용을 하겠다.
		}
		
		for(int i=0; i<counter.length; i++) {
			System.out.printf("%d의 갯수는 : %s\n",i, counter[i]);
		}
		
		//[문제] m 배열에 0~9 정수의 갯수를 파악하고자 한다.
		//0:5개
		//1:2개
		//:
		//8:3개
		//9:0개
		
	} //end of main
}//end of class
/*강사님 코드 
 * public class Ex02 {

	public static void main(String[] args) {
		// 10:08 수업 시작~ 
		int [] m = new int[30];
		// 1.   0<=   <=9 임의의 정수를 채워넣는 코딩.
		// 2.  배열 확인.
		for (int i = 0; i < m.length; i++) {
			m[i] =  (int)(Math.random()*10 );   
		}
		System.out.println(  Arrays.toString(m)  );
		
		// [6, 0, 9, 2, 9, 7, 9, 6, 3, 2, 3, 6, 0, 6, 8, 2, 3, 4, 2, 7, 6, 1, 5, 2, 3, 9, 0, 1, 4, 1]
		
		//   0   1     2    3   4   5   6     7    8   9             인덱스(첨자값)
 		// [0][0][0][0][0][0][0][0][0][0]		  counts 배열 선언
		int [] counts = new int[10];
		
		for (int i = 0; i < m.length; i++) {  // 30번 반복
			  // m 배열의 0~29 값을 읽어와서
			  //int index =  m[i] ;
			  //counts[  index   ]++  ; // 0~9
			counts[  m[i]  ]++  ; // 0~9
		}
		
		for (int i = 0; i < counts.length; i++) {
			System.out.printf("%d : %d개 \n", i, counts[i] );
		}
				
		
		// [문제]  m 배열에   0~9 정수의 갯수를 파악하고자 한다..
		// i=0   j=0,1,2,3,4,5~29  cnt++     System.out.printf("%d : %d개 \n", i, cnt );
		// i=1   j=0,1,2,3,4,5~29
		// i=2   j=0,1,2,3,4,5~29
		// :
		// i=9   j=0,1,2,3,4,5~29
		//  10 * 30 == 300 번 반복 처리 ..
		
		int cnt ;
		for (int i = 0; i <= 9 ; i++) {                      // 행 갯수
			cnt = 0;
			for (int j = 0; j < m.length; j++) {       // 열갯수
				if( i == m[j])  cnt++;
			}
			System.out.printf("%d : %d개 \n", i, cnt );
		}
		
		
		
		// 0 : 5개
		int cnt_0 = 0;
		for (int i = 0; i < m.length; i++) {
			 if(   0 == m[i] )  cnt_0++;    
		}
		System.out.printf("0 : %d개 \n", cnt_0);
		
		// 1  : 2개
	    int cnt_1 = 0;
		for (int i = 0; i < m.length; i++) {
			 if(   1 == m[i] )  cnt_1++;    
		}
		System.out.printf("1 : %d개 \n", cnt_1);
		//      :
		//  8: 3개
		// 9 : 0개
		int cnt_9 = 0;
		for (int i = 0; i < m.length; i++) {
			 if(   9== m[i] )  cnt_9++;    
		}
		System.out.printf("9 : %d개 \n", cnt_9);
		
		

	}  // main

} // class
*/

 

3.ex03)

package days13;
/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오전 10:41:59
 * @subject 다차원 배열 개념 이해 ***
 * @content
 * 1. 다차원 배열? 2차원 이상의 배열을 다차원 배열이라고 한다.
 *				   2차원, 3차원, 4차원, 5차원...메모리가 허용하는한 n차원 배열까지 사용가능
 *				   2차원 배열을 가장 많이 씀, 수업에서는 3차원 배열까지
 * 2. 1차원 배열 - 열(지금까지 사용했던 배열은 모두 1차원 배열이다.)
 * 	  2차원 배열 - 행, 열
 * 	  3차원 배열 - 면, 행, 열
 */
public class Ex03 {

	public static void main(String[] args) {
		//[1학년] 3개의 반이 있다고 할때 국어점수를 저장하고 싶다.
		// 1반에 30명의 학생이 있다. -> 우리는 국어점수를 저장하고 싶다.
		//int [] kors = new int[30];
		//3반이 있다고 할때
		//int [] kors = new int[3*30]; //int[90]
		
		//[질문] 2반 16번 학생의 국어 점수는 ?
		//kors[29] == 1반 학생의 마지막 번호
		//kors[29+16] ;//==kors[45]
		//[질문] 3반 16번 학생의 국어 점수는 ?
		//kors[29+30+16] == kors[75]
		
		//3행 30열 - 2차원 배열로 선언
		int [][] kors = new int[3][30];
		//[질문] 2반 16번 학생의 국어 점수는 ?
		//kors[1][15];
		//[질문] 3반 5번 학생의 국어점수는?
		//kors[2][4];
		
		//3학년
		//각 학년마다 5반
		//각 반마다 30명 학생
		//학생들의 국어 점수를 저장/관리하고 싶다.
		
		//1차원 배열 선언
		//int [] kors = new int[450] //3*5*30 ->30명의 학생이 5반 그리고 3학년 까지 있으므로
		//[질문] 3학년 1반 24번 학생의 국어점수?
				
		//kors[???] //조건이 많을 수록 구하기가 어려워진다.
		//2차원 배열 선언
		//3차원 배열 선언
		//[3면 5행 30열]
		//int [][][] kors = new int[3][5][30];
		//[질문] 2학년 4반 24번 학생의 국어점수?
		//kors[1][3][23];
		
		

	}

}

 

4.ex03_02)

package days13;
/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오전 11:09:28
 * @subject 다차원 배열 - 열
 * @content
 */
public class Ex03_02 {

	public static void main(String[] args) {
		//int [] m = new int[8];
		
		//배열 초기화
		//int [] m = new int[] {1,2, 3, 4, 5, 6, 7, 8};
		int [] m = {1,2, 3, 4, 5, 6, 7, 8};
		
		//1. 1차원 배열의 크기 - 배열명.length
		System.out.println(m.length); //8
		
		disp(m); //출력하는 함수
		

	}//end of main

	private static void disp(int[] m) {
		for (int i = 0; i < m.length; i++) {
			System.out.printf("m[%d]=%d, i, m[i]");
		}
		System.out.println();
	}

}

 

5.ex03_03)

package days13;
/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오전 11:26:24
 * @subject 2차원 배열
 * @content - 다차원 배열은 배열의 배열이다.
 */
public class Ex03_03 {

	public static void main(String[] args) {
		//int [][] m = new int[4][2]; //4행에 2열
		/*
		m[0][0]=1; m[0][1]=2; 
		m[1][0]=3; m[1][1]=4;
		m[2][0]=5; m[2][1]=6;
		m[3][0]=7; m[3][1]=8;
		*/
		
		//(시험3) 2차원 배열의 초기화 하는 코딩을 하세요.(4행 2짜리)
		int [][] m = {
						{1,2},
						{3,4},
						{5,6},
						{7,8}		
					 };
		
		//2차원 배열 배열명.length == 행의 갯수
		System.out.println(m.length);//4
		//그럼 열의 갯수는 어떻게 가져올수 있을까?
		System.out.println(m[0].length); //1열
		System.out.println(m[1].length); //2열
		System.out.println(m[2].length); //3열
		System.out.println(m[3].length); //4열
		
		disp(m);

	}
	
	//(시험1) 2, 3 다차원 배열 구조 (그림)
	//(시험2) 2, 3 다차원 배열 출력하는 함수 구현.
	private static void disp(int[][] m) {
		//행, 열
		for (int i = 0; i < m.length; i++) { //행 갯수
			for (int j = 0; j < m[i].length; j++) { //열 갯수
				System.out.printf("m[%d][%d]=%d ", i, j, m[i][j]);
			}
			System.out.println();
		}
		
	}

	

}

 

6.ex03_04)

package days13;
/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오전 11:43:08
 * @subject 3차원 배열
 * @content
 */
public class Ex03_04 {

	public static void main(String[] args) {
		//int [] m = new int[8];
		//int [][] m = new int[4][2];
		
		//					  2면3행4열
		//int [][][] m = new int[2][3][4];
		
		//3차원 배열 초기화
		int [][][] m = {
						{	
							{1,2,3,4},
							{5,6,7,8},
							{9,10,11,12},
						},
						{
							{1,2,3,4},
							{5,6,7,8},
							{9,10,11,12},
						}
						};
		
		disp(m); //3차원 배열을 출력하는 함수를 선언+출
		
		System.out.println(m.length); //3차원 배열일때는 면의 갯수를 나타냄
		
		System.out.println(m[0].length); //3행 갯수			0면의 행 갯수 3		
		System.out.println(m[1].length); //3행 갯수 		1면의 행 갯수 3
		
		System.out.println(m[0][0].length);	//0면 0행의 열 갯수 4
		System.out.println(m[0][1].length); //0면 1행의 열 갯수 4
		System.out.println(m[0][2].length); //0면 2행의 열 갯수 4
		
		System.out.println(m[1][0].length);
		System.out.println(m[1][1].length);
		System.out.println(m[1][2].length);
		

	}//end of main

	private static void disp(int[][][] m) {
		for (int i = 0; i < m.length; i++) { //면 갯수
			System.out.printf("[%d]면\n", i);			
			for (int j = 0; j < m[i].length; j++) { //행 갯수
				for (int k = 0; k < m[i][j].length; k++) { //열 갯수
					System.out.printf("m[%d][%d][%d]=%d\t", i, j, k, m[i][j][k]);
				}//for k
				System.out.println();
			}//for j
			System.out.println();
			
		}//for i
		
	}//end of disp()

}//end of class

 

7.ex04)

package days13;

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;

/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오전 11:58:06
 * @subject 검색(search) == 탐색 
 * @content - 같은 성질을 갖는 항목의 집합 중에서 특성을 갖는 항목을 찾아내는 것.
 * 			1)순차 검색(Search)
 * 
 */
public class Ex04 {

	public static void main(String[] args) {
		// 정렬-버블정렬, 선택정렬
		//앞으로 코딩할때 정렬이 필요하다면 Arrays 클래스의 sort()메서드 사용하자.
		//Arrays.sort();
		//Collections.sort(null); 컬렉션 정렬 
		/*
		//[순차검색]
		int [] m = new int [30];
		//1~10 임의의 정수
		for (int i = 0; i < m.length; i++) {
			m[i]= (int)(Math.random()*21); //0~20
		}
		System.out.println(Arrays.toString(m));
		 */
		int [] m = {0, 7, 16, 15, 11, 19, 15, 13, 10, 8, 1, 9, 13, 18, 20, 1, 19, 4, 9, 11, 9, 5, 1, 8, 2, 11, 5, 2, 19, 14};
		System.out.println(Arrays.toString(m));
		Scanner scanner = new Scanner(System.in);

		System.out.print(">배열에서 찾을 정수 입력?");
		int n = scanner.nextInt();

		//sequenceSearch(m,n);
		
		//[문제] m배열 속에서 찾을 n의 모든 위치(index)를 모두 출력하는 코딩을 하세요.
		int [] result = sequenceSearch(m,n); 
		System.out.println(Arrays.toString(result));
		for(int i=0; i<result.length && result[i]!=-1; i++) {
			//if(result[i]==-1)break;
			System.out.println(result[i]+"위치에 있습니다.");
		}


		/*
		//순차검색(sequenceSearch)해서 찾은 위치를 반환하는 함수(메서드) 선언
		//1. 기능
		//2. 매개변수 : int [], int
		//3. 리턴값(리턴자료형): 찾은 위치, 	못찾으면 -1(그냥 못찾으면 -1을 주겠다고 내가 정한것임)
		int index = sequenceSearch(m,n); //찾은 위치값을 index라고 하겠다.
		if (index==-1) {
			System.out.println("찾는 정수는 없습니다.");
		}else {
			System.out.println(index + "위치에 있습니다.");
		}
		 */

	}//end of main
	
	//리턴자료형 int[] 선언.
	private static int[] sequenceSearch(int[] m, int n) {
		//몇군데에서 찾을지 모르니까 추가되어야함.
		int [] sm = new int [m.length]; //[0][0]...[0]
		Arrays.fill(sm, -1); //[-1][-1][-1]...[-1] -1로 초기화해서 배열을 채워넣겠다. 
		
		int index=0;
		for (int i = 0; i < m.length; i++) {
			if(m[i]==n) {
				sm[index++]=i;
			}

		}
		return sm;
	}
	/*
	private static void sequenceSearch(int[] m, int n) {
		boolean flag=false;
		for (int i = 0; i < m.length; i++) {
			if(m[i]==n) {
				flag=true;
				System.out.println(i+"위치에 있습니다.");	
			}

		}
		if(!flag) {
			System.out.println("찾는 정수가 없습니다."); 
		}
	}//sequenceSearch
	*/
	//오버로딩(중복함수) X 
	//자료형이 같거나, 매개변수가 똑같으면 함수명이 같은 것을 사용할 수 없다.(중복선언불가)
	//리턴자료형은 매개변수와 관계없음(중복함수)에 영향을 미치지 않는다.
	//오직 매개변수의 갯수와 타입만 영향을 미침.
	/*
	private static int sequenceSearch(int[] m, int n) {
		for (int i = 0; i < m.length; i++) {
			if(m[i]==n) return i;	//찾은위치(index)을 반환	
		}
		return -1; //못 찾았다.(n이 없다.)
	}//end of sequenceSearch
	 */

}//end of class

 

8.ex04_02)

package days13;

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;

/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오전 11:58:06
 * @subject 검색(search) == 탐색 
 * @content - 같은 성질을 갖는 항목의 집합 중에서 특성을 갖는 항목을 찾아내는 것.
 * 			1)순차 검색(Search)
 * 			2)이진 검색(binary search)
 * 
 */
public class Ex04_02 {

	public static void main(String[] args) {
		
		int [] m = {0, 7, 16, 15, 11, 19, 15, 13, 10, 8, 1, 9, 13, 18, 20, 1, 19, 4, 9, 11, 9, 5, 1, 8, 2, 11, 5, 2, 19, 14};
		System.out.println(Arrays.toString(m));
		Scanner scanner = new Scanner(System.in);

		System.out.print(">배열에서 찾을 정수 입력?");
		int n = scanner.nextInt();

		int idx=-1;
		int fromIndex=0;
		
		while((idx=sequenceSearch(m,n,fromIndex)) !=-1) {
			System.out.println(idx + "찾았다.");
			fromIndex=idx+1;
		}
		
		/*
		idx = sequenceSearch(m, n, 0);
		System.out.println(idx+"찾았다.");
		
		fromIndex=idx+1;
		idx = sequenceSearch(m, n, 0);
		System.out.println(idx+"찾았다.");
		
		fromIndex=idx+1;
		idx = sequenceSearch(m, n, 0);
		System.out.println(idx+"찾았다.");
		
		:
		찾은 위치 값이 -1이 될 때 까지 반복...
		*/


	}//end of main
	//sequenceSearch함수에 fromIndex를 추가한 오버로딩 함수
	private static int sequenceSearch(int[] m, int n, int fromIndex) { //fromindex는 찾기 시작할 위치
		for (int i = fromIndex; i < m.length; i++) {
			if(m[i]==n) {
				return i; //찾는게 있으면 그 놈의 위치값을 찾고
			}
		}
		return -1; //없다면 -1로 돌아가라
	}
	
	private static int sequenceSearch(int[] m, int n) {
		for (int i = 0; i < m.length; i++) {
			if(m[i]==n) {
				return i; //찾는게 있으면 그 놈의 위치값을 찾고
			}
		}
		return -1; //없다면 -1로 돌아가라
	}

}//end of class

 

9.ex05)

package days13;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오후 2:14:15
 * @subject 배열+제어문 실습 예제
 * @content *** 클래스 이론 수업 ***
 * 			검색
 * 			1)순차검색
 * 			2)이진검색(바이너리검색)
 */
public class Ex05 {

	public static void main(String[] args) {
		 // int Arrays.binarySearch( m, n)
		/*
		int [] m = new int[50];		
		int idx = 0; //0번째 부터 채울껀데...
		while( idx < m.length ) {
			int n = (int)( Math.random()*200); // 0~199
			if(  ! isDuplicateM(m, n, idx)   ) {
				m[idx++] = n; //중복이 되지 않으면 m[idx++]=n;을 찍겠다
			}
		} 
		Arrays.sort(m);  // 배열 정렬
		*/
		
		// 이진검색 필수 조건 : 정렬( 오름차순 정렬 )
		int [] m = { 0, 4, 5, 15, 20, 21, 22, 24, 25, 28, 29, 30, 32, 33, 40, 43, 46, 47, 48, 58, 62, 63, 71, 76, 
		   		 86, 91, 94, 99, 111, 116, 128, 135, 137, 139, 142, 145, 146, 150, 151, 160, 161, 166, 168, 
				 169, 172, 181, 184, 185, 191, 198 };
		System.out.println(   Arrays.toString(m)   );
		
		Scanner scanner = new Scanner(System.in);
			
		System.out.print("> 배열에서 찾을 정수 입력 ? ");
		int n = scanner.nextInt();
		
		int index =  binarySearch( m , n );
	
		if ( index == -1 ) {
			System.out.println("찾는 정수는 없습니다.");
		} else {
			System.out.println( index  + " 위치에 있습니다.");
		}

	} // main
	
	private static int binarySearch(int[] m, int n) {
		/*  2:48 풀이~~~ 
		 1. 배열의  bot/top 변수 저장
		 2. mid = (bot+top)/2
		 3. 
		               n== m[mid]   같으면 찾았기에  return mid
		               n   >  m[mid]  새로운 bot = mid +1
		               n   <  m[mid]  새로운 top = mid - 1
		  4.   위의 3번 코딩을 반복문을 사용해서 반복하다..    bot > top 이럴 때는 반복문을 빠져나와야 겠따.             
		 */
		int bot = 0, top = m.length-1 , mid;
		int count = 0;
		while( bot <= top) {
			mid = (bot+top)/2; 
			count++;
			if( n== m[mid]) 
			{
				System.out.println("> 찾은 횟수: "+ count);
				return mid;
			}
			else if(n   >  m[mid]) bot = mid +1;
			else if(n   <  m[mid]) top = mid - 1;
		}
		System.out.println("> 못 찾은 횟수: "+ count);
		return -1;
	}

	// 중복이 되면 true를 반환하는 메서드 
	public static boolean isDuplicateM(  int [] m, int n, int index ){
		for(int i=0; i< index ; i++){
			if(   m[i] == n  ) return  true;
		}
		return false;
	} 

} // class

 

10.ex06)

package days13;

import java.util.Arrays;

/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오후 2:56:24
 * @subject 배열+제어문 연습 예제
 * @content
 */
public class Ex06 {

	public static void main(String[] args) {
		// 2차원 배열->1차원 배열 변환
		//[4행 3열]
		int [][] m= {
						{1,2,3},
						{4,5,6},
						{7,8,9},
						{10,11,12},
					};
		//int [] n =new int[행*열];
		//int [] n = new int[12];
		int rowCount = m.length; //행 갯수
		int colCount = m[0].length;
		//int [] n = new int[rowCount*colCount];
		int [] n = new int[m.length*m[0].length];
		
		/*
		int k=0;
		for (int i = 0; i < m.length; i++) { //4행 갯수
			for (int j = 0; j < m[i].length; j++, k++) { //3열 갯수
				n[k]=m[i][j]; //for문에 k++없애고, n[k++]=m[i][j]라고 써도된다.
			}
		}//for i 
		System.out.println(Arrays.toString(n));
		*/
		//k라는 변수를 사용하지 않아도, i, j 변수만 사용해서도 처리할 수 있다.
		//i  j   k
		//0  0   0
		//0  1   1
		//0  2   2
		//1  1   3
		//열 갯수*i+j == k
		int colLength=m[0].length;
		for (int i = 0; i < m.length; i++) { //4행 갯수
			for (int j = 0; j < m[i].length; j++) { //3열 갯수
				n[colLength*i+j]=m[i][j];
			}
		}//for i 
		System.out.println(Arrays.toString(n));
	}

}

 

11.ex06_02)

package days13;
/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오후 3:23:17
 * @subject
 * @content
 */
public class Ex06_02 {

	public static void main(String[] args) {
		// 1차원 -> 2차원 배열변환
		int [] m = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
		int [][] n = new int [6][2];
		//코딩~
		/*
		 * i는 0,1,2,3,4,...,11까지 돈다 m[12]
		 * 0 n[행][열] 0 0
		 * 1	0	1
		 * 2	1	0
		 * 3	1	1	i/열갯수	i%행갯수
		 * 4	2	0
		 * 5	2	1
		 * :
		 * 11
		 */
		int 열갯수=n[0].length; //2
		for (int i = 0; i < m.length; i++) {
			n[i/열갯수][i%열갯수]=m[i];
		}
		
		//2차원 배열 출력
		for(int i=0; i<n.length; i++) {
			for (int j = 0; j < n[i].length; j++) {
				System.out.printf("[%d]", n[i][j]);
			}
			System.out.println();
		}

	}

}

 

12.ex07)

package days13;

import java.util.Random;
import java.util.Scanner;

/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오후 3:33:26
 * @subject 다차원 배열 예
 * @content
 */
public class Ex07 {
	public static void main(String[] args) {
		//days09.Ex03_04.java 로또 게임
		int [][] lottos; //2차원배열 행의 부분이 게임을 몇번 했는//

		Scanner scanner = new Scanner(System.in);
		System.out.print(">게임 횟수 입력?");
		int gameNumber = scanner.nextInt();

		// [행][열]이므로 로또는 번호 6개 이므로 열자리는 6개로 지정 행자리에 입력받은 숫자만큼!
		lottos = new int[gameNumber][6]; //3
		//fillLotto(lottos, gameNumber); 내가 푼 방법 매개변수를 주어주기
		fillLotto(lottos);
		dispLotto(lottos);


	}//end of main

	public static void fillLotto(int[][] lottos) {
		for (int i = 0; i < lottos.length; i++) { //게임 횟수 행 만큼 로또 번호를 반
			int idx=0,n;
			Random rnd = new Random();
			while(idx<=5) {
				n=rnd.nextInt(45)+1;
				if(!isDuplicateLotto(lottos,idx,n,i)) {
					lottos[i][idx++]=n;
				}//if
			}//while
		}
	}
	/*
	public static void fillLotto(int[][] lottos, int gameNumber) {
		int count = 0;
		Random rnd = new Random();

		while( count < gameNumber){

			int idx=0;
			while(idx <6){  
				int n = (int)(rnd.nextInt(45)+1);
				if( !isDuplicateLotto(lottos,n,idx,count)){
					lottos[count][idx] = n;
					idx++;
				}
			}
			count++;
		}		
	}//fillLotto
	 */
	public static boolean isDuplicateLotto(int[][] lottos, int idx,int n, int count) {

		for(int i=0; i<idx; i++){
			if(lottos[count][i] == n)
				return true;
		}
		return false;
	}

	//2차원 배열을 매개변수로 사용하는 예제
	private static void dispLotto(int[][] lottos) {
		for (int i = 0; i < lottos.length; i++) {
			System.out.printf("[%d 게임]\t\t", i+1);
			for (int j = 0; j < lottos[i].length; j++) {
				System.out.printf("[%d]", lottos[i][j]);
			}//for j
			System.out.println();
		}//for i

	}

	public static void fillLottoOne(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( !isDuplicateLottoOne(  lotto, index, n  ) ) {
				lotto[index++] = n;
			} // if
		} // while 
	}//fillLottoOne

	public static void dispLottoOne(int[] lotto) {
		for (int i = 0; i < lotto.length; i++) {
			System.out.printf("[%d]", lotto[i]);
		}
		System.out.println(); // 개행
	}

	public static boolean isDuplicateLottoOne(int[] lotto, int index, int n) {
		for (int i = 0; i < index; i++) {
			if( lotto[i] == n) {
				return true;  // 중복 된다.
			}
		} // for
		return false; // 중복 X
	}
}

 

13.ex07_02

package days13;

import java.util.Random;
import java.util.Scanner;

/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오후 3:33:26
 * @subject 다차원 배열 예
 * @content
 */
public class Ex07_02 {
	public static void main(String[] args) {
		//days09.Ex03_04.java 로또 게임
		int [][] lottos; //2차원배열 행의 부분이 게임을 몇번 했는//

		Scanner scanner = new Scanner(System.in);
		System.out.print(">게임 횟수 입력?");
		int gameNumber = scanner.nextInt();

		// [행][열]이므로 로또는 번호 6개 이므로 열자리는 6개로 지정 행자리에 입력받은 숫자만큼!
		lottos = new int[gameNumber][6]; //3
		
		fillLotto(lottos);
		dispLotto(lottos);


	}//end of main

	
	//다차원 배열은 배열의 배열이다.
	private static void fillLotto(int[][] lottos) {
		for (int i = 0; i < lottos.length; i++) {
			fillLottoOne(lottos[i]);
		}
		
	}


	//2차원 배열을 매개변수로 사용하는 예제
	private static void dispLotto(int[][] lottos) {
		for (int i = 0; i < lottos.length; i++) {
			System.out.printf("[%d 게임]\t\t", i+1);
			dispLottoOne(lottos[i]);
		}//for i
	}

	public static void fillLottoOne(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( !isDuplicateLottoOne(  lotto, index, n  ) ) {
				lotto[index++] = n;
			} // if
		} // while 
	}//fillLottoOne

	public static void dispLottoOne(int[] lotto) {
		for (int i = 0; i < lotto.length; i++) {
			System.out.printf("[%d]", lotto[i]);
		}
		System.out.println(); // 개행
	}

	public static boolean isDuplicateLottoOne(int[] lotto, int index, int n) {
		for (int i = 0; i < index; i++) {
			if( lotto[i] == n) {
				return true;  // 중복 된다.
			}
		} // for
		return false; // 중복 X
	}
}

 

14.ex08)

package days13;

import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

/**
 * 
 * @author kimjieun
 * @date 2023. 2. 13.-오후 4:30:18
 * @subject 3차원 배열 예제 
 * @content (참고) days12.Ex04.java 파일 참조
 */
public class Ex08 {

	public static void main(String[] args) throws IOException {
		//세 반에 30명의 학생의 이름, 국어, 영어, 수학, 총점, 평균, 등수를 구하는 문제를 했었었다.
		//String [] names = new String[3*30];//2반 17번 학생의 이,국,영,수,총,평,등 입력/조회
		String [][] names = new String[3][30]; //행(반) 열(학생)	names[1][16]
		double [][] avgs = new double[3][30]; //행(반) 열(학생)		avgs[1][16]
		
		//국, 영, 수, 총, 등수, 전체등수
		int [][][] infos = new int[3][30][6]; 
		//3면(1반) 30행(학생수) 0열(국) 1열(영) 2열(수) 3열(총) 4열(등) 5열(전체등수)
		
		//입력받은 학생수
		//int cnt_1=0, int cnt_2=0, int cnt_3=0;
		int [] cnts = new int [3]; //1반 cnts[0], 2반 cnts[1], 3반 cnts[2]
		char con = 'y';
		
		//입력한 학생 정보를 저장할 변수
		String name;
		int kor, eng, mat, tot, rank, wrank;
		double avg;

		Scanner scanner = new Scanner(System.in);
		
		int ban; //1,2,3 입력받은 반의 정보를 저장할 변수
		
		do {
			//1. 반? 1/2/3 ->0/1/2
			System.out.print(">1.반 입력? ");
			ban = scanner.nextInt();
			//2. 이름,국,영,수,총점, 등수, 전교등수
			System.out.printf(">2.%d반의 [%d]번 학생 이름, 국, 영, 수를 입력하세요.", ban, cnts[ban-1]+1); //번호는 1부터 줘야해서 cnts[ban-1]+1이다.
			name = days12.Ex04.getName();
			kor=days12.Ex04.getScore();
			eng=days12.Ex04.getScore();
			mat=days12.Ex04.getScore();
			//총점, 평균, 등수, 전체등수
			tot=kor+eng+mat;
			avg=(double)tot/3;
			
			rank=1;
			wrank=1;
			
			//3.각 배열 채워넣는 코딩
			//names[행:반][열:학생]=name;
			names[ban-1][cnts[ban-1]] = name;
			avgs[ban-1][cnts[ban-1]] = avg;
			/*
			infos[면(반)][행(학생)][0]=국어
			infos[면(반)][행(학생)][1]=영어
			infos[면(반)][행(학생)][2]=수학
			infos[면(반)][행(학생)][3]=총점
			infos[면(반)][행(학생)][4]=등수
			infos[면(반)][행(학생)][5]=전교
			*/
			
			infos[ban-1][cnts[ban-1]][0]=kor;
			infos[ban-1][cnts[ban-1]][1]=eng;
			infos[ban-1][cnts[ban-1]][2]=mat;
			infos[ban-1][cnts[ban-1]][3]=tot;
			infos[ban-1][cnts[ban-1]][4]=rank;
			infos[ban-1][cnts[ban-1]][5]=wrank;
			//4. 그 해당 반의 입력받은 학생수 1증가
			cnts[ban-1]++; //배열의 인덱스는 1반이면 0 입력받은 반이 3이라면 cnts[2]값이므로 cnts[ban-1]이다.
			
			//5.입력계속? y,Y
			System.out.print(">학생 입력 계속?");
			con=(char)(System.in.read());
			System.in.skip(System.in.available());
		} while (Character.toUpperCase(con)=='Y');
		
		//출력하기 전에[반등수/전교등수 처리하는 코딩 추가]-직접구현.		
		
		
		//cnts 배열이 각 반의 입력받은 학생수를 저장하는 배열
		int totalCnt = cnts[0]+cnts[1]+cnts[2];
		System.out.printf("[전체 학생 수 : %d 명]\n", totalCnt);
		for (int i = 0; i < cnts.length; i++) { //반
			System.out.printf("[%d]반 입력받은 학생 수 : %d명\n",i+1, cnts[i]);
			//[그 반의 학생정보를 출력]
			for (int j = 0; j < cnts[i]; j++) { 
				System.out.printf("[%d]\t%s\t%d\t%d\t%d\t%d\t%.2f\t%d\t%d\n",
						j+1, names[i][j], infos[i][j][0], infos[i][j][1],infos[i][j][2], infos[i][j][3], avgs[i][j], infos[i][j][4], infos[i][j][5]); 
			}//for j
			
			
		}//for i

		
	}//main
	

}//class
728x90