- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 안드로이드 스튜디오
- firebase google
- 프로그래머스
- C언어
- C++
- 자료구조
- oauth
- 비주얼 베이직
- 자바
- 구글 로그인
- 코딩테스트
- python
- 알고리즘
- til
- 공유대학
- android studio
- 정렬
- 배열
- sql
- 파이썬
- 컴퓨터공학과
- 동적할당
- Firebase
- 로그인
- Java
- 연결리스트
- 프로그래밍 입문
- 안드로이드
- 백준
Archives
코딩하는 해달이
[Java/Kotlin] Lv2. 스파르타 자판기 본문
스파르타 자판기
자바/코틀린 코드를 이용해 자판기를 만들어 봅시다.
- 사용자가 볼 수 있게 메뉴를 표시합니다.
- 다음과 같은 음료를 실행창에 표시합니다.
- 사이다 1,700원
- 콜라 1,900원
- 식혜 2,500원
- 솔의눈 3,000원
- 다음과 같은 음료를 실행창에 표시합니다.
- 사용자는 음료를 선택할 수 있습니다.
- 사용자에게 어떤 음료를 살 것인지를 입력받습니다.
- ex) 사이다
- 목록에 없는 음료일 경우 실행이 종료됩니다.
- 사용자에게 어떤 음료를 살 것인지를 입력받습니다.
- 사용자는 지불할 금액을 입력할 수 있습니다.
- 사용자에게 얼마를 넣을지 입력받습니다.
- ex) 2000
- 지불하는 금액이 선택한 음료의 비용보다 작다면 “돈이 부족합니다.” 를 출력합니다
- 사용자에게 얼마를 넣을지 입력받습니다.
- 사용자는 음료를 구매하고 남은 잔액을 확인할 수 있습니다.
- 잔액을 화면에 표시합니다.
- ex) 입력한 돈 2000원, 사이다 1700원 일때 300원을 잔액으로 보여줍니다.
- 잔액을 화면에 표시합니다.
코드
import java.io.BufferedReader
import java.io.InputStreamReader
import java.text.DecimalFormat
val MENU: Map<String, Int> = mapOf(
"사이다" to 1700,
"콜라" to 1900,
"식혜" to 2500,
"솔의눈" to 3000
)
var CHANGE: Int = 0
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
while (true) {
displayMenu()
val select = readlnOrNull()
println("${select}를 선택하셨습니다.")
try {
MENU[select] as Int // 목록에 있는지 없는지 체크
print("얼마를 투입하시겠습니까? : ")
CHANGE += readlnOrNull()?.toInt() ?: 0
if (MENU[select] as Int > CHANGE) {
println("돈이 부족합니다.")
} else {
CHANGE -= MENU[select] as Int
println("사이다를 구매하셨습니다.")
}
} catch (e: Exception) {
println("목록에 없는 음료입니다.")
break
}
}
}
fun displayMenu() {
// 메뉴 표시
val df = DecimalFormat("#,###")
var menu = "*********메뉴**********\n"
for (o in MENU.entries.toSet()) {
menu += "${o.key} ${o.value} \n"
}
menu += "**********************\n" +
"\$ 잔액 : ${df.format(CHANGE)}"
println(menu)
}
과제 수행 중 공부한 내용
Kotlin으로 코드를 짰는데 필요한 내용들을 정리해보겠다.
1. Buffered Reader
Buffer란?
데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리 영역
ex) 컴퓨터에서 프린터기로 문서를 전송할 때, 프린터기가 한 문서를 인쇄할 동안 다른 문서들은 버퍼에서 대기함
특징
1. 키보드의 입력이 있을 때마다 한 문자씩 버퍼로 전송, 버퍼가 가득 차거나, 개행문자가 나타나면 버퍼에 쌓인 내용을 한번에 전송
2. 데이터 타입 String으로 고정
3. Scanner에 비해 입출력 시간이 짧음
사용법
val br = BufferedReader(InputStreamReader(System.`in`)) // 입력 스트림 생성 br.readLine() // 한 줄 읽는 메서드(개행문자까지) br.close() // 입력 스트림 종료
Stringtokenizer
BufferedReader를 사용할 때 함께 자주 사용되는 클래스이다.
문자열이 한 종류의 구분자로 연결되어있는 경우, 구분자를 기준으로 문자를 쉽게 분리할 수 있다.
보통 알고리즘 문제에서 BufferedReader가 개행문자를 기준으로 나눈 문자열을 공백 기준으로 나누어야 할 경우 많이 사용한다.
2. Decimal Format
DecimalFormat
숫자를 원하는 모양으로 처리하는 클래스이다.
사용법
val df = DecimalFormat("원하는 패턴") println(df.format(패턴을 적용할 숫자)) // 예를 들어 1000의 자리마다 ,를 넣고싶다면 // 원하는 패턴에 #,###를 넣고, // 적용할 숫자에 1234를 넣으면 결과는 1,234로 나타난다.
3. Map
객체 쌍(키, 값)을 보유하고 각 키에 해당하는 값을 효율적으로 검색하는 것을 지원하는 Collection 이다.
특징
1. Map의 키는 중복될 수 없다.
2. 각 키에대해 하나의 값만 보유한다.
3. MutableCollection이 아니기 때문에 읽기만 가능하다는 특징이 있다.
반응형
'개인 공부 > Java' 카테고리의 다른 글
[Java] String과 StringBuilder(+StringBuffer) (0) | 2024.09.04 |
---|---|
[Java] Java 톺아보기 (0) | 2024.08.06 |
[Java] 소켓 통신 구현하기 (0) | 2023.02.28 |
Comments