본문 바로가기
개념

[이것이 자바다] chapter.6 확인 문제 - 2

by cook_code 2023. 1. 30.
반응형

16. PrinterExample 클래스에서 Printer 객체를 생성하고 println()메소드를 호출해서 매개값을 콘솔에 출력하려고 합니다. println() 메소드의 매개값으로는 int, boolean, double, String 값을 줄 수 있습니다. Printer 클래스에서 println() 메소드를 선언해보세요.

package print;

public class Printer {

   void println(int a){
       System.out.println(a);
   }
    void println(boolean b){
        System.out.println(b);
    }
    void println(double c){
        System.out.println(c);
    }
    void println(String d){
        System.out.println(d);
    }

}
package print;

public class PrinterExample {
    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.println(10);
        printer.println(true);
        printer.println(5.7);
        printer.println("홍길동");
    }
}

17. 16번 문제에서는 Printer 객체를 생성하고 println()메소드를 생성했습니다. Printer 객체를 생성하지 않고 PrinterExample클래스에서 다음과 같이 호출하려면 Printer 클래스를 어떻게 수정하면 될까요?

package print;

public class Printer {

   public static void println(int a){
       System.out.println(a);
   }
    public static void println(boolean b){
        System.out.println(b);
    }
    public static void println(double c){
        System.out.println(c);
    }
    public static void println(String d){
        System.out.println(d);
    }

}
package print;

public class PrinterExample {
    public static void main(String[] args) {
        Printer.println(10);
        Printer.println(true);
        Printer.println(5.7);
        Printer.println("홍길동");
    }
}

18. ShopService 객체를 싱글톤으로 만들고 싶습니다. ShopServiceExample 클래스에서 ShopService의 getInstance() 메소드로 싱글톤을 얻을 수 있도록 ShopService 클래스를 작성해보세요.

package shop;

public class ShopService {
    private static ShopService shopService = new ShopService();

//    public ShopService() {
//    }
    static ShopService getInstance(){
        return shopService;
    }
}
package shop;

public class ShopServiceExample {
    public static void main(String[] args) {
        ShopService obj1 = ShopService.getInstance();
        ShopService obj2 = ShopService.getInstance();
        
        if(obj1 == obj2){
            System.out.println("같은 ShopService 객체입니다.");
        }else{
            System.out.println("다른 ShopService 객체입니다.");
        }
        
    }
}

19. 은행 계좌 객체인 Account 객체는 잔고(balance) 필드를 가지고 있습니다. balance 필드는 음수값이 될 수 없고, 최대 백만 원까지만 저장할 수 있습니다. 외부에서 balance 필드를 마음대로 변경하지 못하도록 하고, 0 <= balance <= 1,000,000 범위의 값만 가질 수 있도록 Account 클래스를 작성해보세요.

  • getter와 setter를 이용하세요
  • 0과 1,000,000은 MIN_BALANCE와 MAX_BALANCE 상수를 선언해서 이용하세요.
  • setter의 매개값이 음수이거나 백만 원을 초과하면 현재 balance 값을 유지하세요.
  •  
public class Account {
    //작성위치
    private int balance;
    private final int MIN_BALANCE = 0;
    private final int MAX_BALANCE = 1000000;

    public int getBalance() {
        return balance;
    }

    public void setBalance(int balance) {
        if (balance >= MIN_BALANCE && balance <= MAX_BALANCE) {
            this.balance = balance;
        }

    }
}
public class AccountExample {
    public static void main(String[] args) {
        Account account = new Account();

        account.setBalance(10000);
        System.out.println("현재 잔고: " + account.getBalance());
        account.setBalance(-100);
        System.out.println("현재 잔고: " + account.getBalance());
        account.setBalance(2000000);
        System.out.println("현재 잔고: " + account.getBalance());
        account.setBalance(300000);
        System.out.println("현재 잔고: " + account.getBalance());
    }
}

20. 다음은 키보드로부터 계좌 정보를 입력받아서, 계좌를 관리하는 프로그램입니다. 실행 결과를 보고, 알맞게 BankApplication 클래스의 메소드를 작성해보세요.

public class Account {
    private String ano;
    private String owner;
    private int balance;

    public Account(String ano, String owner, int balance) {
        this.ano = ano;
        this.owner = owner;
        this.balance = balance;
    }

    public Account() {

    }

    public String getAno() {
        return ano;
    }

    public void setAno(String ano) {
        this.ano = ano;
    }

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public int getBalance() {
        return balance;
    }

    public void setBalance(int balance) {
        this.balance = balance;
    }
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class BankApplication {
    private static Account[] accountArray = new Account[100];
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {


        boolean run = true;
        while (run) {
            System.out.println("----------------------");
            System.out.println("1.계좌생성|2.계좌목록|3.예금|4.출금|5.종료");
            System.out.println("----------------------");
            System.out.println("선택> ");

            int selectNo = scanner.nextInt();

            if (selectNo == 1) {
                creatAcount();
            } else if (selectNo == 2) {
                accountList();
            } else if (selectNo == 3) {
                deposit();
            } else if (selectNo == 4) {
                withdraw();
            } else if (selectNo == 5) {
                run = false;
            }
        }
        System.out.println("프로그램 종료");
    }

    //계좌 생성하기
    private static void creatAcount() {
        //작성위치
        System.out.println("---계좌 생성---");
        Account account = new Account();
        System.out.println("계좌번호를 입력해주세요.");
        account.setAno(scanner.next());
        System.out.println("예금주명을 입력해주세요.");
        account.setOwner(scanner.next());
        System.out.println("잔고를 입력해주세요.");
        account.setBalance(scanner.nextInt());

        for (int i = 0; i < accountArray.length; i++) {
            if (accountArray[i] == null) {
                accountArray[i] = account;
            }
        }
        System.out.println("계좌 생성 완료");
    }

    //계좌 목록 보기
    private static void accountList() {
        //작성위치
        System.out.println("---계좌 목록---");
        for (int i = 0; i < accountArray.length; i++) {
            if (accountArray[i] != null) {
                System.out.println(accountArray[i].getAno());
                System.out.println(accountArray[i].getOwner());
                System.out.println(accountArray[i].getBalance());
                return;
            }
        }
    }

    //예금하기
    private static void deposit() {
        //작성위치
        System.out.println("---예금---");
        System.out.println("예금할 금액을 입력하세요.");
        for (int i = 0; i < accountArray.length; i++) {
            if (accountArray[i] != null) {
                int presentBalance = accountArray[i].getBalance();
                int addBalance = scanner.nextInt();
                accountArray[i].setBalance(presentBalance + addBalance);
                System.out.println("현재 잔액은 " + accountArray[i].getBalance());
                return;
            }
        }
    }

    //출금하기
    private static void withdraw() {
        //작성위치
        System.out.println("---출금---");
        System.out.println("출금할 금액을 입력하세요.");
        for (int i = 0; i < accountArray.length; i++) {
            int presentBalance = accountArray[i].getBalance();
            int addBalance = scanner.nextInt();
            if (presentBalance > addBalance) {
                accountArray[i].setBalance(presentBalance - addBalance);
            } else {
                System.out.println("잔액이 부족합니다.");
            }
            System.out.println("현재 잔액은 " + accountArray[i].getBalance());
            return;
        }
    }

    //Account 배열에서 ano와 동일한 Account 객체 찾기
    private static Account findAccount(String ano) {
        //작성위치
        for (int i = 0; i < accountArray.length; i++) {
            if (accountArray[i].getAno().equals(ano)) {
                return accountArray[i];
            }
        }
        return null;
    }
}
반응형