스포츠마케터의 초보 개발자 도전기
JAVA study 06 본문
배열 Array
package ex1_single_array;
public class Ex1_array {
public static void main(String[] args) {
//배열 : '같은 자료형끼리 모아둔 하나의 묶음'
//효율적인 자료관리를 위해 반드시 필요!
int su1 = 100;
int su2 = 200;
int su3 = 300;
int su4 = 400;
System.out.println(su1);
System.out.println(su2);
System.out.println(su3);
System.out.println(su4);
System.out.println("---------------------");
//위의 코드를 배열을 이용하여 생성해보자
//1) 배열 선언
int[] su;
//2) 배열 생성
su = new int[5]; //배열 생성 후 프로그램 종료까지 인덱스 추가할 수 없음. 인덱스 번호올려 추가
//3) 배열의 초기화
su[0] = 100;
su[1] = 200;
su[2] = 300;
su[3] = 400;
//su[4] = 500; //배열 생성 후 프로그램 종료까지 인덱스 추가할 수 없어 오류 발생
//배열의 존재하지 않는 인덱스로 접근하는 것은 JAVA에서는 불가능
System.out.println(su[0]);
System.out.println(su[1]);
System.out.println(su[2]);
System.out.println(su[3]);
System.out.println("--------------------");
//n차원 배열의 모든 값을 보려면 n중 for문이 필요
for(int i = 0; i < su.length; i++) { //인덱스 번호 변화될때 자동변화하려면 i < su.length
System.out.println(su[i]);
}//for
int [] num = new int[3];
//num[0] ~ [2]에 10, 20, 30 같이 규칙성을 가지는 값 추가도 한번에 가능
for(int i = 0; i < num.length; i++) {
num[i] = (i + 1) * 10;
System.out.println(num[i]);
}
}//main
}
package ex1_single_array;
public class Ex2_array {
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 7;
arr[1] = 15;
arr[2] = 30;
//배열의 선언 생성 초기화를 한번에
int[] arr2 = {7, 15, 30};
for(int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}//main
}
package ex1_single_array;
public class Ex3_array {
public static void main(String[] args) {
char[] ch = new char[4];
ch[0] = 'J';
ch[1] = 'A';
ch[2] = 'V';
ch[3] = 'A';
//ch[4] = '!';
char[] chArr = {'J','A','V','A'};
// 일반 for문은 특정값만 출력하거나 전체값을 출력하거나 하는 것이 가능
for (int i = 0; i < chArr.length; i++) {
System.out.print(chArr[i]);
}
System.out.println();
// 개선된 for문(향상된 루프...) 특정배열의 모든 값을 출력
for(char c : chArr) {
System.out.print(c);
}
}//main
}
예제1)
package ex2_array_work;
import java.util.Scanner;
public class Ex1_work {
public static void main(String[] args) {
//ex 배열의 길이 : 5
//순차적으로 A-E... 자동 입력
//인덱스네 전체 출력
Scanner sc = new Scanner(System.in);
System.out.println("입력 : ");
int a = sc.nextInt();
char[] arr = new char[a];
char alpha = 'A';
for (int i = 0; i < arr.length; i++) {
//arr[i] = alpha++;
//System.out.print((arr)[i]);
System.out.print(arr[i] = alpha++);
}
System.out.println();
System.out.println("---String 배열의 초기값---");
String[] sArr = new String[2];
sArr[0] = null;
sArr[1] = ""; //실무에서는 null 보다 ""를 선호
System.out.println("null로 초기화 : " +sArr[0]);
System.out.println("빈값(\"\")으로 초기화 : " +sArr[1]);
//String ab = null; 으로 하면 null안녕으로 출력
String ab = ""; //안녕으로 출력
ab += "안녕";
System.out.println(ab);
}//main
}
예제2)
package ex2_array_work;
public class Ex2_work {
public static void main(String[] args) {
//배열 arr에 담긴 모든 값의 합을 출력
int[] arr = {15, 22, 17, 40 ,51};
int sum = 0;
//기존 for문으로
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println(sum);
//향상된 for문으로
sum = 0; //sum값 초기화 시키고
//시작!
for (int s : arr) {
sum += s;
}
System.out.println(sum);
}//main
}
예제3)
package ex2_array_work;
public class Ex3_work {
public static void main(String[] args) {
//배열 arr에 담긴 값 중, 가장 큰 값을 출력
int [] arr = {4, 13, 7, 19, 1, 15};
int num = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > num) {
num = arr[i];
}//if
}//for
System.out.println(num);
//향상된 for
num = arr[0]; //초기화
for (int a : arr) {
if (a > num) {
num = a;
}
}
System.out.println(num);
}//main
}
예제4)
package ex2_array_work;
public class Ex4_work {
public static void main(String[] args) {
//배열 arr이 가진 내용 들을 오름차순으로 정렬하여 출력
int [] arr = {4, 13, 7, 19, 1, 15};
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int num3 = arr[i];
arr[i] = arr[j];
arr[j] = num3;
}//if
}//for1
System.out.print(arr[i] + " ");
}//for2
System.out.println();
System.out.println("--------------");
//teacher code
for(int i = 0; i < arr.length; i++) {
for(int j = i; j < arr.length; j++) {
if( arr[j] < arr[i]) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}//if
}//inner
}//outer
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}//main
}
예제5)
package ex2_array_work;
import java.util.Scanner;
public class Ex5_work {
public static void main(String[] args) {
//배열의 크기를 결정할 값을 입력받고, 배열의 크기만큼 모든 index에
//키보드에서 입력받은 정수를 채워넣는다.
//최종적으로 완료된 배열안에서 홀수와 짝수의 갯수를 찾아 출력
Scanner sc = new Scanner(System.in);
System.out.println("배열의 크기를 정하세요 : ");
int num = sc.nextInt();
int [] size = new int[num];
//키보드에서 배열의 크기만큼 입력 받기
System.out.printf("%d 개의 정수를 입력하세요\n", num);
for (int i = 0; i < size.length; i++) {
size[i] = sc.nextInt();
}
//입력한 n개의 숫자를 보자
for(int c : size) {
System.out.print(c + " ");
}
//배열 안에서 홀수와 짝수 수 찾기
int odd = 0;
int even = 0;
for (int i = 0; i < size.length; i++) {
if (i % 2 != 0) {
odd++;
}else {
even++;
}
}//for
System.out.printf("홀수는 %d개, 짝수는 %d개 입니다.", odd, even);
}//main
}
과제) array를 사용하여 야구게임 만들기
package ex2_array_work;
import java.util.Random;
import java.util.Scanner;
public class Ex6_baseball_work {
public static void main(String[] args) {
// 이전에 만들었던 숫자야구 코드를 배열을 이용하여 변경해보자
Scanner sc = new Scanner(System.in);
// 변수지정
int[] com = new int[3];
int[] user = new int[3];
// 랜덤 변수가 겹치지 않게 작업
do {
com[0] = new Random().nextInt(9) + 1;
com[1] = new Random().nextInt(9) + 1;
com[2] = new Random().nextInt(9) + 1;
} while (com[0] == com[1] || com[0] == com[2] || com[1] == com[2]);
// 변수 출력 (확인용이고 나중에 지우자)
for (int c : com) {
System.out.print(c + " ");
}
System.out.println();
int counter = 0;
while (true) {
counter++;
// 유저 숫자 입력
System.out.print("한자리 숫자를 세개를 겹치지 않게 입력하세요 : ");
int userNum = sc.nextInt();
// 유저 입력 숫자를 배열로 바꿔주기 (100의 자리, 10의 자리, 1의 자리)
user[0] = userNum / 100;
user[1] = userNum / 10 - (user[0] * 10);
user[2] = userNum / 1 - (user[0] * 100) - (user[1] * 10);
// 유저입력값이 제대로 출력되는지 보자 (나중에 지우자)
/*for (int u : user) {
System.out.printf("%d\n", u);
}*/
// 유저 숫자 중복시 재입력 알림
if (user[0] == user[1] || user[1] == user[2] || user[2] == user[0]) {
System.out.println("세 정수를 다르게 입력하세요.");
continue;
}
// 스트라이크, 볼 초기화
int strike = 0;
int ball = 0;
// 유저 숫자와 com 숫자 비교
for (int i = 0; i < com.length; i++) {
for (int j = 0; j < user.length; j++)
if (com[i] == user[j]) {
if (i == j) {
strike++;
}else {
ball++;
}
}
}
// 판단
if (strike == 3) {
System.out.printf("%d 번만에 정답을 맞췃습니다.", counter, "정답-%d", userNum);
break;
} else {
if (strike > 0 || ball > 0) {
System.out.println(strike + "S," + ball + "B");
} else {
System.out.println("out!");
}
}
} // while
}// main
}
과제) array를 사용하여 야구게임 만들기 (teacher's code)
package ex2_array_work;
import java.util.Random;
import java.util.Scanner;
public class Ex6_baseball_tCode {
public static void main(String[] args) {
// 이전에 만들었던 숫자야구 코드를 배열을 이용하여 변경해보자
Scanner sc = new Scanner(System.in);
// 컴퓨터 지정 난수의 변수지정
int[] com = new int[3];
// 랜덤 변수가 겹치지 않게 작업
do {
com[0] = new Random().nextInt(9) + 1;
com[1] = new Random().nextInt(9) + 1;
com[2] = new Random().nextInt(9) + 1;
} while (com[0] == com[1] || com[0] == com[2] || com[1] == com[2]);
int cnt = 0; // 횟수체크
while (true) {
cnt++;
System.out.print("예측값 세자리를 입력 - ");
int number = sc.nextInt();
// 입력된 세자리를 배열에 넣기
int[] user = { number / 100, // user[0]
number % 100 / 10, // user[1]
number % 100 % 10 };// user[2]
// 스트라이크, 볼 카운터 초기화
int strike = 0;
int ball = 0;
// 경우의 수
for (int i = 0; i < com.length; i++) {
for (int j = 0; j < com.length; j++) {
if (i == j) {
if (com[i] == user[i]) {
strike++;
}
} else {
if (com[i] == user[i]) {
ball++;
}
}
}//inner
}//outer
//정답처리
if ( strike == 3) {
System.out.println(cnt + "회 만에 정답을 맞췄습니다.");
break;
} else {
if( strike > 0 || ball > 0) {
System.out.printf("%d S, %d B", strike, ball);
}else {
System.out.println("아웃입니다.");
}
}
} // while
}// main
}
예제) 성적 구하기
package ex2_array_work;
import java.util.Scanner;
public class Ex7_work {
public static void main(String[] args) {
// 키보드에서 입력받은 값만큼의 배열을 생성하고
// 학생들의 성적을 입력받는다.
// 입력된 모든 학생들을 기반으로 평균성적 이상인 학생들의 목록과
// 평균이상인 학생들의 수를 출력
// --------예시결과---------
// 학생 수 : 3
// 학생 1의 성적 : 90
// 학생 2의 성적 : 75
// 학생 3의 성적 : 84
// .....
// 평균성적 : 83.0
// --평균이하
// 학생1
// 학생3
// 평균이상 학생 수 :2
Scanner sc = new Scanner(System.in);
// 학생 수 입력
System.out.print("학생 수 입력 : ");
int s = sc.nextInt();
int[] student = new int[s];
// 학생 점수 입력
for (int i = 0; i < student.length; i++) {
System.out.printf("학생 %d의 성적을 입력하세요 : ", i + 1);
student[i] = sc.nextInt();
}
System.out.println("--입력완료--");
// 학생의 성적 평균
int sum = 0;
for (int i = 0; i < student.length; i++) {
sum += student[i];
}
float avg = (float) sum / s;
System.out.printf("평균 성적 : %.1f", avg);
System.out.println("--평균 이상인 학생----");
// 평균이하 학생
for (int i = 0; i < student.length; i++) {
if (student[i] <= avg) {
System.out.printf("=> 학생 %d\n", i + 1);
}
}
// 평균이상 학생 수
int avgCount = 0;
for (int i = 0; i < student.length; i++) {
if (avg <= student[i]) {
avgCount++;
System.out.printf("평균이상의 학생수 : %d", avgCount);
}
}
}// main
}
예제) 동전 갯수 구하기
package ex2_array_work;
import java.util.Random;
public class Ex8_work {
public static void main(String[] args) {
//변수 money를 만들고 10~5000사이의 난수를 넣는다
//단, 발생된 난수는 3450, 2100과 같이 1의 자리가 반드시 0이되어야한다.
//500, 100, 50, 10원짜리 동전이 각각 몇개씩 필요한지 출력
//가능한 적은 수의 동전을 사용해야 함
int[] coin = {500, 100, 50, 10};
//난수 10~5000원 사이의 난수 발생
int money = 0;
for (int i = 0; i < 5000; i++) {
money = new Random().nextInt(5001);
if(money % 10 == 0) {
System.out.println(money);
break;
}
}
//동전 몇개 필요한지 계산
int[] count = {money / coin[0],
money % coin[0] / coin[1],
money % coin[0] % coin[1] / coin[2],
money % coin[0] % coin[1] % coin[2] / coin[3]};
System.out.printf("필요한 코인수는 500원 - %d개, 100원 - %d개, 50원 - %d개, 10원 - %d개 입니다.", count[0], count[1], count[2],count[3]);
System.out.println("----------------");
//동전 갯수가 0일때는 출력X
for (int i = 0; i < count.length; i++) {
if(count[i] != 0) {
System.out.printf("필요한 코인수는 \n%d 코인은 %d개 입니다.\n", coin[i], count[i]);
}
}
}// main
}
예제) 동전 갯수 구하기 t_code
package ex2_array_work;
import java.util.Random;
public class Ex8_work {
public static void main(String[] args) {
//변수 money를 만들고 10~5000사이의 난수를 넣는다
//단, 발생된 난수는 3450, 2100과 같이 1의 자리가 반드시 0이되어야한다.
//500, 100, 50, 10원짜리 동전이 각각 몇개씩 필요한지 출력
//가능한 적은 수의 동전을 사용해야 함
int[] coin = {500, 100, 50, 10};
//난수 10~5000원 사이의 난수 발생
int money1 = new Random().nextInt(500) + 1;
money1 *= 10;
System.out.println("금액 : " + money1);
for (int i = 0; i < coin.length; i++) {
int res = money1 /coin[i];
if (res > 0) {
System.out.println(coin[i] + "원 : " + res);
money1 %= coin[i];
}
}
}// main
}
'develop > JAVA' 카테고리의 다른 글
JAVA study 08 (0) | 2024.03.07 |
---|---|
JAVA study 07 (0) | 2024.03.06 |
JAVA study 05 (0) | 2024.03.05 |
JAVA study 04 (0) | 2024.03.05 |
JAVA study 03 (1) | 2024.03.05 |