포스트

자바의 배열 - Array

자바의 배열 - Array


1. 배열 - Array

타입[] 변수 = 값 또는 타입 변수[] = 값 으로 선언한다.

  • 보통 전자를 사용함. ex) int[] a = {1,2,3,4,5} or a = new int[6]
아래 코드 참고
1
2
3
4
5
6
7
8
public class ArrayMain1 {
  public static void main(String[] args) {
    //선언
    int[] arrSubject;
    // 배열에 크기 할당 (메모리에 미리 크기 할당)
    arrSubject = new int[7];
  }
}

배열로 선언된 변수에는 자동적으로 초기값이 들어간다.
정수는 0, 실수는 0.0, char는 ' ' (공백), 객체는 null

⬇️ 여러 타입 기본값 출력 테스트 해보기 ⬇️
1
2
3
for(int i = 0; i<arrSubjects.length; i++) {
  System.out.println(i+1+"번째 출력 => "+arrSubjects[i]);
}	
이미지테스트설명 이미지테스트설명 이미지테스트설명
각각의 출력 결과
왼쪽 부터 정수, 실수, 객체, char



- 응용 배열을 사용하여 총점과 평균 값 구하기

for(변수선언 : 배열){ ... } 을 사용하여 배열에 효율적으로 반복문을 사용할 수 있다.

  • new int[] 은 생략 가능하다.
  • 대입되는 배열의 값을 기준으로 배열의 크기가 자동 지정된다.
  • 아래 코드는 int[7] 이다.
  • 즉 사용가능한 index 값은 0 ~ 6 까지 이고 scores[7] = 100
    이런식으로 사용할시 예외 ArrayIndexOutOfBoundsException 발생한다.
1
2
3
4
5
6
7
int[] scores = {90,85,75,50,95,100,70};
int sum = 0;
for(int score : scores) {
  sum += score;
}
System.out.println("총점 => "+sum + " 평균 => " + Math.round((double)sum/scores.length*10)/10d);
이미지테스트설명 이미지테스트설명
출력 결과와 예외 발생



2. 객체 배열과 for문 활용

for문을 활용하여 객체 배열 돌리기

  • 스캐너에 입력된 값을 토대로 회원 인스턴스를 생성한다.
  • 회원 인스턴스를 배열에 넣는다.
  • 회원배열은 최대 3개까지 생성 할수 있다.
  • 아이디는 중복 될 수 없다.
  • 비밀번호는 영문자(대문자 or 소문자)와 숫자, 특수문자의 조합
    8 ~ 15 글자
  • 이름은 2 ~ 6 글자 한글로만 작성 가능
아래 코드 참고
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
public class MemberMain {

  private static MyMember[] memberArr = new MyMember[3];

  private static void addMember(MyMember[] memberArr, MyMember newMember) {
    for (int i = 0; i < memberArr.length; i++) {
      if (memberArr[i] == null) {
        memberArr[i] = newMember;
        System.out.println(newMember.getName() + "를  " + i+"번째 인덱스에 가입 시킴");
        return;
      }
    }
    System.out.println(newMember.getName()+"를 추가하지 못했어 회원 꽉참");
  }
  //중복확인
  private static boolean duplicationId(String id) {
    for(MyMember m : memberArr)
      if(m!=null)
        if(m.getNo().equals(id))
          return true;
    return false;
  }

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    String userSelect = "";
    while( !(userSelect.equals("3")) ) {

      System.out.println("\n============ >> 메뉴 << ============\n"
        + "1.회원가입   2.모든회원조회   3.프로그램종료\n"
        + "=====================================");
      System.out.print("▷ 선택하세요 => ");
      userSelect = sc.nextLine().trim();
      // trim 으로 앞 뒤 모든 공백제거 ⬆️ (중앙에 낀 공백은 제거 되지 않는다.)
      switch(userSelect) {
        case "1" :
          String id = null;
          String pw = null;
          String name = null;
          while(true) {
            System.out.print("\n✔️아이디 => ");
            id = sc.nextLine();
            if(id.isBlank()) {
              System.out.println(">>[경고] 아이디값을 공백이 아닌 다른 값으로 입력하세요\n");
              continue;
            }else if(duplicationId(id)) {
              System.out.println(">>[경고] 아이디값 중복 다른 아이디로 설정하세요\n");
              continue;
            }
            break;
          }

          while(true) {
            System.out.print("\n✔️비밀번호 => ");
            pw = sc.nextLine();
            if(!MyUtil.passwordVerify(pw)) {
              System.out.println(">>[경고] 비밀번호는 8글자 이상 15글자 이하의 영문 대,소문자 및 숫자와 특수문자가 혼합되어야만 합니다.\n");
              continue;
            }
            break;
          }
          while(true) {
            System.out.print("\n✔️이름 => ");
            name = sc.nextLine();
            if(!MyUtil.nameVerify(name)) {
              System.out.println(">>[경고]성명은 공백이 없는 한글로만 2글자 이상 6글자 이하로 입력하세요!! \n");
              continue;
            }
            break;
          }

          MyMember newMember = MyMember.of(name,id, pw);
          addMember(memberArr, newMember);

          break;
        case "2" :
          for(int i=0;i< memberArr.length;i++) {
            if(memberArr[i] != null)
              System.out.println(i+1+"번째 유저 => "+memberArr[i].getInfo());
          }
          break;
        case "3" : break;
        default :
          System.out.println("\n\t다시 입력 하세요.");
          break;
      }


    }
    sc.close();
    System.out.println("\n=================종료=================");
  }
}

1
2
3
4
5
6
7
8
9
10
//MyUtil.class
public static boolean passwordVerify(String pw) {
  return pw.matches("^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[!@#$%^&*])[a-zA-Z\\d!@#$%^&*]{8,15}$");
}
public static boolean nameVerify(String name) {
  if(name.length()<2||name.length()>6) return false;
  for(char i : name.toCharArray())
    if(!(i>='가'&& i<='힣')) return false;
  return true;
}
이미지테스트설명
결과

🔄 while문 활용 팁 🔄

isEmptyisBlank

메서드설명
isEmpty()문자열의 길이가 0인지 확인 (""이면 true)
isBlank()공백 문자(공백, 탭, 개행)만 포함되었는지 확인
아래 코드 참고
1
2
3
4
5
6
7
8
String emptyStr = "";
String blankStr = "   ";

System.out.println(emptyStr.isEmpty()); // true
System.out.println(emptyStr.isBlank()); // true

System.out.println(blankStr.isEmpty()); // false
System.out.println(blankStr.isBlank()); // true

null 인 경우엔 두 메서드 다 NullPointerException이 발생한다.

이 작성글은 저작권자의 CC BY 4.0 라이센스를 따릅니다.