버글버글

Java 연습 문제 (6) 본문

java/java 연습문제

Java 연습 문제 (6)

Bugle 2022. 8. 22. 15:00
반응형

1. 점수와 학년을 입력받아 60점 이상이면 합격, 60점 미만이면 불합격을 출력하시오. 4학년인 경우 70점 이상이어야 합격이다.

 

2. 커피 메뉴를 입력받아 가격을 알려주는 프로그램을 구현하시오. switch 문을 이용 하여 구현하시오.

(에스프레소, 카푸치노, 카페라떼는 3500원, 아메리카노는 2000원이다.)

 

3. 돈을 입력받아 오만원권, 만원권, 오천원권, 천원권, 오백원 동전, 백원 동전, 오십원 동전, 십원 동전, 오원 동전, 일원 동전이 각각 몇개로 변환되는지 출력하시오. 이 때 반드시 다음과 같은 배열을 사용하여 반복문으로 처리하시오.

- int[] unit = {50000, 10000, 5000, 1000, 500, 100, 50, 10, 5, 1};

- 금액을 입력하시오 >> 75832

- 50000원 짜리 : 1개

- 10000원 짜리 : 2개

- 5000원 짜리 : 1개

- 1000원 짜리 : 0개

- 500원 짜리 : 1개

- 100원 짜리 : 3개

- 10원 짜리 : 3개

- 1원 짜리 : 2개

 

4. 정수를 몇 개 저장할지(최대 100개) 입력받아서 해당 길이를 가진 배열을 생성하고, 1에서 100사이 범위의 정수를 랜덤하게 삽입하시오.

 - 같은 값은 생성하지 못하도록 설정하고 생성된 배열을 출력하시오.

예시 ) 몇 개의 랜덤을 생성할까요? >>> 150

         - 다음에는 1~100 사이로 입력하세요 !

 

5. 학생 3명의 점수를 입력 받아서 평균 점수와 1등의 이름과 꼴등의 이름을 출력하시오.

예시) 피카츄의 점수 입력 >>> 75

           뽀로로의 점수 입력 >>> 95

           브레드의 점수 입력 >>> 85

           평균 : 85.0점

           1등 : 뽀로로

           2등 : 피카츄

 

6. 랜덤으로 윷놀이를 구현하시오. 도개걸윷모 중 랜덤 생성하여 이동횟수와 함께 화면에 출력하시오. 윷이나 모가 나오면 계속 랜덤 생성하여 총 이동횟수를 계산하여 출력하시오.

도 : 1칸 이동

개 : 2칸 이동

걸 : 3칸 이동

윷 : 4칸 이동

모 : 5칸 이동

 

7. 경과시간을 맞추는 게임을 작성하시오. 첫 번째 <Enter>를 누르면 해당 시점의 초시간을 보여주고, 두 번째 <Enter>를 누르면 해당 시점의 초 시간을 다시 보여준다. 여기서 10초에 근접하도록 <Enter>를 누른사람이 이기는 게임이다.

<힌트>

1) <Enter>를 누른다 : Scanner 클래스의 nextLine() 메소드는 <Enter>를 인식함.

     예) <Enter>를 누르면 1000이 출력되는 코드

      Scanner sc = new Scanner(System.in);

      sc.nextLint();

      System.out.println(1000);

2) 경과 시간 : System.currentTimeMillis()를 이용해 <Enter>를 누른 시간을 1개 구하고, 그 차이를 구한 뒤 0.001을 곱하면 초 단위로 결과를 확인할 수 있다.

 

예시) 강아지님 시작하면 <Enter>를 누르세요.

          === 시작 시간(초) : 10

         10초가 된 것 같으면 <Enter>를 누르세요.

          === 종료 시간(초) : 17

         고양이님 시작하면 <Enter>를 누르세요.

          === 시작 시간(초) : 21

         10초가 된 것 같으면 <Enter>를 누르세요.

          === 종료 시간(초) : 29

          강아지님 결과 7초, 고양이님 결과 8초, 승자는 고양이님 입니다.

 

8. 다음 main 메소드를 참고하여 watch 클래스를 구현하시오.

public static void main(String[] args) }
	Watch watch = new Watch(16, 15, 30);
    
    	watch.addHour(25);		// 25시간 후 (1시간)
        watch.addMinute(61);	// 61분 후 (1시간 1분)
        watch.addSecond(3661);	// 3661초 후 (1시간 1분 1초)
        
        watch.see();			// 19시 17분 31초
 }

 

9. 다음 main 메소드를 참고하여 BankAccout 클래스를 구현하시오.

	public static void main(String[] args) {

		BankAccount me = new BankAccount("1234", 50000L);
		BankAccount mom = new BankAccount("5678", 100000L);
		
        me.deposit(10000);	// 내 계좌에 10000원 입금
        me.deposit(-100);	// 내 계좌에 마이너스 입금(불가)
        
        me.withdraw(5000);	// 내 계좌에서 5000원 출금
        me.withdraw(100);	// 내 계좌에서 잔액보다 큰 금액 출금 (불가)
        
        me.inquiry();		// 계좌번호:1234, 잔액: 15000원
        
		mom.transfer(me, 50000);		// 엄마가 나에게 50000원 이체
		mom.transfer(me, -100);			// 실패
        mom.transfer(me, 100000000);	// 실패
        
		me.inquiry();	// 계좌번호: 1234, 잔액: 64900원
		mom.inquiry();	// 계좌번호: 4321, 잔액: 50000원
		
	}

 

10. 다음 main 메소드를 참고하여 Gun클래스와 Soldier 클래스를 구현하시오.

	public static void main(String[] args) {
		
        Gun gun = new Gun("K2", 2);	// 모델명, 총알수
		Soldier soldier = new Soldier("람보", gun);	// 군인명, 총
		
        soldier.shoot(); // 빵야! 1발 남았다.
        soldier.shoot(); // 빵야! 0발 남았다.
        soldier.shoot(); // 헛빵!
        
		soldier.reload(3);	// 3발이 장전되었다. 현재 3발.
        soldier.reload(6);	// 3발이 장전되었다. 현재 6발.
        soldier.reload(6);	// 0발이 장전되었다. 현재 6발.
	
		soldier.info();		// 람보 : K2(6)

	}

 


1. 점수와 학년을 입력받아 60점 이상이면 합격, 60점 미만이면 불합격을 출력하시오. 4학년인 경우 70점 이상이어야 합격이다.

import java.util.Scanner;

public class Ex01 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		System.out.print("점수를 입력하세요(0~100) >>> ");
		int score = sc.nextInt();
		System.out.print("학년을 입력하세요(1~4) >>> ");
		int year = sc.nextInt();

		if (score >= 60) {  // 60점 이상 합격
			if (year != 4)
				System.out.println("합격!");   // 4학년 아니면 합격
			else if (score >= 70)
				System.out.println("합격!");   // 4학년이 70점 이상이면 합격
			else
				System.out.println("불합격!"); // 4학년이 70점 미만이면 불합격
		} else {  // 60점 미만 불합격
			System.out.println("불합격!");
		}

		sc.close();

	}
}

2. 커피 메뉴를 입력받아 가격을 알려주는 프로그램을 구현하시오. switch 문을 이용 하여 구현하시오.

import java.util.Scanner;

public class Ex02 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		System.out.print("무슨 커피 드릴까요? >>> ");
		String order = sc.next();
		int price = 0;
		switch (order) {
		case "에스프레소":
		case "카푸치노":
		case "카페라떼":
			price = 3500;
			break;
		case "아메리카노":
			price = 2000;
			break;
		default:
			System.out.println(order + "는 메뉴에 없습니다.");
		}
		
		if (price != 0)
			System.out.print(order + "는 " + price + "원입니다.");
		
		sc.close();
		
	}
	
}

3. 돈을 입력받아 오만원권, 만원권, 오천원권, 천원권, 오백원 동전, 백원 동전, 오십원 동전, 십원 동전, 오원 동전, 일원 동전이 각각 몇개로 변환되는지 출력하시오.

public class Ex03 {

	public static void main(String[] args) {
		
		// 75832원
		
		// 75832 / 50000 -> 1
		// 75832 % 50000 -> 25832
		
		// 25832 / 10000 -> 2
		// 25832 % 10000 -> 5832
		
		// 이해
		// 암기
		// 문제해결
		
		int[] unit = {50000, 10000, 5000, 1000, 500, 100, 50, 10, 5, 1};
		int[] count = new int[unit.length];
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("금액 입력 >>> ");
		int money = sc.nextInt();
		
		for(int i = 0; i < unit.length; i++) {
			count[i] = money / unit[i];
			money = money % unit[i];
			System.out.println(unit[i] + "원 " + count[i] + "개");
		}
		
		sc.close();

	}

}

4. 정수를 몇 개 저장할지(최대 100개) 입력받아서 해당 길이를 가진 배열을 생성하고, 1에서 100사이 범위의 정수를 랜덤하게 삽입하시오.

 - 같은 값은 생성하지 못하도록 설정하고 생성된 배열을 출력하시오.

import java.util.Scanner;

public class Ex04 {

	public static void main(String[] args) {
		
		// 입력 받은 정수 -> 배열의 길이로 사용하기
		// 1~100만 가능
		Scanner sc = new Scanner(System.in);
		
		System.out.println("몇 개 생성할까요? >>> ");
		int count = sc.nextInt();
		
		if(count < 1 || count > 100) {
			System.out.println("1~100 사이만 가능합니다.");
			return;
		}
		
		int[] arr = new int[count];
		
		// 배열 arr에 난수(1~100) 저장
		// 중복 생성되면 재생성
		for(int i = 0; i < arr.length; i++) {
			int random = (int)(Math.random() * 100) + 1;
			// random 검사 메소드
			// 중복이 있으면 true 반환, 중복이 없으면 false 반환
			// exists(배열arr, 인덱스, 난수)
			if(exists(arr, i, random)) {
				i--;
				continue;
			}
			arr[i] = random;
		}
		
		// 배열 arr의 출력
		// 한 줄에 10개씩
		
		for(int i = 0; i < arr.length; i++) {
			if(i != 0 && i % 10 == 0)
				System.out.println();
			System.out.print(arr[i] + "\t");
		}
		
	}  // main
	
	public static boolean exists(int[] arr, int idx, int random) {
		
		// 배열arr의 인덱스 0부터 idx까지 random이 존재하는가?
		for(int i = 0; i <= idx; i++)
			if(arr[i] == random)
				return true;
		
		return false;
		
	}

}

5. 학생 3명의 점수를 입력 받아서 평균 점수와 1등의 이름과 꼴등의 이름을 출력하시오.

public class Ex05 {

	public static void main(String[] args) {
	
		String[] names = {
				"뽀로로",
				"크롱",
				"에디"
		};
		
		int[] scores = new int[names.length];
		
		for(int i = 0; i < scores.length; i++) {
			scores[i] = (int)(Math.random() * 101);
		}
		
		int total = scores[0];
		int max = scores[0];
		int min = scores[0];
		int top = 0;
		int bottom = 0;
		
		for(int i = 1; i < scores.length; i++) {
			total += scores[i];
			if(max < scores[i]) {
				max = scores[i];
				top = i;
			}
			if(min > scores[i]) {
				min = scores[i];
				bottom = i;
			}
		}
		
		double average = (double)total / scores.length;
		System.out.println("평균 : " + average + "점");
		System.out.println("1등 점수 : " + max + "점");
		System.out.println("1등 이름 : " + names[top]);
		System.out.println("꼴등 점수 : " + min + "점");
		System.out.println("꼴등 이름 : " + names[bottom]);
		
	}
	
}

6. 랜덤으로 윷놀이를 구현하시오. 도개걸윷모 중 랜덤 생성하여 이동횟수와 함께 화면에 출력하시오. 윷이나 모가 나오면 계속 랜덤 생성하여 총 이동횟수를 계산하여 출력하시오.

public class Ex06 {

	public static void main(String[] args) {
		
		// 도개걸윷모 -> 배열에 저장, 이동횟수를 인덱스와 일치시켜서 사용
		String[] yut = {
				"",  // 더미 요소(사용 안 함)
				"도",
				"개",
				"걸",
				"윷",
				"모"
		};
		
		int total = 0;
		
		while(true) {
			
			// 이동횟수 == 인덱스 -> 난수 처리
			int move = (int)(Math.random() * 5) + 1;

			total += move;
			
			if(move <= 3) {
				System.out.println(yut[move] + ", " + total + "칸 움직인다.");
				break;
			} else {
				System.out.print(yut[move] + ", ");
			}
			
		}
	
	}

}

7. 경과시간을 맞추는 게임을 작성하시오. 첫 번째 <Enter>를 누르면 해당 시점의 초시간을 보여주고, 두 번째 <Enter>를 누르면 해당 시점의 초 시간을 다시 보여준다. 여기서 10초에 근접하도록 <Enter>를 누른사람이 이기는 게임이다.

public class Ex07 {

	public static void main(String[] args) {
		
		Player p1 = new Player("철수");
		Player p2 = new Player("영희");
		
		double res1 = p1.turn();
		double res2 = p2.turn();
		
		if(Math.abs(res1 - 10) < Math.abs(res2 - 10))
			System.out.println(p1.getName() + "님 승리. " + res1 + "초 소요.");
		else
			System.out.println(p2.getName() + "님 승리. " + res2 + "초 소요.");
		
	}
	
}
import java.util.Scanner;

public class Player {

	private String name;  // null
	private Scanner sc;   // null
	
	public Player(String name) {
		this.name = name;
		if(sc == null)
			sc = new Scanner(System.in);
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	// 엔터와 엔터 사이의 시간을 초로 반환하는 메소드
	public double turn() {
		System.out.println(name + "님 시작하려면 <Enter>를 누르세요!");
		sc.nextLine();
		long begin = System.currentTimeMillis();  // 최초 엔터 누른 시간
		System.out.println("10초가 된 것 같으면 <Enter>를 누르세요!");
		sc.nextLine();
		long end = System.currentTimeMillis();    // 2번째 엔터 누른 시간
		return (end - begin) * 0.001;
	}
		
}

8. 다음 main 메소드를 참고하여 watch 클래스를 구현하시오.

public class Ex08 {

	public static void main(String[] args) {
		
		Watch w = new Watch(16, 15, 30);

		w.addHour(25);      // 1시간 후
		w.addMinute(61);    // 1시간 1분 후
		w.addSecond(3615);  // 1시간 0분 15초 후
		
		w.see();
		
	}

}
public class Watch {

	private int hour;
	private int minute;
	private int second;
	
	public Watch(int hour, int minute, int second) {
		this.hour = hour;
		this.minute = minute;
		this.second = second;
	}
	
	public void addHour(int hour) {
		if(hour < 0)
			return;
		// this.hour : 16시
		// hour : 25시
		// this.hour + hour : 41시
		// (this.hour + hour) % 24 : 17시
		this.hour += hour;
		this.hour %= 24;
	}
	
	public void addMinute(int minute) {
		if(minute < 0)
			return;
		this.minute += minute;  // 15분 + 61분 : 76분(this.minute)
		addHour(this.minute / 60);  // 76분 / 60분 : 1시간
		this.minute %= 60;  // 76분 % 60분 : 16분
	}
	
	public void addSecond(int second) {
		if(second < 0)
			return;
		this.second += second;  // 30초 + 3615초 : 3645초(this.second)
		addMinute(this.second / 60);  // 3645초 / 60초 : 60분
		this.second %= 60;
	}
	
	public void see() {
		System.out.println(hour + "시 " + minute + "분 " + second + "초");
	}
	
}

9. 다음 main 메소드를 참고하여 BankAccout 클래스를 구현하시오.

public class Ex09 {

	public static void main(String[] args) {

		BankAccount me = new BankAccount("1234", 50000L);
		BankAccount mom = new BankAccount("5678", 100000L);
		
		mom.transfer(me, 300000);
		
		me.inquiry();
		mom.inquiry();
		
	}

}
public class BankAccount {

	private String accNo;  // 계좌번호
	private long balance;  // 잔고
	
	public BankAccount(String accNo, long balance) {
		super();
		this.accNo = accNo;
		this.balance = balance;
	}
	
	// 입금
	public void deposit(long money) {
		if(money < 0)
			return;
		balance += money;
	}
	
	// 출금
	public boolean withdraw(long money) {
		if(money < 0 || money > balance)
			return false;
		balance -= money;
		return true;
	}
	
	// 이체
	public void transfer(BankAccount other, long money) {
		// 출금 후 입금 순서로 동작해야 함.
		// 출금 성공해야 입금도 할 수 있음.
		// other : 입금
		// this  : 출금
		if(this.withdraw(money))
			other.deposit(money);
	}
	
	// 조회
	public void inquiry() {
		System.out.println("계좌번호: " + accNo + ", 잔고: " + balance + "원");
	}
	
}

10. 다음 main 메소드를 참고하여 Gun클래스와 Soldier 클래스를 구현하시오.

public class Ex10 {

	public static void main(String[] args) {
		
		Soldier soldier = new Soldier(new Gun("K2"), "람보");
		
		soldier.reload(2);
		soldier.shoot();
		
		soldier.reload(10);
		soldier.info();

	}

}
package prac1_answer;

public class Soldier {

	private Gun gun;
	private String name;
	
	public Soldier(Gun gun, String name) {
		super();
		this.gun = gun;
		this.name = name;
	}
	
	public void reload(int bullet) {
		gun.reload(bullet);
	}
	public void shoot() {
		gun.shoot();
	}
	public void info() {
		System.out.println("군인이름: " + name);
		gun.info();
	}
	
}
package prac1_answer;

public class Gun {

	private String model;  // null
	private int bullet;    // 0
	private final int FULL_BULLET = 6;
	
	public Gun(String model) {
		this.model = model;
	}
	
	// 장전
	public void reload(int bullet) {
		this.bullet += bullet;
		if(this.bullet > FULL_BULLET)
			this.bullet = FULL_BULLET;
	}
	
	// 발사
	public void shoot() {
		if(bullet <= 0) {
			System.out.println("총알이 없다.");
			return;
		}
		bullet--;
		System.out.println("빵! " + bullet + "발 남았다.");
	}
	
	// 조회
	public void info() {
		System.out.println(model + "(" + bullet + ")");
	}
	
}
반응형

'java > java 연습문제' 카테고리의 다른 글

Java 연습 문제 (5)  (0) 2022.08.06
Java 연습 문제 (4)  (0) 2022.07.31
Java 연습 문제 (3)  (0) 2022.07.26
Java 연습 문제 (2)  (0) 2022.07.24
Java 연습 문제 (1)  (0) 2022.07.21