728x90
Obj.자바가 제공하는 제어문을 학습.
Todo.
4-1 선택문
4-2 반복문
Assgnment.
0. JUnit5 학습하기
1. live-study 대시보드 만드는 코드 작성
2. LinkedList 구현
3. Stack 구현
4. ListNode를 사용 Stack 구현
5. Queue 구현
4-1 선택문
주어진 조건으로 if문과 switch문으로 나뉘어 진다. 두 방법은 간단하므로 넘어간다. switch문은 다양한 방법이 있으니 3주차에서 한 글을 보면 될듯
4-2 반복문
기본적으로 while문과 for문이 있음.
while(boolean 조건식){
조건이 true일때 계속 반복 된다.
조건이 false이면 while문이 종료 된다.
break; 를 만나도 종료가 된다.
continue; 를 만나면 가장 가까운 반복문으로 진행한다.
}
do{
일단 한번 진행하고나서
조건이 true일때 계속 반복 된다.
}while(조건);
for문에는 여러가지가 있다.
1. 기본
기본적인 for문
for(int i = inital value; i < iterate time; i++){
do something.
continue, break 모두 사용 가능하다.
}
2. Label 사용
lable : for(조건식){
do something
for(조건식){
break label; // 이 경우에는 label이 달린 for문이 중단된다.
continue label://이 경우에는 label이 달린 for문의 continue가 진행된다.
}
}
3. Enhanced for문 (For each)
for(Type 변수 : Collection<Type> or Type[] array){
변수를 활용하여 do somethings.
}
코드
int[] Arr = {1,2,3,4,5,6,7,8,9};
int sum = 0;
for(int v : Arr){
sum += v;
}
A-0 JUnit 5
JUnit 5의 user-guide를 기반으로 합니다.
1. JUnit 5의 특징
- JUnit은 Java 8 이상에서 동작하고, 자바용 단위 테스트 작성을 위한 것이다.
- 접근 제어자가 변경이 가능하다.
- Extention 하나로 여러 규칙을 통합하고 조합이 가능하다.
2. 어노테이션
- @Test : Test 메서드 임을 나타 내는 것이다.
- @TestFactory : 동적 테스드들 위한 것.
- @DisplayName("test name") : 디스플레이 네임을 정의.
- @BeforeEach : 각각의 테스트 메서드 전에 실행. (JUnit4 : @Before)
- @AfterEach : 각각의 테스트 메서드 후에 실행. (JUnit4 : @After)
- @BeforeAll : 모든 테스트 메서드들 전에 실행. (JUnit4 : @BeforeClass)
- @AfterAll : 모든 테스트 메서드들 후에 실행됩니다.(JUnit4 : @AfterClass)
- @Nested : nested, non-static 테스트 클래스임을 나타냄.
- @Tag("tag name") : 테그들을 정의.
- @ExtendWith : custom extensions을 등록할때 사용
- @Disable : 메서드 를 비활성화 할때 사용.(JUnit4 : @ignore)
- @Order(정수 값) : 우선순위 지정
3. Assertion
람다식을 사용 할 수 있게 되었음.
-
assertTrue & assertAll
class AssertionsDemo { private final Calculator calculator = new Calculator(); private final Person person = new Person("Jane", "Doe"); @Test void standardAssertions() { assertEquals(2, calculator.add(1, 1)); assertEquals(4, calculator.multiply(2, 2), "The optional failure message is now the last parameter"); assertTrue('a' < 'b', () -> "Assertion messages can be lazily evaluated -- " + "to avoid constructing complex messages unnecessarily."); } @Test void groupedAssertions() { // In a grouped assertion all assertions are executed, and all // failures will be reported together. assertAll("person", () -> assertEquals("Jane", person.getFirstName()), () -> assertEquals("Doe", person.getLastName()) ); }
-
assertThat
Third-party 라이브러리로 hamcrest를 사용해야 한다.import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import example.util.Calculator; import org.junit.jupiter.api.Test; class HamcrestAssertionsDemo { private final Calculator calculator = new Calculator(); @Test void assertWithHamcrestMatcher() { assertThat(calculator.subtract(4, 1), is(equalTo(3))); } }
A-1 live-study 대시보드 만드는 코드 작성
- 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크 할 것.
- 참여율을 계산하세요. 총 18회에 중에 몇 %를 참여했는지 소숫점 두자리가지 보여줄 것.
- Github 자바 라이브러리를 사용하면 편리합니다.
- 깃헙 API를 익명으로 호출하는데 제한이 있기 때문에 본인의 깃헙 프로젝트에 이슈를 만들고 테스트를 하시면 더 자주 테스트할 수 있습니다.
public class dashBoard{
static private final String token = "token";
static private int cnt;
public static void dashBoard() throws IOException {
GitHub gitHub = new GitHubBuilder().withOAuthToken(token).build();
GHRepository ghRepository = gitHub.getRepository("whiteship/live-study");
List<GHIssue> issues = ghRepository.getIssues(GHIssueState.ALL);//이슈 다 가져오기
cnt = issues.size();
Map<String , Integer> participant = new HashMap<>();
Set<String> member = new HashSet<>();
for (GHIssue issue : issues){
List<GHIssueComment> comments = issue.getComments();
for(GHIssueComment comment: comments){
member.add(comment.getUser().getLogin());
}
for (String tmp : member){
if(!participant.containsKey(tmp))
participant.put(tmp,1);
else participant.put(tmp,participant.get(tmp)+1);
}
}
BufferedWriter bf = new BufferedWriter(new OutputStreamWriter(System.out));
participant.forEach((key, value)->{
double percent = (double)(value*100)/cnt;
try {
bf.write(key+" : "+String.format("%.2f",percent)+"%\n");
} catch (IOException e) {
e.printStackTrace();
}
});
bf.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)를 구현하세요.
public class ListNode {
int data;
ListNode next;
public ListNode() {
}
public ListNode(int data) {
this.data = data;
}
public ListNode add(ListNode head, ListNode nodeToAdd, int position){
ListNode list = head;
for (int i = 0; i < position-1; i++) {
list = list.next;
}
nodeToAdd.next = list.next;
list.next = nodeToAdd;
return head;
}
public ListNode remove(ListNode head, int positionToRemove){
ListNode list = head;
ListNode dnode;
if (positionToRemove == 0){
dnode = list;
head = list.next;
dnode.next = null;
return dnode;
}
for (int i = 0; i < positionToRemove-1; i++) {
list = list.next;
}
dnode = list.next;
list.next = dnode.next;
dnode = null;
return dnode;
}
public boolean contains(ListNode head, ListNode nodeTocheck){
while (head.next != null){
if (head.data == nodeTocheck.data)
return true;
head = head.next;
}
return false;
}
}
3. Stack 구현
- int 배열을 사용해서 정수를 저장하는 Stack을 구현하세요.
- void push(int data)를 구현하세요.
- int pop()을 구현하세요.
public class Customstack {
int[] stack;
int top;
public Customstack(int size) {
this.stack = new int[size];
top = -1;
}
public void push(int data){
stack[++top] = data;
}
public int pop(){
if (top == -1)
return top;
return stack[top--];
}
}
4. 앞서 만든 ListNode를 사용해서 Stack을 구현하세요.
- ListNode head를 가지고 있는 ListNodeStack 클래스를 구현하세요.
- void push(int data)를 구현하세요.
- int pop()을 구현하세요
public class ListNodeStack {
ListNode listNode;
int top;
public ListNodeStack() {
listNode = new ListNode();
top = -1;
}
public void push(int data){
listNode.add(listNode,new ListNode(data),top++);
}
public int pop(){
if (top == -1)
return top;
return listNode.remove(listNode,top--).data;
}
}
5. Queue를 구현하세요.
- 배열을 사용해서 한번
- ListNode를 사용해서 한번.
배열을 이용
public class ArrayQueue {
int top,end;
int[] queue;
public ArrayQueue(int size) {
queue = new int[size];
top=end=0;
}
public void push(int data){
queue[end++] = data;
}
public int pop(){
if (top == end)
return -1;
return queue[top++];
}
}
ListNode 사용
public class ListNodeQueue {
ListNode listNode;
int top,end;
public ListNodeQueue() {
listNode = new ListNode();
top=end=0;
}
public void push(int data){
listNode.add(listNode,new ListNode(data),top++);
}
public int pop(){
if (top==end)
return -1;
return listNode.remove(listNode,end++).data;
}
}
728x90
'Java > [Whiteship]자바스터디' 카테고리의 다른 글
6주차 과제 : 상속 (0) | 2021.01.17 |
---|---|
5주차 과제 : 클래스 (0) | 2021.01.09 |
3주차 과제 : 연산자 (0) | 2021.01.08 |
2주차 과제 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2021.01.08 |
1주차 과제 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2021.01.07 |