이전까지 자바의 기초부터 객체까지 다뤄봤습니다.
객체의 배열을 학습하기전,
메소드를 활용한 자바 객체의 실습문제를 풀어봅시다!!
자바 객체(메소드) 예제
난이도 ★★★★★
예제 1
Q : 다음 사진을 보고 요구사항에 맞는 메소드와 객체를 생성하여라.
package com.kh.exam10;
import java.util.Scanner;
class Snack {
private String kind;
private String name;
private String flavor;
private int numOf;
private int price;
public Snack() {
}
public Snack(String kind, String name, String flavor, int numOf, int price) {
this.kind = kind;
this.name = name;
this.flavor = flavor;
this.numOf = numOf;
this.price = price;
}
public String information() {
return this.kind + "(" + this.name + " - " + this.flavor + ") "
+ this.numOf + "개 " + this.price + "원";
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFlavor() {
return flavor;
}
public void setFlavor(String flavor) {
this.flavor = flavor;
}
public int getNumOf() {
return numOf;
}
public void setNumOf(int numOf) {
this.numOf = numOf;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
class SnackMenu {
private Scanner sc = new Scanner(System.in);
private SnackController scr = new SnackController();
public void menu() {
String kind; String name; String flavor; int numOf; int price;
System.out.println("스낵류를 입력");
System.out.print("종류 : "); kind = sc.nextLine();
System.out.print("이름 : "); name = sc.nextLine();
System.out.print("맛 : "); flavor = sc.nextLine();
System.out.print("개수 : "); numOf = sc.nextInt(); sc.nextLine();
System.out.print("가격 : "); price = sc.nextInt(); sc.nextLine();
System.out.println(scr.saveData(kind, name, flavor, numOf, price));
System.out.print("저장한 정보를 확인하시겠습니까?(y/n) : ");
String yn = sc.nextLine();
if(yn.equals("y")) {
System.out.println(scr.confirmData());
}else if(yn.equals("n")) {
return;
}
}
}
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 "저장 완료되었습니다. \n";
}
public String confirmData() {
return s.information();
}
}
// Run 클래스 대신 Sample5로 작성.
public class Sample5 {
public static void main(String[] args) {
// OOP 실습문제 PDF 보고 작성
SnackMenu sm = new SnackMenu();
sm.menu();
}
}
※ 패키지는 구분하지 않고 하나의 패키지에 작성하였습니다.
패키지 요구사항을 충족시킬분들은 클래스 다이어그램에서 요구하는 패키지를 생성하고
작성한 자바파일을 알맞게 넣어주면 됩니다!
난이도 ★★★★★☆
예제 2
Q : 다음 요구사항에 맞는 메소드와 객체를 생성하여라.
-- 클래스를 사용하여 인스턴스를 만들고 만들어진 인스턴스를 사용하는 코드를
보고 해당 코드에 적합한 클래스를 작성해보도록 한다.
(단, 이 클래스는 캡슐화를 적용한다.)
로또 번호는 1 ~ 45 까지 6개의 번호를 맞추어 등수를 정하는 복권이다.
// 1 ~ 45 범위의 번호 6개를 생성해준다.
Lotto lot1 = new Lotto();
Lotto lot2 = new Lotto();
// 1 ~ 45 범위의 번호 6개를 생성해준다.
lot1.generate();
lot2.generate();
// 1 ~ 45 범위의 번호 6개를 생성하나 4, 6, 14 는 반드시 들어간다.
lot1.generate(4, 6, 14);
// 1 ~ 45 범위의 번호 6개를 생성하나 34, 31, 40 은 반드시 들어간다.
lot2.generate(34, 21, 40);
// 생성된 번호를 확인할 수 있다.
lot1.getNumbers();
lot2.getNumbers();
// 당첨번호를 통해 등수를 확인한다.(당첨번호가 등록되지 않았기 때문에 -1을 반환하게 해야 한다.)
lot1.getRank();
lot2.getRank();
int[] nums = new int[] {1, 2, 3, 4, 5, 6};
int bonus = 7;
// 당첨번호를 통해 등수를 확인한다.(당첨번호를 전달하여 등수를 확인한다.)
lot1.getRank(nums, bonus);
lot2.getRank(nums, bonus);
// 1 ~ 45 범위의 번호 7개를 생성해준다.(이 번호는 당첨 번호로 사용할 것이다.)
int[] numbers = Lotto.createWinnerNumbers();
// 위에서 생성된 로또 번호를 공유 변수에 저장한다.(당첨 번호를 등록하는 것이다.)
Lotto.setWinnerNumbers(numbers);
// 당첨 번호를 확인할 수 있다.(보너스 포함)
Lotto.getWinnerNumbers();
// 당첨번호를 통해 등수를 확인한다.(당첨번호를 공유변수에 등록하여 확인한다.)
lot1.getRank();
lot2.getRank();
import java.util.Arrays;
import java.util.Random;
class Lotto {
private int lotto[] = new int[6];
private static int winLotto[] = new int[7];
static Random rd = new Random();
public Lotto() {
}
public void generate() {
Random rd = new Random();
for(int i=0; i < this.lotto.length; i++){
this.lotto[i] = rd.nextInt(44) + 1;
for(int j=0 ; j<i ; j++) {
if(this.lotto[i] == this.lotto[j]) {
i--;
break;
}
}
}
}
public void generate(int n1, int n2, int n3) {
this.lotto[0] = n1; this.lotto[1] = n2; this.lotto[2] = n3;
Random rd = new Random();
for(int i=3; i < this.lotto.length; i++){
lotto[i] = rd.nextInt(44) + 1;
}
}
public void getNumbers() {
System.out.println(Arrays.toString(this.lotto));
}
public void getRank(int[] nums, int bonus) {
int count=0;
for(int i=0; i<this.lotto.length; i++) {
if(this.lotto[i] == bonus) {
count++;
continue;
}
for(int j=0; j<nums.length; j++){
if(this.lotto[i] == nums[j]) {
count++;
}
}
}
if(count >= 6) System.out.println("1등 당첨!!!");
else if(count == 5) System.out.println("2등 당첨!!");
else if(count == 4) System.out.println("3등 당첨!");
else if(count == 3) System.out.println("4등 당첨");
else if(count < 3) System.out.println("다음 기회에...");
}
public static int[] createWinnerNumbers() {
for(int i=0; i<Lotto.winLotto.length; i++) {
Lotto.winLotto[i] = rd.nextInt(44) + 1;
for(int j=0 ; j<i ; j++) {
if(Lotto.winLotto[i] == Lotto.winLotto[j]) {
i--;
break;
}
}
}
return winLotto;
}
public static void setWinnerNumbers(int[] numbers) {
winLotto = numbers;
}
public static void getWinnerNumbers() {
System.out.println(Arrays.toString(winLotto));
}
public void getRank() {
int count=0;
if(winLotto[0] < 1 || winLotto[0]>45) {
System.out.println("-1");
}
else if(winLotto.length>=7) {
for(int i=0; i<this.lotto.length; i++) {
for(int j=0; j<winLotto.length; j++) {
if(this.lotto[i] == winLotto[j]) {
count++;
}
}
}
if(count >= 6) System.out.println("1등 당첨!!!");
else if(count == 5) System.out.println("2등 당첨!!");
else if(count == 4) System.out.println("3등 당첨!");
else if(count == 3) System.out.println("4등 당첨");
else if(count < 3) System.out.println("다음 기회에...");
}
}
}
public class Sample4 {
public static void main(String[] args) {
/*
* 클래스를 사용하여 인스턴스를 만들고 만들어진 인스턴스를 사용하는 코드를
* 보고 해당 코드에 적합한 클래스를 작성해보도록 한다.
* (단, 이 클래스는 캡슐화를 적용한다.)
*
* 로또 번호는 1 ~ 45 까지 6개의 번호를 맞추어 등수를 정하는 복권이다.
*/
// 1 ~ 45 범위의 번호 6개를 생성해준다.
Lotto lot1 = new Lotto();
Lotto lot2 = new Lotto();
// 1 ~ 45 범위의 번호 6개를 생성해준다.
lot1.generate();
lot2.generate();
// 1 ~ 45 범위의 번호 6개를 생성하나 4, 6, 14 는 반드시 들어간다.
lot1.generate(4, 6, 14);
// 1 ~ 45 범위의 번호 6개를 생성하나 34, 31, 40 은 반드시 들어간다.
lot2.generate(34, 21, 40);
// 생성된 번호를 확인할 수 있다.
lot1.getNumbers();
lot2.getNumbers();
// 당첨번호를 통해 등수를 확인한다.(당첨번호가 등록되지 않았기 때문에 -1을 반환하게 해야 한다.)
lot1.getRank();
lot2.getRank();
int[] nums = new int[] {1, 2, 3, 4, 5, 6};
int bonus = 7;
// 당첨번호를 통해 등수를 확인한다.(당첨번호를 전달하여 등수를 확인한다.)
lot1.getRank(nums, bonus);
lot2.getRank(nums, bonus);
// 1 ~ 45 범위의 번호 7개를 생성해준다.(이 번호는 당첨 번호로 사용할 것이다.)
int[] numbers = Lotto.createWinnerNumbers();
// 위에서 생성된 로또 번호를 공유 변수에 저장한다.(당첨 번호를 등록하는 것이다.)
Lotto.setWinnerNumbers(numbers);
// 당첨 번호를 확인할 수 있다.(보너스 포함)
Lotto.getWinnerNumbers();
// 당첨번호를 통해 등수를 확인한다.(당첨번호를 공유변수에 등록하여 확인한다.)
lot1.getRank();
lot2.getRank();
}
}
이상 java의 객체 실습문제를 마치겠습니다.
다음 포스팅에선 java 객체 배열에 대해 다뤄보고자 합니다.
https://healthdevelop.tistory.com/entry/java12