| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- @RequestMapping
- 서비스레이어
- PointCut
- springmvc
- c:if
- @
- jointpoint
- 스프링
- 비즈니스레이어
- 의존주입
- @ResponseBody
- @Valid
- @RequestParam
- frontController
- after-throwing
- SpringBoot
- Model
- gradle
- 어노테이션
- 생성자주입
- spring
- application.properties
- MVC
- Java
- 유효성검사
- .xml
- springjdbc
- produces
- AOP
- 바인딩변수
- Today
- Total
메모장
[멘토 씨리즈] 문제풀이 5 본문
기본 API 클래스
- 다음 코드에서 Object 클래스의 toString() 메서드를 재정의하여 User가 실행 결과와 같이 출력되도록 알맞은 코드를 작성해 보세요
package section12;
class User{
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// 코드를 작성해 보세요
}
public class UserExample{
public static void main(String[] args) {
User user = new User("김철수" , 22);
System.out.println(user);
}
}
package section12;
class User{
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// 코드를 작성해 보세요
@Override // toString 메서드 재정의 // 오버라이딩
public String toString() {
return "이름: "+ this.name + ", 나이: " + this.age;
}
}
public class UserExample{
public static void main(String[] args) {
User user = new User("김철수" , 22);
System.out.println(user);
}
}
2. 다음 코드에서 컴파일 에러가 발생하는 곳을 찾아 수정해 보세요
package section12;
public class StringCompareExample {
public static void main(String[] args) {
String sentence1 = "사과";
String sentence2 = new String("사과");
String sentence3 = "망고";
System.out.println(sentence1 == sentence2);
System.out.println(sentence2 == sentence3);
}
}
package section12;
public class StringCompareExample {
public static void main(String[] args) {
String sentence1 = "사과";
String sentence2 = new String("사과");
String sentence3 = "망고";
System.out.println(sentence1.equals(sentence2)); // 문자열 끼리의 값비교는 equals를
System.out.println(sentence2.equals(sentence3)); // 써줘야 한다.
}
}
3. 다음 빈칸에 문자열 '100'을 정수로 변환하는 코드를 삽입하여 더하기 기능을 완성해보세요
package section12;
public class StringCompareExample {
public static void main(String[] args) {
String str = "100";
int datal = 200;
int result = 0;
result = 100 + ( );
System.out.println("숫자 합 : " + result);
}
}
package section12;
public class StringCompareExample {
public static void main(String[] args) {
String str = "100";
int datal = 200;
int result = 0;
result = 100 + ( Integer.parseInt(str); )
System.out.println("숫자 합 : " + result);
}
}
4. 1부터 30사이의 숫자를 생성하여 숫자 맞추기 게임을 랜덤 함수를 사용해 만들어보세요.( 단 , 숫자를 맞출수 있는 기회는 10 번 입니다.)
package section12;
import java.util.Scanner;
public class UpDownGame {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int count = 0;
int matchValue = 0;
int value = 0;
matchValue = (int)(Math.random() * 30) + 1;
while(count < 10) {
System.out.println("맞출 숫자 입력 : ");
value = scan.nextInt();
// 코드를 작성해보세요
}
}
}
package section12;
import java.util.Scanner;
public class UpDownGame {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int count = 0;
int matchValue = 0;
int value = 0;
matchValue = (int)(Math.random() * 30) + 1;
while(count < 10) {
System.out.println("맞출 숫자 입력 : ");
value = scan.nextInt();
// 코드를 작성해보세요
count++; // 카운트를 올려주다가
if(value == matchValue) { // 숫자를 맞췄을시 while문을 바로 탈출 !
System.out.println(count + "번 째 정답 !");
break; // 무한루프 종료조건 !
}
}
}
}
스레드
- 다음중 스레드의 설명으로 틀린것을 고르세요
1) 스레드는 프로세스 내 작업 단위를 말한다.
2) 하나의 프로세스 안에 여러 개의 스레드가 존재할 수 있습니다.
3) 스레드가 여러 개일 경우 서로 간의 간섭이 가능하다. // 각각의 프로세스들은 메모리에 독립적으로 등록되어
서로 간섭 할수 없다.
4) 스레드는 Thread 클래스 또는 Runnable 인터페이스를 상속하여 구현한다.
2. 다음중 스레드 일시정지 상태에 대한 설명 중 틀린것을 고르세요.
1) 일시정지 상태는 BLOCKED, WAITING, TIMED_WAITING이 있다.
2) 스레드가 동기화 메서드를 실행 할때 다른 스레드가 동기화 메서드를 호출 하게 되면 BLOCKED 일시정지 상태가 된다.
3) 스레드가 여러 개일 경우 서로 간의 간섭이 가능하다. // 각각의 프로세스들은 메모리에 독립적으로 등록되어
서로 간섭 할수 없다.
4) yield 메서드를 호출하면 TIMED_WAITING 일시 정지 상태가 된다.
3. 다음 빈칸에 알맞은 코드를 작성하여 완성해 보세요 .
package section18;
class MyThread extends ( Thread ) {
@Override
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println(i + "초");
}
}
public static void main(String[] args) {
MyThread m = new MyThread();
m.start();
}
}
Thread 클래스를 상속하여 스레드를 구현한다. 다만, 스레드는 run()메서드에서 구현하지만
클래스를 실행하기 위해서는 start() 메서드를 호출해야 한다.
4.다음 코드의 빈칸을 완성하여 스레드를 동작시키는 코드를 작성해 보세요
package section18;
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 1; i <= 5; i++) {
try {
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(i + "초");
}
}
( public class RunnableExample { )
( public static void main(String[] args) { )
( Thread th = new Thread(new MyRunnable()); )
( th.start(); )
}
정답 : 자바는 다중 상속이 불가능 하기 때문에 Runnable 인터페이스를 상속 하여 구현한다.
Thread th = new Thread(Runnable을 상속한 인스턴스);
Thread 클래스를 선언하면서 Runnable 을 상속한 클래스를 선언하여 매개 변수로 넘겨줘야 한다. 그 이유는 실제 Thread 클래스가 스레드를 실행하는 주체 이고 Runnable인터페이스를 상속한 클래스는 실행코드를 지닌 객체이기 때문이다 . Runnable로 구현된 스레드를 실행하는 방법은 메인 클래스에서 스레드 선언시 생성자 매개변수로 실행할 Runnable 클래스를 넘겨주어야 한다. 실제로 Runnable을 상속한 클레스는 Thread 클래스 내부에서 start() 메서드를 실행할때 수행하게 된다.
파일 입출력
- 다음 중 스트림에 관한 설명으로 틀린것은 무엇일까요?
1) 데이터를 읽어들이는 것을 입력 스트림이라고 한다.
2) 데이터를 저장하는 것을 출력 스트림이라고 한다. // 출력스트림은 말 그대로 출력을 담당한다.
3) 하나의 스트림으로 입력과 출력을 모두 제어 할 수 있다.
4) 스트림은 바이트 기반 스트림과 문자 기반 스트림으로 나눌 수 있다.
2. 이미지 파일을 복사하려고 한다. 다음중 가장 적합한 스트림은 무엇일까요 ?
1) FileInputStream, File Writer
2) FileReader, FileWriter
3) FileInputStream, FileOutputStream // 파일읽어오기, 파일작성하기
4) FileReader, FileOutputStream
3. 과일의 목록이 들어있는 텍스트 파일이 있다. 해당 목록에는 같은 과일이 중복되어 있다. 해당 파일을 읽어서 각 과일이 몇번씩 기록되어 있는지를 출력하는 프로그램을 작성 해 보세요 . 파일의 내용은 임의로 만듭니다.
- 파일 다 읽어오기
- 과일마다 합산 하기
- 작성하기
<예시>
- fruit.txt
사과
배
메론
사과
복숭아
수박
사과
수박
.....
<출력 예시>
메론 : 1번
배: 1번
사과 : 3번
수박 : 2번
...
package class04;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
// 지금까지는 콘솔이랑 자바랑 대화 시킴
class Fruit { // 과일 이름과 개수를 셀 Fruit 클래스를 만들어 줍니다.
String name;
int cnt;
public Fruit(String name) { // 생성자 초기화 // 1개씩은 가지고 있으므로 초기화를 1로 해준다.
this.name = name;
this.cnt = 1;
}
@Override
public String toString() { // 출력문 오버라이딩
return name + " " + cnt + "개";
}
}
public class Test01 {
public static void main(String[] args) {
File file = new File("C:\\resource\\fruit.txt");
ArrayList<Fruit> datas = new ArrayList<Fruit>(); // Fruit 객체의 ArrayList를 만들어줍니다.
try {
BufferedReader inFile = new BufferedReader(new FileReader(file));
String a = null; // a라는 변수 선언
while((a = inFile.readLine()) != null) { // null이 될때 까지 읽어준다.
boolean flag = false; // 중복 검사를 위해 flag를 사용
for(int i = 0; i < datas.size(); i++) { // 객체를 담은 ArrayList에서 size만큼
if(a.equals(datas.get(i).name)) { // 만약 datas에 readLine()으로 읽은 값이 있다면
flag = true; // flag를 true로
datas.get(i).cnt++; // 해당 하는 과일의 개수를 올려준다
}
}
if(!flag) { // 중복 된 것이 없었다면
datas.add(new Fruit(a)); // datas에 새로 추가를 해준다.
}
}
for(int i = 0; i < datas.size(); i++) {
System.out.println(datas.get(i)); // datas 출력문
}
inFile.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
'JAVA > [멘토씨리즈]' 카테고리의 다른 글
| [멘토 씨리즈] 부록 02.JDBC란? (0) | 2024.04.09 |
|---|---|
| [멘토 씨리즈] 부록 01.데이터베이스와 DBMS (0) | 2024.04.09 |
| [멘토 씨리즈] 문제풀이 4 (0) | 2024.04.09 |
| [멘토 씨리즈] 파일 입출력 (0) | 2024.04.09 |
| [멘토 씨리즈] 스레드 (0) | 2024.04.09 |