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
'쌍용국비교육 > java' 카테고리의 다른 글
[days24] Vector 컬렉션 클래스 (0) | 2023.02.28 |
---|---|
days12 : java수업내용정리(2월 10일) (0) | 2023.02.10 |
days10 : java수업내용정리(2월 8일) (0) | 2023.02.10 |
day09 : java수업내용정리(2월 7일) (0) | 2023.02.10 |
day08 : java수업내용정리(2월 6일) (0) | 2023.02.09 |