8일차 - 배열(1차원)

|

주요내용 : 배열(1차원)

package ArrayS;

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


/* 배열(array) : 상당히 많은 자료들의 집합.
 * 1, 2, 3 차원 배열이 존재합니다.
 * 1차원[ ](점의 집합) : 소량의 데이터, 행과 열이 같은 개념.
 * 2차원[ ][ ]선의 집합) : 관리비, 다량의 데이터, 행과 열이 따로 존재.
 * 3차원[ ][ ][ ](면의 집합 ; GIS, 지리공간시스템구축) : 대단위 데이터... etc / 면,행,열이 존재
 * 4차원(시간과 공간)
 * 
 * ☆Java는 행중심 언어이다.☆
 * 
 */

public class arraySample1 {
	
	
//문제] 다음 데이터에서 오름차순과 내림차순을 구하여 출력하는 프로그램 작성.
//오름차순 : Ascending, 1 2 3 4 5 6
//내림차순 : Descending,  6 5 4 3 2 1
static int jumsu[] = {100, 90, 95, 100, 78, 95, 56};
private static void print_Ascending(int[] su) {
			System.out.print("[Ascending sort = ");
		for(int i=0; i<jumsu.length; i++) {
			System.out.print(jumsu[i] + " ");
		}
		System.out.println("]");
		}

private static void print_Descending(int[] su) {
			System.out.print("[Descending sort = ");
		for(int i=jumsu.length - 1; i > -1; i--) {
			System.out.print(jumsu[i] + " ");
		}
		System.out.println("]");
		}


//문제] 컴퓨터와 가위, 바위, 보 게임을 합니다.
//1차원 배열을 이용하여 win, lose, draw 표현을 하고, 계속하려면 y, 아니면 n을 입력합니다. + 몇승몇패 표시?
	
		Scanner input = new Scanner(System.in);
		String ComHand[] = {"가위", "바위", "보"};
		String Com;
		String MyHand;
		String YN;

		public arraySample1() {

		}

		public String reStart() {
			System.out.println("계속 하시겠습니까? y/n");
			YN = input.next();
			return YN;
		}

		public void input() {
			System.out.println("가위, 바위, 보 중에서 입력해 주세요.");
			MyHand = input.next();
		}

		public void rad() {
			Random ran = new Random();
			Com = ComHand[ran.nextInt(3)];
		}

		public void answer() {

			if (MyHand.equals("가위")) {
				if (Com.equals("가위")) {
					System.out.println("==");
				} else if (Com.equals("바위")) {
							System.out.println("ㅠㅠ");
				} else if (Com.equals("보")) {
							System.out.println("^^");
				}
			} else if (MyHand.equals("바위")) {
				if (Com.equals("가위")) {
					System.out.println("^^");
				} else if (Com.equals("바위")) {
							System.out.println("==");
				} else if (Com.equals("보")) {
							System.out.println("ㅠㅠ");
				}
			} else if (MyHand.equals("보")) {
				if (Com.equals("가위")) {
					System.out.println("ㅠㅠ");
				} else if (Com.equals("바위")) {
							System.out.println("^^");
				} else if (Com.equals("보")) {
							System.out.println("==");
				}
			} else {
				System.out.println("잘못 입력하셨습니다.");
			}
		}

	public static void main(String[] args) {
		
		//1차원 배열의 초기화
		//1.
		String[] arr1 = new String[]{"data1", "data2", "data3", "data4", "data5"};
		String data1 = arr1[0];
		String data2 = arr1[1];
		String data3 = arr1[2];
		String data4 = arr1[3];
		String data5 = arr1[4];
		int len = arr1.length;
		System.out.println("data의 수량은 = " + len); //5
		
		//2.
		String[] sungjuk = new String[5];
		sungjuk[0] = "10";
		sungjuk[1] = "20";
		sungjuk[2] = "30";
		sungjuk[3] = "40";
		sungjuk[4] = "50";
		int len2 = sungjuk.length;
		System.out.println("data의 수량은 = " + len2); //5
		
		//3. 출력
		if(sungjuk != null) { // null이 아니면 읽고, null이면 읽을 필요없다. 
			for(int i=0; i<sungjuk.length; i++) {
				System.out.println((i+1) + "번째 배열의 값은 = " + sungjuk[i]);
			}
		}
		
		//4. 연산
		int num[] = new int[5];
		int total = 0;
		
		num[0]=100; //data input
		num[1]=200;
		num[2]=300;
		num[3]=400;
		num[4]=500;
		
		total = num[0] + num[1] + num[2] + num[3] + num[4];
		System.out.println("1.num배열의 총합은 = " + total); // 1500
		
		int[] arr3 = new int[] {10, 30, 25, 7, 4, 6};
		Arrays.sort(arr3); //오름차순
		String one = Arrays.toString(arr3);
		System.out.println(one); // [4, 6, 7, 10, 25, 30]
		
		//문제] 국어(100), 영어(90), 수학(90) 점수가 있습니다.
		// 위 점수를 입력하여 합계와 평균을 구하여 출력합니다.
		int jumsu[] = {100, 90, 90}; //핵심★★★★
		int sum=0, count=0;
		for(int i=0; i<jumsu.length; i++) { // 종료지점은 무조건 작다고 해야함. 배열사이즈 크기 때문에.
			sum+=jumsu[i]; //핵심★★★★
			count++;
		}
		System.out.println("합계는 = " + sum); //280
		System.out.println("평균은 = " + sum/count); //93   count 대신 jumsu.length 를 써줘도 됨.
		
		
//----------------------------------------8일차--------------------------------------
		
				//문제] 다음 데이터에서 짝수, 홀수 각각의 합과 평균을 구하는 프로그램 작성.
				int jumsu[] = {100, 90, 95, 100, 78, 95, 56};
				int odd=0, even=0, oddCount=0, evenCount=0;
				for(int i = 0; i<jumsu.length; i++) {
					if(jumsu[i]%2==0) {
						even+=jumsu[i];
						evenCount++;
					}else {
						odd+=jumsu[i];
						oddCount++;
					}
				}
				System.out.println("짝수의 합은 = " + even);
				System.out.println("짝수의 평균은 = " + even/evenCount);
				System.out.println("홀수의 합은 = " + odd);
				System.out.println("홀수의 평균은 = " + odd/oddCount);
				
				//문제] 다음 데이터에서 오름차순과 내림차순을 구하여 출력하는 프로그램 작성.
				//오름차순 : Ascending, 1 2 3 4 5 6
				//내림차순 : Descending,  6 5 4 3 2 1
				Arrays.sort(jumsu);
				print_Ascending(jumsu);
				Arrays.sort(jumsu);
				print_Descending(jumsu);
				
				//문제] 50~100 사이의 난수를 발생하여 100개를 만들고, 배열에 저장한 후, 정렬하세요.(아무 조건이 없으면 오름차순 정렬임.)
				int ranArr[] = new int[100]; //100개를 저장할 수 있는 배열 준비
				Random r = new Random();
				System.out.println("============정렬이전 출력방법============");
				for(int i=0; i<ranArr.length; i++) {
					ranArr[i] = r.nextInt(50) + 50; //앞의 50은 시작지점.  뒤의 50은 종료지점.
					System.out.print(ranArr[i] + ", "); // 정렬이전 출력방법
				}
				System.out.println();
				System.out.println("============정렬이후 출력방법============");
				
				Arrays.sort(ranArr); //정렬이후 출력방법
				String one = Arrays.toString(ranArr);
				System.out.println(one);
				
				//문제] 1차원 배열 int[5]선언이 되어 있습니다.
				//국어[0], 영어[1], 수학[2]의 데이터를 입력받고, 총점[3]과 평균[4]을 구하여 배열에 저장하세요.
				double sj[] = new double[5];
				System.out.println("국어, 영어, 수학 점수를 입력하세요.");
				Scanner sc = new Scanner(System.in);
				sj[0] = sc.nextDouble();
				sj[1] = sc.nextDouble();
				sj[2] = sc.nextDouble();
				for(int i=0; i<=2; i++) { //for문 이용한 합계 구하기.
					sj[3]+=sj[i];
				}
				sj[4] = sj[3] / 3 ;
				for(int i=0; i<sj.length; i++) { //for문 이용한 배열문 출력.
					System.out.println("sj[" + i +"]" + sj[i]);
				}
				
				//문제] 학생수를 입력받고, 점수를 입력받아서, 점수리스트를 출력하고,
				// 데이터 분석을 하는데, 최고 점수와 평균 점수를 출력합니다.
				// 계속 하시려면 Y, 아니면 N을 입력하세요. (배열이용)
				int stdNum=0;
				int[] score = null;
				Scanner sc = new Scanner(System.in);
				while(true) {
					System.out.println("학생수를 입력하세요.");
					stdNum = sc.nextInt();
					score = new int[stdNum];
					System.out.println("성적을 입력하세요.");
					for(int i=0; i<score.length; i++) {
						score[i] = sc.nextInt();
						System.out.println("score[" + i + "]>" + score[i]);//점수 리스트 출력
					}
					int max = 0, sum = 0;
					double aver = 0.0;
					
					for(int i=0; i<score.length; i++) {
					      max=(max < score[i] ? score[i] : max);
					      sum+=score[i];
					}
					aver = sum/stdNum;
					System.out.println("최고 점수는 = " + max);
					System.out.println("평균 점수는 = " + aver);
					System.out.println("계속하시려면 y, 아니면 n를 입력하세요.");
					String ans = sc.next();
					if(ans.equals("y")) {
						continue;
					} else {
						System.out.println("프로그램을 종료합니다.");
						System.exit(0);
						break;
					}
				
				}
				
				//문제] 쉬어가는 페이지
				//임의의 숫자를 입력하여 배열에 저장하고, 내용중에서 짝수에 해당하는 데이터만 출력하세요.
				//그리고, 5의 배수만 출력해 보세요.
				int size;
				Scanner sc = new Scanner(System.in);
				System.out.println("배열의 크기를 입력해주세요.");
				size = sc.nextInt();
				int array[] = new int[size];
				System.out.println("배열크기에 맞는 데이터를 입력해주세요.");
				for(int i=0; i<array.length; i++) {
					array[i] = sc.nextInt();
				}
				for(int i=0; i<array.length; i++) {
					if(array[i]%2==0) {
						System.out.println("짝수는 " + array[i]);
					} else if(array[i]%5==0) {
						System.out.println("5의 배수는 " + array[i]);
					} else
						System.out.println("짝수와 5의 배수에 해당하지 않는 값은 " + array[i]);
				}
				
				//문제] 구구단중에서 5단을 출력하세요. 단, 배열을 이용해서
				int gugu[] = new int[9];
				for(int i = 0; i<gugu.length; i++) { // 배열의 길이로 나눔.
					gugu[i] = 5*(i+1); //5단을 배열로 저장.
					System.out.println("5 * " + (i+1) + " = " + gugu[i]);
				}
				
				//문제] 임의의 수를 입력하여 수의 등수를 매깁니다.
				//값이 클수록 순위가 적어집니다. (성적 석차 구하기 알고리즘)
				int[] rank = {1, 1, 1, 1, 1}; //순위를 구하기 위한 시작점.
				Scanner sc = new Scanner(System.in);
				System.out.println("석차를 매길 배열의 크기를 입력하세요.");
				int n = sc.nextInt();
				int[] AmasterpieceArray = new int[n];
				//데이터 입력
				for(int i=0; i<AmasterpieceArray.length; i++) {
					AmasterpieceArray[i] = sc.nextInt();
				}
				for(int i = 0; i<n-1; i++) {
					for(int j = i+1; j<n; j++) {
						if(AmasterpieceArray[i] != AmasterpieceArray[j]) {
							if(AmasterpieceArray[i] < AmasterpieceArray[j])
								rank[i]++;
							else
								rank[j]++;
						}
					}
				}
				for(int i=0; i<n; i++) {
					System.out.println("점수는 = " + AmasterpieceArray[i] + ", 등수는 = " + rank[i]);
				}
				
				//아래와 같은 데이터가 존재합니다.
				//이중에서 가장 큰값과 가장 작은 값을 판별하여 출력하세요.
				int[] numList = {123, 146, 451, 51, 15, 547, 2692};
				int max = numList[0]; 
				int min = numList[0];
				for(int i=0; i<numList.length; i++) {
				      max=(max < numList[i] ? numList[i] : max); // if문 max<numList[i]{max = numList[i]; 와 동일 의미
				      min=(min > numList[i] ? numList[i] : min); // if문 min>numList[i]{min = numList[i]; 와 동일 의미
				}
				System.out.println("최고 점수는 = " + max);
				System.out.println("최저 점수는 = " + min);
				
				//3개의 숫자를 입력받아서 가장 큰 값을 구하는 프로그램을 작성.
				int max = 0;
				int su[] = new int[3];
				Scanner sc = new Scanner(System.in);
				System.out.println("3개의 숫자를 입력하세요.");
				su[0] = sc.nextInt();
				su[1] = sc.nextInt();
				su[2] = sc.nextInt();
				max = su[0];
				for(int i=1; i<su.length; i++) {
					 if(max<su[i]){
						 max = su[i];
					 }
				}
				System.out.println(max);
				
				
				
				//문제] 컴퓨터와 가위, 바위, 보 게임을 합니다. -> 강사님 올려주신거 보고 수정할것.!!!!!!!!!!!!!!!
				//1차원 배열을 이용하여 win, lose, draw 표현을 하고, 계속하려면 y, 아니면 n을 입력합니다. + 몇승몇패 표시?
				arraySample1 as1 = new arraySample1();
				int cnt = 0;
				while (true) {
					cnt++;
					as1.input();
					System.out.println("--------" + cnt + "차-----------");
					as1.rad();
					System.out.println("컴퓨터\tVS\t유저");
					System.out.println(as1.Com + "\t\t" + as1.MyHand);
					System.out.println("------------------------");
					as1.answer();
					
					System.out.println("------------------------");
					
					as1.reStart();
					
					if (as1.YN.equals("n")) {
						System.out.println("종료되었습니다.");
						break;
					}

				
				
				
				//토요일 저녁 8시 KBS : 로또 복권 추첨
				//로또 복권 발행하여 숫자를 출력하세요.
				int lotto[] = new int[6];
				for(int i=0; i<lotto.length; i++) {
					lotto[i] = (int) (Math.random()*45 +1);
					for(int j=0; j<i; j++) { //중복값 제거
						if(lotto[i]==lotto[j]) {
						i--;
						break;
						}
					}
				}
				Arrays.sort(lotto);
				String lt = Arrays.toString(lotto);
				System.out.println("이번주 로또의 당첨번호는");
				System.out.println(lt);
					
					//강사님 풀이법
					int lotto[] = new int[6];//6자리 복권 번호 저장 배열
					Random r = new Random();
					
					Scanner sc = new Scanner(System.in);
					System.out.println("반복 횟수를 입력해 주세요: ");//복권 발행 횟수
					int gameCnt  = sc.nextInt();
					
					for(int cnt=1; cnt <=gameCnt; cnt++) {	//복권 구입 카운트
						
					hyun:
						for(int idx=0; idx < lotto.length; idx++) {
							int lot = r.nextInt(45)+1;	//1~45사이 난수 생성			
						
						for(int i=0; i<idx; i++) {
							if(lot == lotto[i]) { //같은 복권 생성되면, 다음으로 넘어가기
								idx--;
								continue hyun;//goto문.
							}
						}
						lotto[idx] = lot;//정상복권 배열에 저장
					}
						Arrays.sort(lotto);//배열내의 복권 정렬
						
						System.out.println(cnt + "Game=");//발행된 복권 횟수 번호
						for(int i=0; i <lotto.length; i++) { 
							System.out.print(lotto[i] + ", ");//복권 출력
					}
						System.out.println();
					
					
				
					
			}

		
	}

}

'Bitcamp > BITCAMP - Java' 카테고리의 다른 글

8일차 - 과제  (0) 2019.07.03
8일차 - 배열(2차원)  (0) 2019.07.03
7일차 - 과제  (0) 2019.07.02
7일차 - 중요메소드  (0) 2019.07.02
7일차 - 생성자  (0) 2019.07.02
And