[WEB]DAY5_배열
제어문을 이용한 CoinBox 만들기
package day05;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.event.TreeWillExpandListener;
public class CoinBox {
public static void main(String[] args) {
// 1. 돈 넣기
// 2. 노래재생
// 선택
// 1. 500(2곡)
// 2. 1000(5곡)
// 100점이면 한 곡 보너스
// 노래는 3초간 재생된다.
String title = "코인 노래방[코인 : ";
String msg = "1. 돈넣기\n2. 노래 재생\n3. 나가기";
String input_msg = "1. 500원(2곡)\n2. 1000원(5곡)\n3. 취소";
String errMsg = "다시 시도해 주세요.";
int choice = 0;
int coin = 0;
int song_2 = 500;
int song_5 = 1000;
int cnt_500 = 2;
int cnt_1000 = 5;
int money = 10000;
int song_choice = 0;
int cnt = 0;
Random r = new Random();
int score = 0;
String msg_100 = "와우~ 힙한 노래 잘들었어요!";
String msg_50 = "조금 더 연습해서 셀럽이 되어요~";
String msg_0 = "넌 소중해";
String result = "";
while (true) {
choice = Integer.parseInt(JOptionPane.showInputDialog(title + coin + "개]\n" + msg));
if (choice == 3) {
break;
}
switch (choice) {
// 돈 넣기
case 1:
// 변수의 재사용
// 1. 메모리 효율성 증가
// 2. 가독성 감소
choice = Integer.parseInt(JOptionPane.showInputDialog(input_msg));
// nested switch 중첩 스위치문
switch (choice) {
// 500원
case 1:
song_choice = song_2;
cnt = cnt_500;
break;
// 1000원
case 2:
song_choice = song_5;
cnt = cnt_1000;
break;
case 3:
continue;
default:
JOptionPane.showMessageDialog(null, errMsg);
continue;
}
if (money < song_choice) {
JOptionPane.showMessageDialog(null, errMsg + " / 잔액부족");
} else {
money -= song_choice;
coin += cnt;
}
// 노래재생
break;
case 2:
if (coin < 1) {
JOptionPane.showMessageDialog(null, errMsg + " / 코인 부족");
continue;
}
coin--;
// 100, 90 , 80, 70, 60, 50, 40, 30
// (0~7 + 3)* 10 = 30~100
score = (r.nextInt(8) + 3) * 10;
System.out.print("재생중");
for (int i = 0; i < 3; i++) {
System.out.print(".");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
;
}
}
System.out.println();
if (score > 70) {
if (score == 100) {
coin++;
}
result = msg_100;
} else if (score > 40) {
result = msg_50;
} else {
result = msg_0;
}
JOptionPane.showMessageDialog(null, "점수 : " + score + " 점!\n" + result);
continue;
default:
JOptionPane.showMessageDialog(null, errMsg);
break;
}
}
}
}
배열
: 같은 자료형의 저장공간이 나열되어 있는 것.
1. 여러 변수를 선언하면 이름도 여러개다.
관리하기 어렵기 때문에 여러 칸 배열 한 개로 선언하고
인덱스(방 번호)로 값에 접근한다.
2. 규칙성이 없는 값에 규칙성을 부여하기 위해서
배열의 선언
자료형[] 배열명 = {값1, 값2, ...}; (값의 중괄호 앞에 new가 생략되어 있는 것임. )
자료형[] 배열명 = new 자료형[칸수];
* new
뒤의 값을 Heap(동적메모리)에 할당하는 명령어
인덱스가 0부터 시작하는 이유
각 방에는 이름 없고 주소만 존재한다.
첫번째 방의 주소값을 시작 주소라 하고 이 주소값이
배열명에 들어가게 된다.
첫번째 칸에 접근하기 위해서는 *(배열명 +0)이므로
대괄호로 치환하면 배열명[0]이 된다.
이때 0을 index라고 부르고 이름 대신 index로 값에
접근한다. 배열명은 시작주소를 가지고 있기 때문에
index는 0부터 시작한다.
(4칸 배열 선언시 4칸은 Heap메모리에 할당되고
배열명은 다른 영역에 할당된다. 4칸 배열의 시작 주소를
배열명이 갖고 있으며, 배열명 + 칸으로 접근한다.
값에 접근하기 위해서는 *(배열명 + 칸)으로 접근하며
대괄호로 치환하면 배열명[칸]이다.
첫번째 칸에 접근하기 위해서는 배열명 + 0으로 접근하므로
배열명[0]이 첫번째 값이다. 따라서 배열은 시작 주소를 가지고
있기 때문에 인덱스는 0부터 시작한다.)
배열의 사용
int[] arData = {3, 54, 1, 2};
arData[0] = 50; //저장공간
arData[1] = arData[3]; //저장공간, 값
System.out.println(arData[2]); //값
arData[1] = arData[2] + 9; //저장공간, 값
int[] arData = new int[4];
*new로 선언하면 모든 방에 초기값이 들어간다.
arData[0] = 10;
arData[1] = arData[0] + 5;
arData[2] + 7;
System.out.println(arData[3]);
length
배열 선언시 자동으로 상수로 선언되며, 배열의 길이를 갖고 있다.
배열명.length : 배열의 길이
package day05;
public class ArTest {
public static void main(String[] args) {
int[] arData = new int[4];
//4~1넣기
for(int i =0; i<arData.length; i++) {
arData[i] = 4-i;
}
for(int i =0; i<arData.length; i++) {
System.out.println(arData[i]);
}
}
}
package day05;
import java.util.Scanner;
import javax.rmi.ssl.SslRMIClientSocketFactory;
public class ArTask {
public static void main(String[] args) {
//100~1까지 넣고 출력
// int[] arData = new int[100];
//
// for (int i = 0; i < arData.length; i++) {
// arData[i] = 100-i;
// }
// for (int i = 0; i < arData.length; i++) {
// System.out.println(arData[i]);
// }
//1~100까지 중 짝수 넣고 출력
// int[] arData = new int[50];
// for (int i = 0; i < arData.length; i++) {
// arData[i] = (i+1)*2;
// }
// for (int i = 0; i < arData.length; i++) {
// System.out.println(arData[i]);
// }
//1~n까지 넣고 총 합 출력
// Scanner sc = new Scanner(System.in);
// int cnt =0;
// int sum = 0;
//
// System.out.println("정수를 입력하세요.");
// cnt = sc.nextInt();
//
// int[] arData = new int[cnt];
//
// for (int i = 0; i < arData.length; i++) {
// arData[i] = i+1;
// sum += arData[i];
// }
// System.out.println("총 합은 "+sum + "입니다.");
// int[] arData = null;
// Scanner sc = new Scanner(System.in);
// int result = 0;
// int end = 0;
//
// while(end < 1) {
// System.out.println("1~n까지의 합 : \nn : ");
// end = sc.nextInt();
// }
// arData = new int[end];
//
// for (int i = 0; i < arData.length; i++) {
// arData[i] = i+1;
// result += arData[i];
// }
// System.out.println(result);
//A~F까지 넣고 출력
// int [] arData = new int[6];
// for (int i = 0; i < arData.length; i++) {
// arData[i] = i+65;
// }
// for (int i = 0; i < arData.length; i++) {
// System.out.println((char)arData[i]);
// }
// char[] arData = new char[6];
// for (int i = 0; i < arData.length; i++) {
// arData[i] = (char)(i+65);
// }
// for (int i = 0; i < arData.length; i++) {
// System.out.println(arData[i]);
// }
//A~F중 D제외하고 넣고 출력
// int[] arData = new int[5];
//
// for (int i = 0; i < arData.length; i++) {
// arData[i] = i+ 65;
// System.out.println((char)(i > 2? i+66: i+65));
// }
//정수를 한글로 바꾸기
//입력)1024, 출력)일공이사
//String
// String data = "";
// String hangle = "공일이삼사오육칠팔구";
// String result = "";
//
// System.out.print("정수 : ");
// data = new Scanner(System.in).next();
//
// if(Integer.parseInt(data)<0) {
// data = "" + (Integer.parseInt(data)* -1);
// result = "마이너스";
// }
//
// for (int i = 0; i < data.length(); i++) {
// result += hangle.charAt(data.charAt(i)- 48);
// }
// System.out.println(result);
// int num = 0;
//
// System.out.println("정수 : ");
// num = new Scanner(System.in).nextInt();
// String hangle = "공일이삼사오육칠팔구";
// String result = "";
// boolean check = false;
//
// if(num<0) {
// num*= -1;
// check = true;
//
// }
//
// while (num != 0) {
// result = hangle.charAt(num % 10) + result;
// num /= 10;
// }
// System.out.println(check? "마이너스"+ result : result);
//소문자를 대문자로 바꾸기
String data = "qQOKadWTQdoWKAdws";
// System.out.println(data.toUpperCase());
// String result = "";
//
// for (int i = 0; i < data.length(); i++) {
// char temp = data.charAt(i);
// //'a' ~ 'z'
// if (temp >= 97 && temp <=122) {
// //A : 65
// //a : 97
// //97-65 = 32
// result +=(char)(temp - 32);
// }else {
// result += temp;
// }
// }
// System.out.println(result);
}
}
* 정수를 한글로 바꾸기
* 마이너스의 경우, 음수는 안되기 때문에 -1을 곱해준 뒤 한글로 변환
-> flag를 이용해 true일 경우, "마이너스"가 함께 출력 되도록 설정
필기
- switch 문에서는 break를 두번 써서 나갈 수 없다.
switch 문 밖에서 나가야 함.
- java는 동적 메모리만 있다. ( [Index]안에 상수, 변수 둘 다 가능. )
,(상수 일 때, new로 Heap에 저장되므로 동적이다.)
,(new ____ -> Heap영역에 저장하는것.)
- java에서는 초기화 할 때, 값이 아니면 0을 사용할 수 없다.
배열을 초기화 할 때에는,
누적할때 ""
대입할때 null