주요내용 : 배열(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 |