반응형
배열의 활용 - 입력
➰ '그만'이라는 값을 받을때까지 계속 입력을 받고 그만을 받으면 배열을 출력해준다.
- 지금까지 배운 배열의 한계점 = 크기가 고정이다.
package day08;
import java.util.Scanner;
public class ArrayInsert {
public static void main(String[] args) {
//배열의 한계점 - 크기가 고정
//입력받은 문자열을 배열에 순서대로 저장.
Scanner scan = new Scanner(System.in);
String[] arr = new String[100];
int count = 0; //인덱스를 나태내는 변수
//"그만" 문자가 들어오기 전까지 입력
while(true) {
//next 공백을 기준으로 인식
//nextLine 엔터를 기준으로 인식
// - 문제: nextInt와 같은 애들이랑 사용을 못함.
System.out.print(">");
String menu = scan.nextLine();
if(menu.equals("그만")) {
break;
}
arr[count] = menu; // 저장
count ++; // 인덱스 증가
}
//전체 배열을 출력해보면 값이 들어가지 않은 칸들은 null이 출력되기 때문에..
//System.out.println(Arrays.toString(arr));
//for문으로 값을 입력한 곳 까지만 출력해준다.
String str = "[";
for(int i = 0; i< count; i++) {
str += arr[i];
if(i == count-1) {//마지막 문자열
str += "]";
break;
}
str += ", ";
}
System.out.println(str);
scan.close();
}
}
배열의 활용 - 수정
➰ 배열값의 수정
import java.util.Scanner;
public class ArrayUpdate {
public static void main(String[] args) {
//배열값의 수정
//탐색 -> 변경 -> 결과출력
Scanner scan = new Scanner(System.in);
String[] arr = {"어피치", "라이언", "제이지", "네오", "무지", "튜브"};
System.out.print("찾을 이름>");
String name = scan.next();
boolean flag = false; //
for(int i = 0; i < arr.length; i++) {
if(name.equals(arr[i])) { //같은 값이 있다면
System.out.print("바꿔줄 이름>");
String n = scan.next();
arr[i] = n; //수정
flag = true;
}
}
if(flag) {
System.out.println("별명이 수정되었습니다.");
}else {
System.out.println("별명이 존재하지 않습니다.");
}
scan.close();
}
}
배열의 활용 - 삭제
➰ 배열의 삭제
- 배열에서 삭제의 개념은 없다. 이유 = 고정배열이기 때문이다.
- 삭제를 한것이 아니라 기본값(초기화)값으로 치환하는 것과 같다.
- 삭제되는것 처럼 보여주게 할 수는 있다.
import java.util.Scanner;
public class ArrayDelete {
public static void main(String[] args) {
//배열에서 삭제 개념은 없습니다.
/* int 배열 delete 작업 */
/*
int[] arr = {1,2,3,4,5,6,7,8,9,10};
// 만약 5의 값을 삭제한다 라는 작업을 한다면 0으로 바꾸고 0을 출력을 안한다는가...
// 뒤쪽에 있는 값들을 앞쪽으로 당겨오는 작업을 해준다.
//4번째 인덱스에 있는 값을 삭제 하는 작업 예시
for(int i = 4; i < arr.length-1 ; i++) {
arr[i] = arr[i+1];
}
//[1,2,3,4,6,7,8,9,10,10]으로 변경된다.
System.out.println(Arrays.toString(arr));
*/
/* String배열 delete 작업 */
Scanner scan = new Scanner(System.in);
String[] arr = {"어피치", "라이언", "제이지", "네오", "무지", "튜브"};
System.out.print("삭제할 이름>");
String name = scan.next();
int count = arr.length; //삭제가 일어났을 때 하나씩 감소.
for(int i = 0; i < count; i++) {
if(name.equals(arr[i])) {//이름값이 같다면 삭제 작업
for(int j = i; j < count-1; j++) {
arr[j] = arr[j+1]; // 찾은 위치에서 뒤 원소를 당김.
}
count --;
}
}
//아래와 같이 출력하여 삭제된것 처럼 보여지게 할 수 있다. 사실은 제일 마지막 값은 중복으로 남아있음.
String str = "[";
for(int i = 0; i < count; i++) {
str += arr[i];
if(i == count - 1) {
str+="]";
break;
}
str += ", ";
}
System.out.println(str);
scan.close();
}
}
➰ Quiz - 입력받은 수만큼의 배열에 좌석을 배정하고 예약하는 프로그램
- 내가 짠거
import java.util.Scanner;
public class Quiz19 {
public static void main(String[] args) {
/*
* 1. 사람수(정수)를 입력을 받습니다.
* 2. 입력받은 사람수 만큼 랜덤한 배열을 생성해서 중복되지 않게 랜덤값을 저장.
*
* 램덤값의 크기는 1 <= x <=사람수
*
* 3. 중복되지 않는 배열이 생성 되었다면, ○문자를 이용해서 배열의 크기를 출력.
* 4. 스캐너를 통해서 랜덤으로 배정된 좌석을 선택할 수 있습니다.
* 5. 제대로 선택된 좌석이면 자리번호를 공개하고 출력.
* 6. 제대로 선택되지 않은 좌석이면 다시 선택을 출력.
*/
Scanner scan = new Scanner(System.in);
//입력한 숫자만큼 배열을 생성
System.out.print("배정할 좌석의 크기를 지정하세요>");
int num = scan.nextInt();
int[] random_arr = new int[num];
//중복된 숫자 없이 랜덤값 입력
for(int i = 0; i < random_arr.length; i++) { // 배열을 for문으로 돌면서
random_arr[i] = (int)(Math.random()*num)+1; // 랜덤한 값을 생성
//중복제거
for(int j = 0; j < i; j++) { // 현재 입력된 배열의 크기만큼 돌면서 같은 값이 있는지 확인.
if(random_arr[i] == random_arr[j]) { // 같다면
i--; // i를 -- 시켜 중복값이 입력된 배열에 다른 랜덤값을 덮어쓰도록 함.
break;
}
}
}
//System.out.println(Arrays.toString(random_arr));
//좌석 현황 ○로 초기화 작업
String[] select_arr = new String[num];
for(int i = 0; i < select_arr.length; i++) {
select_arr[i] = "○";
}
while(true) {
System.out.println("---------------좌석 선택 프로그램------------------");
//좌석 번호 출력
for(int i = 1; i <= num; i++) {
System.out.print(i+" ");
}
System.out.println();
// 남은 좌석 현황 출력
for(int i = 0; i < select_arr.length; i++) {
System.out.print(select_arr[i] + " ");
}
System.out.println();
//좌석 선택
System.out.print("좌석 선택>");
int select = scan.nextInt();
if(select == 0) {
System.out.println("프로그램 종료");
break;
}
if(select_arr[select-1].equals("●")) {
System.out.println("이미 예약된 좌석입니다.");
}else {
select_arr[select-1] = "●";
System.out.println("자리번호를 공개합니다:" + random_arr[select-1]);
}
}
scan.close();
}
}
- 강사님이 짠거
import java.util.Arrays;
import java.util.Scanner;
public class Quiz19_ {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("좌석>");
int size = scan.nextInt();
int[] arr = new int[size];
//재미있는생각으로...> 1-받을수까지 그냥 배열을 섞으면 중복없이 가능.
int index = 0; // 현재 위치변수
start:while(true) {
int seat = (int)(Math.random()*size)+1; //1~size까지의 랜덤수
for(int i = 0; i < index; i++) {
if(arr[i] == seat) continue start;
}
arr[index] = seat;
index++;
if(index == size) break;
}
System.out.println(Arrays.toString(arr));
int count = 0;
//좌석 출력
while(true) {
for(int i = 0; i < arr.length; i++) {
System.out.printf("%-3d", i+1); // %-3d = 3자리 공간을 잡고 왼쪽부터 채움
}
System.out.println();
for(int i = 0; i < arr.length; i++) {
if(arr[i] == 0) {
System.out.printf("%-3s", "●");
}else {
System.out.printf("%-3s", "○");
}
}
System.out.println();
System.out.println("좌석 선택>");
int seat = scan.nextInt();
if(arr[seat-1] == 0) {
System.out.println("제대로 선택하십시오.");
}else {
System.out.println("선택좌석:" + arr[seat-1]);
arr[seat-1] = 0;
count++;
}
if(count == size) {
System.out.println("종료합니다.");
break;
}
}
scan.close();
}
}
💡 수가 많아지만 O와 숫자 간격이 맞지 않는데 printf를 사용하여 맞춰 줄수 있다 %-3d와 %-3s를 사용하여 간격을 맞춰주었다.
반응형
'국비지원 > JAVA' 카테고리의 다른 글
| [JAVA] 9-2. 문자열 다루기 (0) | 2022.09.30 |
|---|---|
| [JAVA] 9-1. 현재까지 배운 것의 활용 Quiz - 고객 정보 관리 프로그램 (0) | 2022.09.30 |
| [JAVA] 7-4. 정렬 (선택정렬) (0) | 2022.09.28 |
| [JAVA] 7-3. 배열을 다루는 방법 (순차탐색을 활용한 문자열비교 / 이진탐색) (0) | 2022.09.28 |
| [JAVA] 7-2. 반복문 continue (0) | 2022.09.28 |