메모장

[멘토 씨리즈] 문제풀이 5 본문

JAVA/[멘토씨리즈]

[멘토 씨리즈] 문제풀이 5

Itchild 2024. 4. 9. 13:25
728x90
반응형

 

 

기본 API 클래스

 

  1. 다음 코드에서 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. 다음중 스레드의 설명으로 틀린것을 고르세요

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. 다음 중 스트림에 관한 설명으로 틀린것은 무엇일까요?

1) 데이터를 읽어들이는 것을 입력 스트림이라고 한다.

2) 데이터를 저장하는 것을 출력 스트림이라고 한다. // 출력스트림은 말 그대로 출력을 담당한다.

3) 하나의 스트림으로 입력과 출력을 모두 제어 할 수 있다.

4) 스트림은 바이트 기반 스트림과 문자 기반 스트림으로 나눌 수 있다.

 

2. 이미지 파일을 복사하려고 한다. 다음중 가장 적합한 스트림은 무엇일까요 ?

1) FileInputStream, File Writer

2) FileReader, FileWriter

3) FileInputStream, FileOutputStream // 파일읽어오기, 파일작성하기

4) FileReader, FileOutputStream

 

3. 과일의 목록이 들어있는 텍스트 파일이 있다. 해당 목록에는 같은 과일이 중복되어 있다. 해당 파일을 읽어서 각 과일이 몇번씩 기록되어 있는지를 출력하는 프로그램을 작성 해 보세요 . 파일의 내용은 임의로 만듭니다.

  1. 파일 다 읽어오기
  2. 과일마다 합산 하기
  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();
		}
	}
}
 
 

 

 

728x90
반응형