Back-End/JAVA

[JAVA] 스파르타코딩클럽 JAVA공부(2) - 조건문과 반복문, 배열관리

남건욱 2023. 5. 23. 20:50

목차

    반응형
    목표

    이번수업은 연산자, 조건문, 반복문, 배열등을 익히는 수업이다.

     

     

     

     

     

    Objects.equals 메서드
    Objects.equals(좌,우)

    Objects.equals 메서드는 두 객체를 비교하여 같으면 true, 틀리면 false를 반환해 주는 메서드이다.

     

     

    aHand : 사용자A  //   bHand : 사용자B

    이 메서드를 이용해 간단한 가위바위보 프로그램을 제작했다.

    if 중첩문을 사용하였고, 사용자 A가 가위를 입력하였을 때 B의 입력값에 따라 메시지를 출력해 주는 식으로 제작하였다.

    그리고 B의 입력값이 잘못되었을시 사용자에게 알려주도록 설정하였다. 이 구문을 두 번 더 사용하여 모든 경우의 수를 생각하여 제작하였다.

     

     

     

     

     

            int[] numbers = {1, 2, 3, 4, 5}; // int형 배열 numbers 선언
            
            for(int number: numbers){ // 정수형 변수 number에 numbers배열의 값을 하나씩 삽입
                System.out.println(number); // number값 출력
            }

     

    다음과 같은 반복문도 가능하다. 앞의 코드는 정수형배열을 먼저 생성 후 값을 초기화해 준 뒤, 정수형 변수를 하나 만들어서 값을 하나하나 대입하여 출력하였다.

     

     

     

     

            int[] numbers = {1, 2, 3, 4, 5};
            
            for(int i=0; i<numbers.length; i++){
                System.out.println(numbers[i]);
            }

    이 코드도 바로 위 코드와 동일하다는것을 알 수 있다.

    여기서 numbers.length라는 게 사용되었는데. length라는 것은  배열의 길이를 가져와 사용자에게 알려주는 메서드이다.

     

     

     

     

     

     

    배열 사용법
            int [] a = {1, 2, 3, 4}; // 배열a 초기화
            int [] b = a; // 배열b 선언
            b[0] = 99; // 배열b의 0번째 값을 99로 변경
            System.out.println(a[0]); // 배열a의 0번째 값 출력

    처음 이 코드를 봤을 때 출력값을 1이라고 생각했다. 이유는 b배열에 a의 값을 넣어준 뒤 b를 사용하는 것으로 생각하였고, 이미 b의 값에는 1,2,3,4가 들어가 있고 이를 수정하여도 a와는 별개로 동작할 것 같았다. 하지만 이는 틀렸고 저렇게 int [] b = a를 사용한다면 결국 배열 a, b는 같은 주소값을 바라보고 참조하여 사용하며 b의 배열값을 바꾸면 a도 동일하게 적용된다는 것을 알게 되었다. 아래에서 이를 해결하는 메서드를 알아볼 것이다.

     

     

     

            int[] a = {1, 2, 3, 4};
            int[] b = Arrays.copyOf(a, a.length);

    이렇게 Arrays.copyof를 사용하여 배열의 이름, 배열의 길이를 넣어주게 되면, b라는 새로운 배열에 값을 그대로 넣어주게 된다. 이렇게 생성하게 되면 배열 a와 b는 완전히 다른 배열이라고 생각할 수 있다.

     

     

     

     

    ArrayList<Integer> intList = new ArrayList<Integer>();

    이것은 List형 배열이다. 일반 Array배열과 차이점이 무엇인지 궁금해서 찾아보았다. 간단하게 설명하면

    Array는 최초의 길이를 알아야 하고, 정적배열이다.

    List(ArrayList)는 크기가 가변적으로 변할 수 있고, 동적배열이라는 것을 기억해둬야 한다.

    위의 리스트에서 값을 가져오려면 System.out.println(intList.get(값번호)); 를 사용하여 가져오면 된다.

     

     

     

     

     

     

    과제

    마지막으로 위와 같은 과제를 받게 되었다.

     

    코딩결과는??

    '

    '

    '

    package week02;
    
    import java.util.*;
    
    public class note {
        public static void main(String[] args) {
    
            Scanner sc = new Scanner(System.in);
    
            System.out.println("저장할 자료구조명을 입력하세요.(List / Set / Map)");
            String LSM = sc.nextLine(); // LSM에 자료구조명 저장
    
            System.out.println("요리제목을 입력하세요 : ");
            String title = sc.nextLine(); // title에 요리제목 저장
    
            switch(LSM){
                case "List" :
                    System.out.println("레시피를 한문장씩 입력하세요.");
                    ArrayList<String> textList = new ArrayList<>();
                    while(true){
                        String text = sc.nextLine();
                        if(Objects.equals(text, "끝")){
                            break;
                        }
                        textList.add(text);
                    }
    
                    System.out.println("[ List 으로 저장된 " + title+" ]");
                    for(int i=0; i<=textList.size(); i++){
                        int num = i+1;
                        System.out.println(num+". "+textList.get(i));
                    }
                    break;
    
                case "Set" :
                    System.out.println("레시피를 한문장씩 입력하세요.");
                    LinkedHashSet<String> textSet = new LinkedHashSet<>();
                    while(true){
                        String text = sc.nextLine();
                        if(Objects.equals(text, "끝")){
                            break;
                        }
                        textSet.add(text);
                    }
                    System.out.println("[ Set 으로 저장된 " + title+" ]");
    
                    Iterator iterator = textSet.iterator();
                    for(int i=0; i<textSet.size(); i++){
                        int num = i+1;
                        System.out.println(num+". "+iterator.next());
                    }
                    break;
    
                case "Map" :
                    System.out.println("레시피를 한문장씩 입력하세요.");
                    Map<Integer, String> textMap = new HashMap<>();
                    int number = 1;
                    while(true){
                        String text = sc.nextLine();
                        if(Objects.equals(text, "끝")){
                            break;
                        }
                        textMap.put(number++, text);
                    }
                    System.out.println("[ Map 으로 저장된 " + title+" ]");
                    for(int i=1; i<=textMap.size(); i++){
                        System.out.println(i+". "+textMap.get(i));
                    }
                    break;
    
                default :
                    System.out.println("지정된 자료구조가 아닙니다.");
                    break;
            }
    
    
        }
    }

    생각보다 오래 걸렸다. List와 Set은 괜찮았지만 Map을 사용하여 저장할 때 구조와 체크해줘야 할 것이 많아서 검색을 많이 해서 참고하였다. 그래도 자료형에 대한 기억측면에선 확실히 도움이 될 것 같다. 

     

     

     

     

     

    정리

    오늘은 조건문, 반복문을 복습하였고 여러 가지 종류의 컬렉션을 배우고 직접 코딩하며 사용해 보았다. 처음 접해보는 문법으로써 헷갈리는 부분이 상당히 있었다. 특히 Map부분에 대해서는 더 알고 넘어갈 수 있도록 내일 다시 복습할 예정이다. 또한 배열에 대한 복사 부분에서도 나의 틀렸던 지식을 고칠 수 있게 되어서 다행이라고 생각했다.

     

    반응형
    프로필사진

    남건욱's 공부기록