상세 컨텐츠

본문 제목

[자바]문제모음4

될때까지 외우기

by esoesmio 2023. 4. 14. 11:44

본문

4/3

 

--------------------변수--------------------
1. 두 개의 정수 a = 10; b = 3;으로 덧셈, 뺄셈, 곱셈, 나눗셈의 결과를 출력하세요.(나눗셈의 결과는 double형으로 나머지는 int형으로 출력)

2. 두 개의 실수 num1 = 10.01; num2 = 12.25;로 덧셈, 뺄셈, 곱셈, 나눗셈의 결과를 출력하세요.(네 연산 모두 double형 출력)

3. 사용자가 입력한 알파벳을 소문자는 대문자로 대문자는 소문자로 변경해서 출력하세요.


--------------------형변환--------------------
1. 사용자가 입력한 수(실수나 정수 모두 가능)를 StringBuilder로 받아서 점(.)이 포함되면 double형으로 포함되지 않으면 int형으로 변경 후 출력하세요.

--------------------연산자--------------------
1. public static void main(String[] args) {
     for(int i = 1; i <= 10; i++) {
if(i % 3 == 0) {
// 3, 6 ,9
} else if(i % 3 == 1) {
// 1, 4, 7, 10
} else if(i % 3 == 2) {
// 2, 5, 8
}
}
   }
   위 코드처럼 1 ~ 10까지의 숫자를 3가지 조건으로 나눌 때 가장 적합한 조건으로 채워주세요.

2. 중첩 삼항 연산자를 이용해서 1 ~ 20까지의 숫자중 소수를 판별하여 소수면 "xx는 소수입니다."라고 출력하고 소수가 아니면 4의 배수인지 판별하여
     "xx는 4의 배수입니다."라고 출력하고 4의 배수가 아니면 "xx는 4의 배수가 아닙니다."라고 출력하세요.

--------------------조건문--------------------
1. 사용자가 입력한 문자열의 길이가 20이상이면 해당 문자열을 거꾸로 출력하고 
     20미만이면 문자열에 n, a, v, e, r 다섯개의 문자를 순서대로 추가하여
     문자열의 길이가 20이 되면 그 때 문자열을 출력하세요.

--------------------반복문--------------------
1. 1~20까지 랜덤한 값을 생성해서 생성한 랜덤 값만큼 반복되는 반복문을 만들고
    반복문에서 사용자가 입력한 문자열에 "bit"를 계속 추가하세요. 그리고 bit가 몇 번
    추가됐는지 개수를 세서 출력하세요. 랜던 값을 그대로 출력하면 안됩니다.

2. 사용자가 입력한 정수의 약수들의 총합을 출력하세요.

--------------------배열--------------------
1. 길이가 12인 char 배열을 선언하고 {'b', 'c', 's', 'i', 'i', 'o', 'q', 'n', 't', 'm', 'l', 't'}로 초기화합니다.
   단어를 bit, com, sql, int로 만들어서 모두 출력하세요.(힌트 bit => [0], [4], [8]에 있습니다.)

--------------------클래스--------------------
1. IfCla 라는 클래스를 정의하고 멤버변수로는 ElseCla라는 클래스 타입의 변수를 가지고 있게 구현하고
     makeIf(int num)를 만들어서 사용자가 입력한 정수(1 ~ 10)를 매개변수로 받아서 1과 같은지 비교해서 같으면 "정답입니다."를 출력하는 메소드를 구현하고
     그 안에서 ElseCla에 존재하는 makeElse(int num) 메소드를 호출하여 1이 아닐때는 "오답입니다"라고 출력하세요.

--------------------상속--------------------
1. 위에서 선언한 IfCla와 ElseCla를 상속받는 ElseIfCla 클래스를 선언하고 makeIf(int num)을 오버라이드하여 사용자가 입력한 숫자가 5보다 큰지 비교하여 
     5보다 크면 "5보다 큽니다."를 출력하고 makeElseIf(int num)이라는 메소드를 새로 만들어서 사용자가 입력한 숫자가 5와 같은지 비교하여 같으면 "5입니다."를 출력하고
     makeElse(int num)을 오버라이드 하여 "5보다 작습니다."를 출력하세요.

--------------------컬렉션--------------------
1. 음식 이름을 키로 가지고 단품 가격을 값으로 가지는 foodPriceMap과 음식 이름을 키로 가지고 주문수량을 값으로 가지는 foodOrderMap을 선언하세요.
   음식과 가격은 비빔밥 : 6000, 칼국수 : 9000, 투뿔등심 : 70000이고 주문수량은 비빔밥 : 5, 칼국수 : 2, 투뿔등심 : 1 일 때 총가격을 계산해서 출력하세요.
   (Map을 이용해서 계산)

 

 

4/4

 

 

--------------------열거형--------------------
1. KOR, CHI, JAP, USA 네 개의 상수를 갖는 enum을 생성하고 첫 번째 값은 "나라 한글명"이고 두 번째 값은 "대표음식"으로 지정한다.
   public void notifyFood(String country) 메소드를 만들고 country 값과 동일한 한글명인 나라의 음식을 다음과 같이 출력하도록 구현하세요.
   country에 "중국"이 들어오면 "중국의 대표음식은 짜장면입니다."라고 나오도록 하세요. (각 국의 음식은 한국=불고기, 중국=짜장면,
   일본=초밥, 미국=햄버거)

2. 커피 메뉴를 갖는 enum을 생성하고 AMERICANO, LATTE, MOCHA, COLDBREW 4개로 지정한다. 가격이 값이 되고 순서대로 2000, 3000, 4000, 4500으로 지정한다.
   메뉴의 총 가격을 계산하는 추상 메소드를 정의하고 각각의 상수에서 구현하는데 아메리카노(아이스 300 추가), 라떼(아이스 500 추가), 모카(휘핑 1000 추가), 
   콜드브루(시럽 200 추가) 모든 메뉴 옵션 없는 주문은 지정한 가격대로 진행된다. totalPrice(int optionOrder, int normalOrder) 옵션 추가 잔수와 일반 메뉴 잔수를 받아서
     각 메뉴의 가격을 계산하는 추상 메소드 구현한다. 아아 2잔 뜨아 1잔 아라 1잔 휘핑 모카 2잔 콜드브루 2잔일 때의 가격을 출력하세요.

3. 12달을 상수로 만들어서 enum을 선언하고 첫 번째 값은 평년일 때 그 달의 일수 두 번째 값은 윤년일 때 그 달의 일수로 설정하고 사용자가 년도를 입력하면 
     해당 년도의 1, 2, 3, 4, 5월의 일수의 총합을 출력하는 메소드를 구현하세요. sumDays(int year)

--------------------제네릭--------------------
1. Map<Integer, Integer>을 매개변수로 받아서 List<Entry<K, V>>를 리턴하는 메소드 getOverHundr를 구현하세요.
   매개변수 Map에는 key는 50~60까지 value는 15~25까지 넣어주고 키와 밸류의 곱셈의 결과가 1000을 넘는 Entry만 List에 저장합니다.

2. 제네릭 타입의 리스트를 멤버 변수로 갖는 TList라는 제네릭 클래스를 만들고 splitList라는 메소드를 만들고 멤버변수인 List를 반반씩 두개의 리스트로 나누는 기능을
     구현하세요.(리스트의 요소 개수가 짝수면 반반 동일한 개수로, 홀수면 첫 번째 리스트의 요소가 한 개씩 많게)

--------------------스레드--------------------
1. 메인스레드는 1~20까지 3과 4의 공배수를 출력하는 작업을 하고 1~20까지의 숫자중 30의 약수를 출력하는 서브 스레드를 하나 갖는다.
    각각의 스레드를 실행하십시오.

2. 1번 문제에서 join()메소드를 이용해서 서브 스레드가 먼저 실행돼서 끝난 후에 메인 스레드가 실행되도록 구현하세요.

3. 공유객체로 사용될 클래스 NumberPrinter를 만들고 멤버변수로 int num;를  가지며 정수형 매개변수를 받아 매개변수로 받아온 값은 num에 저장하고
     num~50까지중 3의 배수를 출력하는 메소드 numPrint1(int num)과 num~100까지 숫자 중 5와 7의 공배수를 출력하는 메소드 numPrint2(int num)를 구현하세요.
   그리고 공유객체를 사용하며 numPrint1을 호출하는 스레드 클래스 1개와 numPrint2를 호출하는 스레드 클래스 1개를 구현하고 메인스레드에서
    두 개의 스레드를 실행하세요.

4. 3번 문제에서 첫 스레드의 공유객체 점유가 끝날때까지 두 번째 스레드를 실행 하지 못하도록 잠금 상태로 만드세요.

5. 3, 4번 문제에서 wait와 notify를 이용하여 스레드 두개가 각각 한 번씩 출력하도록 수정하세요.

--------------------람다식--------------------
1. 매개변수로 받아온 정수배열에서 짝수만 찾아서 출력하는 printEvenNum을 람다식으로 구현하세요.

2. 두 개의 StringBuilder 값을 매개변수로 받아 두 개의 값을 합친 후 역순으로 바꿔서 리턴하는 combineStrBuilder를 람다식으로 구현하세요.

3. 2번 문제에서 두 개를 합치는 메소드 appendSb와 역순으로 변경하는 메소드 reverseSb를 각각 선언하고 StringBuilder의 메소드를 참조하여 각각 구현하세요.

4. 매개변수로 받아온 정수 배열에서 최대값, 최소값, 중간값을 구하는 메소드 getMax, getMin, getMid를 갖는 클래스 IntArrUtils를 구현하고
     maxOrMinOrMid라는 메소드를 갖는 함수형 인터페이스 MaxMinMid를 만들고 람다식으로 IntArrUtils의 메소드를 참조하여 구현하세요.

 

4/5

 

 

 

--------------------스트림--------------------
1. List<Integer> intList를 생성하고 10개의 랜덤값(1~10)을 저장합니다. 
     intList를 Stream으로 만들어서 각 요소에 곱하기 3을 한 요소로 새로운 스트림을 만들어서 출력하세요.(방법1 사용)

2. int sno, String sName, int score, String grade를 갖는 Student 클래스를 만들고
    List<Student> studentList에 (1, 홍길동, 100), (2, 임꺽정, 75), (3, 장길산, 86), (4, 정도전, 97), (5, 이순신, 95)
  를 저장하고 Stream으로 변환하여 점수가 95점 이상인 학생만 들어있는 Stream을 만드세요.

3. 2번에서 만든 Stream에 grade가 A+로 저장된 새로운 Stream을 만들어서 출력하세요.

4. 사용자가 입력한 영문자 10개를 저장하는 List<Character> charList를 만들고 스트림을 이용해서
    영문자가 소문자면 대문자로 대문자면 소문자로 바꾼 스트림을 만들어서 출력하세요.

5. 사용자가 입력한 문자열 10개를 저장하는 List<String> strList를 만들고 스트림을 이용해서
    문자열에 영문자가 포함된 문자열만 뽑아서 스트림을 만들고 출력하세요.

6번 ~ 13번까지 한 문제

6. 클래스 Card를 만들고 String cardName; int validYear; 멤버변수를 생성하고 getter/setter 및 유효기간을 연장하는 void validEnlong을 만듭니다.

7. 함수형 인터페이스인 CardVali를 생성하고 추상메소드로 void enlong(int year);를 선언합니다.

8. 6번에서 만든 validEnlong에서 연장할 유효기간과 CardVali를 매개변수로 받아서 현재 유효기간 + 매개변수로 받아온 유효기간으로 변경해주고
     함수형 인터페이스 CardVali의 enlong을 호출합니다.

9. 메인메소드에서 Card의 List를 생성하고 {"a", 3}, {"b", 1}, {"c", 0}, {"d", 1}, {"e", 2}, {"f", 5} 같은 데이터를 저장합니다.

10. cardList를 스트림으로 변경하고 유효기간이 1년 이하인 카드들만 저장된 스트림을 만듭니다.

11. 위에서 만든 스트림에서 validEnlong호출해서 3년씩 연장된 새로운 스트림을 만들고 "3년 연장되었습니다"라는 문구를 출력하세요.

12. 연장된 카드들의 정보를 "c카드의 유효기간은 3년입니다."라고 출력하세요.

13. 위에서 스트림을 사용한 것을 체이닝 기법으로 변경하세요.

 

 

 

 

4/6

 

--------------------스트림--------------------
1. 사용자가 입력한 문자열 10개를 저장한 문자열 리스트를 이용하여 문자열의 길이가 5이상인 문자열만 출력하세요.

2. HistoricPerson이란 클래스를 만들고 String name; String achievement; String country; 를 멤버변수로 만들고
   getter/setter 메소드를 생성합니다. getPersonInfo(String achievement); 매개변수로 받아온 업적에 해당하는 역사적 인물의
    정보를 리턴하는 기능을 만들고 메인메소드에서 (이도, 한글, 조선), (이순신, 임진왜란, 조선), (담덕, 세력확장, 고구려)
    (장영실, 측우기, 조선), (이성계, 조선건국, 조선), (을지문덕, 살수대첩, 고구려), (이승만, 초대대통령, 대한민국), (고주몽, 고려건국, 고려),
   (김구, 독립운동, 대한민국), (제갈공명, 책략가, 촉) 데이터를 갖는 List<HistoricPerson>를 만들어서 스트림으로 변환 후 사용자가 입력한 업적 
    하나만 갖는 스트림을 생성하고 출력하세요.

3. 2번에서 만든 List를 스트림으로 변환하고 성이 '이'씨인 인물만 갖는 스트림을 만들고 출력하세요.

4. HistoricPerson에 getSameCountryPerson(String country)를 만들고
    2번에서 만든 List를 스트림으로 변환하고 사용자가 입력한 국가의 인물들만 모은 스트림으로 만들어서 출력하세요. 

5. 2번에서 만든 List를 스트림으로 변환하고 성이 두자 이상인 인물의 정보를 스트림으로 만들어서 출력하세요.(을지문덕, 제갈공명)

관련글 더보기

댓글 영역