int a = 82;
if(a<0){
System.out.println("음수입니다.");
if(a%2==0){
System.out.println("짝수입니다.");
}
}else if(a==0){
System.out.println("0입니다");
if(a%2==0){
System.out.println("짝수입니다.");
}
}else if(a>0) {
System.out.println("양수입니다.");
if(a%2==0){
System.out.println("짝수입니다.");
}
}else{
System.out.println("해당하는 값이 없습니다.");
}
2.2 switch
String day = "sunday";
switch (day){
case "saturday" :
System.out.println("월요일이다"); break;
case "sunday" :
System.out.println("일요일이다"); break;
default:
System.out.println("주말이 아니다"); break;
}
int v=0;
while(v!=20){
v = (int)(Math.random() * 50); // 20이 나올 떄까지 계속 반복한다.
System.out.println(v);
}
do{ // 최소한 한 번은 실행한다. 앞서의 결과로 v=20이 됐으나, do로 인하여 v가 다시 한 번 값이 바뀌며 while문을 돈다.
v = (int)(Math.random() * 50);
System.out.println(v);
}while(v!=20);
int i = 0;
while(i==0){
//...코드들...//
}
3.2 for
for(int i=1; i<=12; i++){
System.out.println(i+"월 입니다.");
}
for(int i=0; i<1; i--){
//....코드들....//
}
3.3 break
int vv = 0;
while (true) { // 조건문이 true라서 무한루프가 될 가능성이 있었으나 break로 인해 반복문을 빠져나오는 것을 확인할 수 있다.
vv = (int) (Math.random() * 50);
System.out.println(vv);
if (vv == 20) break;
}
3.4 continue
for(int i=0; i<15; i++){
if(i%6==0) continue; // 6의 배수는 continue로 인해 아래의 코드에 진입하지 못함.
System.out.println(i); //그러므로 6의 배수를 제외한 숫자만 출력됨.
}
과제 1. live-study 대시 보드를 만드는 코드를 작성하세요.
깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크 할 것.
참여율을 계산하세요. 총 18회에 중에 몇 %를 참여했는지 소숫점 두자리가지 보여줄 것.
Github 자바 라이브러리를 사용하면 편리합니다.
깃헙 API를 익명으로 호출하는데 제한이 있기 때문에 본인의 깃헙 프로젝트에 이슈를 만들고 테스트를 하시면 더 자주 테스트할 수 있습니다.
과제에 해당하는 라이브러리는 처음 사용해보는 라이브러리였다. 그리고 이 라이브러리는 사이트는 과제를 풀기 위한 힌트가 특별히 없었다. 그저 엑세스 하는 방법만이 있었다.
하지만 API가 잘 구성되었는지, 그래프를 하나씩 찍어가며 라이브러리를 탐색한 것만으로 원하는 값을 추출할 수 있었다.
public class GointoGit {
public static void main(String[] args) throws IOException {
GitHub github = new GitHubBuilder().withOAuthToken("********").build(); //개인토큰을 통해 엑세스 권한을 얻는다.
GHRepository repository = github.getRepository("infoqoch/live-study").getSource();//fork한 리포지토리의 소스를 얻는다.
List<GHIssue> issues = repository.getIssues(GHIssueState.ALL); //GHIssueState는 Enum으로 되어 있다. All을 통해 모든 이슈를 얻는다.
int size = issues.size();//size를 통해 for문을 돌린다.
System.out.println("size:"+size);
Map<String, Integer> counter = new HashMap<>();
for(int i=0; i<size; i++){
List<GHIssueComment> comments = issues.get(i).getComments(); // 이슈에 대한 커멘츠를 얻는다.
for(int j=0; j< comments.size(); j++){
String name = comments.get(j).getUser().getLogin(); // 커멘츠->유저->유저고유이름(여기서는 getLogin()이 닉네임인 것 같다)
if(!counter.containsKey(name)){
counter.put(name,1);
}else {
Integer integer = counter.get(name);
counter.put(name, integer+1);
}
}
}
Iterator<String> iterator = counter.keySet().iterator();
while (iterator.hasNext()){
String names = iterator.next();
System.out.printf(names+": %.2f", (float)counter.get(names)/size);
}
}
결과
whiteship: 1.00
infoqoch: 0.24
리포지토리를 생성한 백기선 개발자님(whiteship)은 1.00이다. 이를 통해 getUser()가 하나의 이슈에서 하나의 유저가 커멘츠를 여러개 적는다 하더라도 중복해서 값을 가져오지 않음을 간접적으로 확인할 수 있었다. 왜냐하면 하나의 이슈에서 whiteship으로 된 커멘츠는 매우 많으니까. 물론 교차 검증을 하지 않았기 때문에 확실하지는 않지만, 일단 검토는 생략했다. 참고로 나는 0.24이다. 분발해야지.
완료하지 못한 과제는 차후 추가하도록 하겠습니다.
백기선 개발자님의 자바 라이브 스터디를 하고 있습니다.