korean IT student

[Java-Live-Study] 4주차 - 제어문 본문

back-end/JAVA

[Java-Live-Study] 4주차 - 제어문

현창이 2021. 8. 19. 13:32

 

목표

자바가 제공하는 제어문을 학습하세요.

학습할 것 (필수)

  • 선택문
  • 반복문

 

1. 선택문

  • if/else 문 
  • int a = 5; // a가 5보다 크거나 같으므로 실행 if(a >= 5){ a = 7; } =================================== int a = 6; if(a > 5){ System.out.println("a가 5보다 큰 경우"); } else if(a > 7){ System.out.println("a가 7보다 큰 경우"); } else { System.out.println("위의 조건이 아닌 경우"); } ===================================​​
  • switch 문 - 변수의 값에 따라 문장을 실행하는 제어문
    String test = "study";
    
    switch (test) {
    	case "test" :
        	System.out.println("test에 진입하였습니다.");
            break;
        case "study" :
        	System.out.println("study에 진입하였습니다.");
            break;
        case "korea" :
        	System.out.println("korea에 진입하였습니다.");
            break;
    	default:
        	System.out.println("case에 부합하는 데이터가 없네요.");
            break;
    }​

2. 반복문

  for문

  • 반복된 횟수가 고정된 경우 사용하거나, index 위치나 값이 필요한 경우 사용한다.
    // 1부터 10까지 출력
    for (int i = 1; i <= 10; i++){
    	System.out.println(i);
    }​

for-each문(향상된 for문)

  • 배열 혹은 컬렉션의 순회시에 다음과 같이 조금 더 향상된 for 문을 사용할 수 있다.
    int[] numbers ={1,2,3,4,5};
    
    for(int num : numbers){
    	System.out.println(num);
    }

while 문

  • 특정 조건이 참일 경우에 지정한 코드 블럭이 계속해서 수행되는 구문이다.
    int a = 5;
    
    // a가 10 미만 일 경우 while문
    while(a < 10){
     a++;
    }

do while 문

  • while 문이 조건식을 먼저 판별하고 코드를 수행했다면, do-while 문은 먼저 코드블럭을 수행하고 조건을 판별한다.
    int a = 5;
    
    do {
      a++;
    }while(a < 10){
     System.out.println(a);
    }​​

 

과제 (옵션)

과제 0. JUnit 5 학습하세요.

  • 인텔리J, 이클립스, VS Code에서 JUnit 5로 테스트 코드 작성하는 방법에 익숙해 질 것.
  • 이미 JUnit 알고 계신분들은 다른 것 아무거나!
  • 더 자바, 테스트 강의도 있으니 참고하세요~
  • [과제 제출] - https://changhyunit.tistory.com/91

과제 1. live-study 대시 보드를 만드는 코드를 작성하세요.

  • 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크 할 것.
  • 참여율을 계산하세요. 총 18회에 중에 몇 %를 참여했는지 소숫점 두자리가지 보여줄 것.
  • Github 자바 라이브러리를 사용하면 편리합니다.
  • 깃헙 API를 익명으로 호출하는데 제한이 있기 때문에 본인의 깃헙 프로젝트에 이슈를 만들고 테스트를 하시면 더 자주 테스트할 수 있습니다.
    public class gitTest {
        public static void main(String[] args) throws IOException {
            String my_token = "my_token";
            GitHub github = new GitHubBuilder().withOAuthToken(my_token).build();
    
            // gitRepository 연결
            GHRepository repo = github.getRepository("koreanstudent/live-study").getSource();
    
            // 모든 이슈를 가져온다.
            List<GHIssue> issues = repo.getIssues(GHIssueState.ALL);
    
            // 참여자 이름, 참여 횟수
            Map<String, Integer> participant = new HashMap<>();
    
    
            for (GHIssue issue : issues) {
    
                // 유저 중복을 제거하기 위한 Set
                Set<String> onlyOneParticipant = new HashSet<>();
    
                //댓글 한개 이상 단 경우 유저이름 중복 제거
                for (GHIssueComment comment : issue.getComments()) {
                    onlyOneParticipant.add(comment.getUser().getName());
                }
    
                //카운트 증가해주기
                for (String name : onlyOneParticipant) {
                    if(participant.containsKey(name)){
                        participant.replace(name,participant.get(name)+1);
                        continue;
                    }
                    participant.put(name,1);
                }
            }
    
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            //참여율 출력
            for(String name : participant.keySet()){
                double rate = (double)(participant.get(name) * 100) / issues.size();
                bw.write("name : " + name);
                bw.write(", Participation Rate : "+String.format("%.2f",rate)+"%");
                bw.newLine();
            }
            bw.close();
        }
    }​

과제 2. LinkedList를 구현하세요.

  • LinkedList에 대해 공부하세요.
  • 정수를 저장하는 ListNode 클래스를 구현하세요.
  • ListNode add(ListNode head, ListNode nodeToAdd, int position)를 구현하세요.
  • ListNode remove(ListNode head, int positionToRemove)를 구현하세요.
  • boolean contains(ListNode head, ListNode nodeTocheck)를 구현하세요.

과제 3. Stack을 구현하세요.

  • int 배열을 사용해서 정수를 저장하는 Stack을 구현하세요.
  • void push(int data)를 구현하세요.
  • int pop()을 구현하세요.

과제 4. 앞서 만든 ListNode를 사용해서 Stack을 구현하세요.

  • ListNode head를 가지고 있는 ListNodeStack 클래스를 구현하세요.
  • void push(int data)를 구현하세요.
  • int pop()을 구현하세요.

과제 5. Queue를 구현하세요.

  • 배열을 사용해서 한번
  • ListNode를 사용해서 한번.
Comments