728x90

 

값을 하나씩 받아서

그냥 println()에 식을 넣어주었다. 별다른 어려운게 없이

println에 출력 쪽 데이터를 보고 적으면 된다

 

정답

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        System.out.println((a+b)%c);
        System.out.println(((a%c)+(b%c))%c);
        System.out.println((a*b)%c);
        System.out.println(((a%c)*(b%c))%c);

    }
728x90
반응형
728x90

 

Cursor 개념

 SQL문을 처리한 결과 집합을 가리키는 개념으로

일종의 포인터(C 포인터 개념과 유사하다고 함)

 

자바하는데 왜 뜬금없이 SQL이 나오나 생각이 들텐데 필자도 그렇다...

여튼 아래는 인텔리제이에서 파보다보니까 cursor가 나오게 됐고 "기준점"정도로 이해하면 될 것 같다

 

 

1.listIterator(int index) : iterator를 사용할 컬렉션의 해당 인덱스번호부터 값을 가져온다

// 해당 변수의 1번 인덱스부터 받아오기
ListIterator<Student> li2 = al.listIterator(1);

 

2.hasNext()는 while문으로 한번 돌리고 나면 기준점이 끝으로 가있어 다시 돌려도 의미x

while(li.hasNext()){
    System.out.print(li.next()+" "); // a(0점) a(1점) a(2점) a(3점) a(4점)
}
// hasNext() 두번째 돌리면 처음부터 다시 가는게 아니라 이미 끝에 있기에 의미없음
while(li.hasNext()){
    System.out.print(li.next()+" "); // 출력x
}

 

3.출력x던 hasNext()를 hasPrevious()를 쓰면 다시 출력이 된다

// hasNext() 두번째 돌리면 처음부터 다시 가는게 아니라 이미 끝에 있기에 의미없음
while(li.hasNext()){
    System.out.print(li.next()+" "); // 출력x
}
System.out.println();
while(li.hasPrevious()){
    System.out.print(li.previous()+" "); // a(4점) a(3점) a(2점) a(1점) a(0점)
}
System.out.println();
// hasPrevious()로 앞으로 돌렸기에 기준점이 앞으로 와있어 hasNext() 다시 작동
while(li.hasNext()){
    System.out.print(li.next()+" "); // a(0점) a(1점) a(2점) a(3점) a(4점) 
}

 

원데이터인 ArrayList인 al에 add하면 추가값이 잘 나오는데 ListIterator인 li2에 add하면 값이 while+hasNext()에서 안나온다. 근데 디버깅하면 안에 size도 그렇고 값이 추가된 것 같이 나오는데 이것저것 해봤지만 미스테리

아직까지 왜 5,6이 추가 안됐는지는 미지수고 더 파보다간 아무것도 못할 것 같아서

나중에 다시보기로  하자

 

 

 

728x90
반응형
728x90

 

코딩하는 것이 손과 발을 움직이듯 자연스러워지도록!

 

다른 ArrayList의 값을 변수 통째로 불러와 얇은카피(shallow copy)해서 addAll의 효과를 낼 수 있다!

ArrayList<Student> al = new ArrayList<>();
// 1-1. // add(E e):boolean
al.add(new Student("a",10));
al.add(new Student("b",10));
System.out.println(al); // [a(10점), b(10점)]

ArrayList<Student> al2 = new ArrayList<>(al); // shallow copy
System.out.println(al2); // [a(10점), b(10점)]

 

indexOf(Object o): int
해당 객체의 인덱스번호 반환
해당 값이 없을경우 -1 반환

System.out.println(al.indexOf(new Student("-c",10))); // -1
System.out.println(al.indexOf(new Student("c",10))); // 2

 

 

 

 

 

 ArrayList<Student> al = new ArrayList<>();
        // 1-1. // add(E e):boolean
        al.add(new Student("a",10));
        al.add(new Student("b",10));
        System.out.println(al); // [a(10점), b(10점)]

        ArrayList<Student> al2 = new ArrayList<>(al); // shallow copy
        System.out.println(al2); // [a(10점), b(10점)]

        // 1-2. add(int index, E element):void
        al.add(2,new Student("c",10));
        System.out.println(al); // [a(10점), b(10점), c(10점)]

        // 2. size()
        System.out.println(al.size()); // 3

        // 3.remove()
        // remove(int index):E
        // remove(Object o):boolean
        al2.remove(1);
        System.out.println(al2); // [a(10점)]
        System.out.println(al2.remove(0)); // a(10점) <- 지운 객체 반환
        System.out.println(al2); // []

        al2.addAll(al);

        // 4. set()
        // set(int index, E e):E
        // == replace 대체
        al2.set(2,new Student("d",10));
        System.out.println(al2); // [a(10점), b(10점), d(10점)]
        System.out.println(al2.set(2, new Student("e",10))); // d(10점) <- 교체한 객체
        System.out.println(al2); // [a(10점), b(10점), e(10점)]
        System.out.println();


        // 5. get()
        // get(int index):E
        System.out.println(al.get(1)); // b(10점)

        System.out.println();
        for(Student a : al){
            System.out.println(a); // a(10점) b(10점) c(10점)
        }
        for(Student a : al){
            System.out.println(al);
//            [a(10점), b(10점), c(10점)]
//            [a(10점), b(10점), c(10점)]
//            [a(10점), b(10점), c(10점)]
        }


        // 6. contains(Object) : boolean
        // 해당 객체를 포함한지 true/false반환

        System.out.println(al.contains(new Student("a",10))); // true
        if(al.contains(new Student("a",10))){
            System.out.println("al안에 a가 있으면 출력하기"); // al안에 a가 있으면 출력하기
        }


        // 7. indexOf(Object o): int
        // 해당 객체의 인덱스번호 반환
        // 해당 값이 없을경우 -1 반환
        System.out.println(al.indexOf(new Student("-c",10))); // -1
        System.out.println(al.indexOf(new Student("c",10))); // 2


        // 8. equals(Object o):boolean
        // 지정된 객체와 목록이 같은지 비교

        System.out.println(al.equals(new Student("a",10))); // false


        // 9. clear()
        // clear():void
        al.clear();
        System.out.println(al); // []

        // 10. isEmpty():boolean
        al.isEmpty();
        System.out.println(al); // []
728x90
반응형
728x90


728x90
반응형
728x90

 

Math.random()

Math class에서 random() 메소드로 난수 생성하기

0~1의 숫자가 소수로 생성되는데 곱하기 3하면 0~3 사이이고 이걸 (int)로 강제 형변환하면

소수점 이하는 절삭되므로 원하는 정수인 난수가 생성됨.

이거를 배열의 인덱스로 넣어서 가위 바위 보 중 랜덤하게 낼 수 있게 만드는 로직

 

 

// 최대값, 최소값 구하기
        int max02=0;
        int min02=10;
        int[] number = new int[10];

        for(int i=0; i < number.length;i++){
            number[i] = i+1;
        }
        System.out.println(Arrays.toString(number)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

        for(int i=0; i<number.length;i++){
            if(max02 < number[i]){
                max02 = number[i];
            }
            if(min02 > number[i]){
                min02 = number[i];
            }
        }

        System.out.println(max02); // 10
        System.out.println(min02); // 1




        // 가위바위보
        String[] rps2 = {"가위","바위","보"};
        int hand = 0;
        for(int i=0; i<3; i++){
            hand = (int)(Math.random() * 3);
            System.out.println(rps2[hand]);
        }
728x90
반응형
728x90

https://github.com/neverGiveUpppppp/Comento_SQL_Oracle

 

GitHub - neverGiveUpppppp/Comento_SQL_Oracle: 직무부트캠프 Comento

직무부트캠프 Comento. Contribute to neverGiveUpppppp/Comento_SQL_Oracle development by creating an account on GitHub.

github.com

 

2주차 과제 첨삭

답안 및 해설

 

-----------------------------------------------------------------
----------------------------- 2주차 과제 -------------------------
-----------------------------------------------------------------

--문제1) 직원번호 10004141 의 이름은? 힌트 : emp_c에 있음
--  최ㅇ규
SELECT EMP_NM FROM EMP_C
WHERE EMP_NO = 10004141;
SELECT * FROM EMP_C
WHERE EMP_NO = 10004141;

--문제2) 직원번호 10004141 는 몇 명의 가족이 있나요? 힌트 fam_c
--  5명
SELECT * FROM FAM_C
WHERE EMP_NO = 10004141;

--문제3) 직원번호 10004141 의 소속 부서 코드는? 힌트 emp_c
-- A183500
SELECT ORG_CD FROM EMP_C
WHERE EMP_NO = 10004141;


--문제4) 직원번호 10004141 의 소속 부서 명은?  힌트 org_c
-- 전XX룹
SELECT ORG_NM FROM ORG_C
WHERE ORG_CD = 'A183500';
-- 정답
SELECT ORG.ORG_NM FROM EMP_C EMP 
INNER JOIN ORG_C ORG
ON EMP.ORG_CD = ORG.ORG_CD
WHERE EMP.EMP_NO = '10004141';

--문제5) 남자 / 여자 직원이 몇 명인지 한번에 알 수 있는 sql을 작성하세요. (group by gender_cd)
-- 남 1374명 // 여 621명
-- 전체 개수를 세어야하니 COUNT집계 함수 사용해야함

--SELECT COUNT(GENDER_CD) --DECODE(SUBSTR(GENDER_CD,1,1),1,'남','여') AS 성별  
--FROM EMP_C
--GROUP BY GENDER_CD;
--HAVING GENDER_CD = 2; -- 필요없는 조건

SELECT GENDER_CD,COUNT(*)
FROM EMP_C
GROUP BY GENDER_CD;

-- DECODE+ALIAS로 분류 컬럼 추가
SELECT DECODE(SUBSTR(GENDER_CD,1,1),1,'남','여') AS 성별, COUNT(*)
FROM EMP_C
GROUP BY GENDER_CD;





--문제6) 직원별 자녀가 몇 명인지 한번에 알 수 있는 sql을 작성하세요. (rel_type_cd가 A27이면 자녀)
--

SELECT *
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)
WHERE REL_TYPE_CD = 'A27';    
--WHERE EMP_NO = 10004141;

-- WHERE문에 E.EMP_NO = 10004141 추가로 넣어서 사원 한명의 자녀 목록 확인
SELECT E.EMP_NO, EMP_NM, E.BIRTH_YMD, FAM_NM, REL_TYPE_CD,F.BIRTH_YMD
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)
WHERE REL_TYPE_CD = 'A27'
AND E.EMP_NO = 10004141; -- 10004141	최ㅇ규	19551223	최ㅇ철	A27	19850503

-- 자녀 둘인 걸 확인 했으니 COUNT()로 자녀수 조회ㄱㄱ
SELECT COUNT(E.EMP_NO)
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)
WHERE REL_TYPE_CD = 'A27'
AND E.EMP_NO = 10004141; -- 2

-- 전체 직원의 자녀수 인듯. 직원 별 자녀수가 필요
SELECT COUNT(E.EMP_NO)
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)
WHERE REL_TYPE_CD = 'A27'; -- 2412

-- 직원 별이니까 GROUP BY 통해 묶고 대상은 EMP_NO이면 될 듯
SELECT E.EMP_NO, COUNT(E.EMP_NO)
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)    
WHERE REL_TYPE_CD = 'A27'
GROUP BY E.EMP_NO; -- 인출행 수 1239

--SELECT E.EMP_NO,E.EMP_NM, COUNT(E.EMP_NO)
--FROM EMP_C E
--    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)    
--WHERE REL_TYPE_CD = 'A27'
--GROUP BY E.EMP_NO; -- 인출행 수 1239 -> 조회할려는 컬럼이 그룹바이로 지정이 안됐기에 에러 발생

-- ANSI 표준 JOIN
SELECT E.EMP_NO, E.EMP_NM, COUNT(E.EMP_NO) "자녀수"
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)    
WHERE REL_TYPE_CD = 'A27'
GROUP BY E.EMP_NO, E.EMP_NM; -- 인출행 수 1239

-- 오라클 전용 JOIN구문
SELECT E.EMP_NO, E.EMP_NM, COUNT(E.EMP_NO) "자녀수"
FROM EMP_C E, FAM_C F
WHERE E.EMP_NO = F.EMP_NO
AND REL_TYPE_CD = 'A27'
GROUP BY E.EMP_NO, E.EMP_NM;  -- 인출행 수 1239

-- 문제6번 정답
SELECT EMP_NO, COUNT(*) FROM FAM_C 
WHERE REL_TYPE_CD = 'A27' 
GROUP BY EMP_NO; -- 1239


--문제7) 생년월일이 1970년 1월 1일 이전인 직원의 수를 구하는 sql을 작성하세요.
--
SELECT EMP_NM 이름, BIRTH_YMD 생년월일 FROM EMP_C
WHERE BIRTH_YMD > 19700101;
-- 정답
SELECT COUNT(*) FROM EMP_C 
WHERE BIRTH_YMD < '19700101';

--문제8) 현재 재직 중인 직원의 전체 수를 구하는 sql을 작성하세요
SELECT COUNT(*) 직원전체수 FROM EMP_C
WHERE RETIRE_YMD > TO_CHAR(990101);
-- 정답
SELECT COUNT(*) FROM EMP_C 
WHERE RETIRE_YMD = '99991231';

SELECT * FROM EMP_C;
SELECT * FROM FAM_C;
SELECT * FROM ORG_C;
SELECT * FROM FAM_REL_C;
728x90
반응형
728x90

 

객체지향 원리 사용 MVC 패턴 간단구현

 

uppercase로 y Y 둘 다 받기

 

from OOP assignment

public class SnackController {
	
	private Snack s = new Snack();
	
	public SnackController() {}
	
	public String saveData(String kind, String name, String flavor, int numOf, int price) {
		s.setKind(kind);
		s.setName(name);
		s.setFlavor(flavor);
		s.setNumOf(numOf);
		s.setPrice(price);
		
		return "저장 완료되었습니다.";
	}
	
	public String confirmData() {
		return s.information();
	}
}

 

public class SnackMenu {
	private Scanner sc = new Scanner(System.in);
	private SnackController scr = new SnackController();
	
	public void menu() {
		
		System.out.println("스낵류를 입력하세요.");
		System.out.print("종류 : ");
		String kind = sc.nextLine();
		System.out.print("이름 : ");
		String name = sc.nextLine();
		System.out.print("맛 : ");
		String flavor = sc.nextLine();
		System.out.print("개수 : ");
		int numOf = Integer.parseInt(sc.nextLine());
		System.out.print("가격 : ");
		int price = Integer.parseInt(sc.nextLine());
		
		String result = scr.saveData(kind, name, flavor, numOf, price);
		System.out.println(result);
		
		System.out.print("저장한 정보를 확인하시겠습니까?(y/n) : ");
		String answer = sc.nextLine();
		if(answer.toUpperCase().equals("Y")) {
			System.out.println(scr.confirmData());
		}
	}
}
728x90
반응형
728x90


728x90
반응형

'small steps > 운동 - 체력이 국력' 카테고리의 다른 글

22.09.27 운동기록  (0) 2022.09.27
22.09.26 운동기록  (0) 2022.09.26
22.09.16 운동기록  (0) 2022.09.17
22.09.15 운동기록  (0) 2022.09.15
22.09.14 운동기록  (0) 2022.09.14
728x90

 

 

https://github.com/neverGiveUpppppp/Comento_SQL_Oracle

 

GitHub - neverGiveUpppppp/Comento_SQL_Oracle: 직무부트캠프 Comento

직무부트캠프 Comento. Contribute to neverGiveUpppppp/Comento_SQL_Oracle development by creating an account on GitHub.

github.com

 

  • 문제1) 직원번호 10004141 의 이름은? 
  • 문제2) 직원번호 10004141 는 몇 명의 가족이 있나요? 
  • 문제3) 직원번호 10004141 의 소속 부서 코드는? 
  • 문제4) 직원번호 10004141 의 소속 부서 명은? 
  • 문제5) 남자 / 여자 직원이 몇 명인지 한번에 알 수 있는 sql을 작성하세요.
  • 문제6) 직원별 자녀가 몇 명인지 한번에 알 수 있는 sql을 작성하세요. 
  • 문제7) 생년월일이 1970년 1월 1일 이전인 직원의 수를 구하는 sql을 작성하세요.
  • 문제8) 현재 재직 중인 직원의 전체 수를 구하는 sql을 작성하세요.

 

--문제1) 직원번호 10004141 의 이름은? 힌트 : emp_c에 있음
--  최ㅇ규
SELECT EMP_NM FROM EMP_C
WHERE EMP_NO = 10004141;
SELECT * FROM EMP_C
WHERE EMP_NO = 10004141;

--문제2) 직원번호 10004141 는 몇 명의 가족이 있나요? 힌트 fam_c
--  5명
SELECT * FROM FAM_C
WHERE EMP_NO = 10004141;

--문제3) 직원번호 10004141 의 소속 부서 코드는? 힌트 emp_c
-- A183500
SELECT ORG_CD FROM EMP_C
WHERE EMP_NO = 10004141;


--문제4) 직원번호 10004141 의 소속 부서 명은?  힌트 org_c
-- 전XX룹
SELECT ORG_NM FROM ORG_C
WHERE ORG_CD = 'A183500';

--문제5) 남자 / 여자 직원이 몇 명인지 한번에 알 수 있는 sql을 작성하세요. (group by gender_cd)
-- 남 1374명 // 여 621명
-- 전체 개수를 세어야하니 COUNT집계 함수 사용해야함

--SELECT COUNT(GENDER_CD) --DECODE(SUBSTR(GENDER_CD,1,1),1,'남','여') AS 성별  
--FROM EMP_C
--GROUP BY GENDER_CD;
--HAVING GENDER_CD = 2; -- 필요없는 조건

SELECT GENDER_CD,COUNT(*)
FROM EMP_C
GROUP BY GENDER_CD;

-- DECODE+ALIAS로 분류 컬럼 추가
SELECT DECODE(SUBSTR(GENDER_CD,1,1),1,'남','여') AS 성별, COUNT(*)
FROM EMP_C
GROUP BY GENDER_CD;





--문제6) 직원별 자녀가 몇 명인지 한번에 알 수 있는 sql을 작성하세요. (rel_type_cd가 A27이면 자녀)
--

SELECT *
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)
WHERE REL_TYPE_CD = 'A27';    
--WHERE EMP_NO = 10004141;

-- WHERE문에 E.EMP_NO = 10004141 추가로 넣어서 사원 한명의 자녀 목록 확인
SELECT E.EMP_NO, EMP_NM, E.BIRTH_YMD, FAM_NM, REL_TYPE_CD,F.BIRTH_YMD
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)
WHERE REL_TYPE_CD = 'A27'
AND E.EMP_NO = 10004141; -- 10004141	최ㅇ규	19551223	최ㅇ철	A27	19850503

-- 자녀 둘인 걸 확인 했으니 COUNT()로 자녀수 조회ㄱㄱ
SELECT COUNT(E.EMP_NO)
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)
WHERE REL_TYPE_CD = 'A27'
AND E.EMP_NO = 10004141; -- 2

-- 전체 직원의 자녀수 인듯. 직원 별 자녀수가 필요
SELECT COUNT(E.EMP_NO)
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)
WHERE REL_TYPE_CD = 'A27'; -- 2412

-- 직원 별이니까 GROUP BY 통해 묶고 대상은 EMP_NO이면 될 듯
SELECT E.EMP_NO, COUNT(E.EMP_NO)
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)    
WHERE REL_TYPE_CD = 'A27'
GROUP BY E.EMP_NO; -- 인출행 수 1239

--SELECT E.EMP_NO,E.EMP_NM, COUNT(E.EMP_NO)
--FROM EMP_C E
--    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)    
--WHERE REL_TYPE_CD = 'A27'
--GROUP BY E.EMP_NO; -- 인출행 수 1239 -> 조회할려는 컬럼이 그룹바이로 지정이 안됐기에 에러 발생

-- ANSI 표준 JOIN
SELECT E.EMP_NO, E.EMP_NM, COUNT(E.EMP_NO) "자녀수"
FROM EMP_C E
    JOIN FAM_C F ON(E.EMP_NO = F.EMP_NO)    
WHERE REL_TYPE_CD = 'A27'
GROUP BY E.EMP_NO, E.EMP_NM; -- 인출행 수 1239

-- 오라클 전용 JOIN구문
SELECT E.EMP_NO, E.EMP_NM, COUNT(E.EMP_NO) "자녀수"
FROM EMP_C E, FAM_C F
WHERE E.EMP_NO = F.EMP_NO
AND REL_TYPE_CD = 'A27'
GROUP BY E.EMP_NO, E.EMP_NM;  -- 인출행 수 1239
728x90
반응형
728x90

 

For each문

= 향상된 for문

= 개선된 for문

 

배열이나 컬렉션의 요소(element)에 대해 특정 작업을 반복적으로 가져오기 위해 사용

for(타입 변수명 : 배열or컬렉션){
		반복할 코드
}

 

특징

자바5.0(JDK 1.5)이상 사용가능

일반적인 for문과 달리 배열과 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용 가능

for each 문은 따로 반복횟수를 명시적으로 주는 것이 불가능하며,

순차적으로 반복될 때만 사용가능

for each문 안에 선언된 변수는 for문 내에서만 사용가능(지역변수 취급)

 

 

장점

1.심플, 가독성Good

2.배열 인덱스 문제 해결

ex) ArrayIndexOutOfBoundsException 예외발생 해결

 

 

단점

1.인덱스를 사용불가x

2.배열 & ArrayList 값을 사용가능하나 수정불가x

 

 

로직

배열or컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀져 변수에 저장됨

변수명을 출력하면 해당 인덱스 배열 요소값이 출력

배열or컬렉션을 처음부터 하나씩 변수명에 대입하여 바디 부분을 실행함

즉, 배열or컬렉션[0]의 값을 변수명에 다시 담아 바디부분을 실행하고 총길이 만큼 for문이 도는 것

 

ex)

for(int num : arrList){
		System.out.println(num);
}

 

아래처럼 a를 al을 두가지 반복 시키면 헷갈리는 부분이 있어서 정리해봤다

  • a를 반복시킬 경우 : 변수 al 전체를 al의 길이만큼 반복
  • al을 반복시킬 경우 : 변수 al의 요소 하나씩 순서대로 al길이만큼 반복

 

 

ex)구체적 예시

 

728x90
반응형

+ Recent posts