-
Notifications
You must be signed in to change notification settings - Fork 129
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[문자열 덧셈 계산기] 김지원 미션 제출합니다. #140
base: main
Are you sure you want to change the base?
Conversation
Write these: - fun calculator - fun separator - fun customSeparator
- fun init - fun getSum
- Create Separator class for separating data - Declared two variables: 1. separates 2. customSeparates
Added function getCustomSeparates - If input includes custom separators (// and \n), extracts characters between them. - Required to correctly parse and handle input strings with custom separators.
if input is empty or " " return 0 if input include only custom separates return 0
Added splitting input with separates(included custom separates) - Convert split result to Int if it is number - Throw exception if the split result is not number
- Renamed function `init` to `setInput` to better reflect its purpose - The function sets the value of the `input` variable
- Calculate the sum of the separated values using the separator - Return calculated sum
- Print calculator sum result
- Changed variable access to private to encapsulate data
- Added comments to clarify purpose of functions
- The original condition was require(endIndex == 1), which was incorrect - Changed the condition to require(endIndex != -1) to handle input separators correctly
- input can contain custom separators between // and \n - Added substring logic to skip custom separators and split only the relevant part of the input
- Changed variable access to private to encapsulate data
private val separates: MutableList<Char> = mutableListOf(',', ':') | ||
private val customSeparates = Pair("//", "\\n") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
',', ':'"//", "\\n"
요 아이들은 상수로 관리하는게 가독성에 더 좋다고 생각해요 !
|
||
startIndex = customSeparates.first.length | ||
endIndex = input.indexOf(customSeparates.second) | ||
require(endIndex != -1) {"커스텀 구분자를 이용하려면 //, \\n 사이에 작성하세요."} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
require를 사용하는건 생각 못했네요 ! 하나 배웠습니다 :)
item.toIntOrNull()?.let { | ||
result.add(it) | ||
} ?: run { | ||
throw IllegalArgumentException("구분된 ${item}은 숫자가 아닙니다.") | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
대박 toIntOrNull을 요런식으로도 활용할 수 도 있군요 ! 좋은 활용법 배워갑니다 !
startIndex = customSeparates.first.length | ||
endIndex = input.indexOf(customSeparates.second) | ||
require(endIndex != -1) {"커스텀 구분자를 이용하려면 //, \\n 사이에 작성하세요."} | ||
separates.addAll(input.substring(startIndex, endIndex).toList()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 잘못 이해한걸 수 도 있어서 조심스럽게 말씀드리자면
저는 기본 구분자로 ',', ':'
요 아이들을 사용해서 숫자를 분리하는 케이스 하나와
커스텀 구분자로 숫자를 분리하는 케이스 두 케이스로 분리해서 코드를 작성했는데
제가 작성하신 코드를 이해한바로는 기본 구분자 + 커스텀 구분자로 구분한다고 이해했는데 요게 맞을까용 ,,?
|
||
class Separator { | ||
private val separates: MutableList<Char> = mutableListOf(',', ':') | ||
private val customSeparates = Pair("//", "\\n") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
개인적으로 요 아이들은 "커스텀 구분자를 입력하기 위한 접두어/접미어" 로 생각을해서
customSeparates 즉, "커스텀 구분자들" 이란 이름과는 조금 맞지 않다는 생각을 했어요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
함수 활용이 참 좋으신 것 같아요 리뷰 남겨주셔서 감사합니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
늦었지만 맞리뷰하러 왔습니다!
현재 한 함수에 여러 로직이 함께 수행되다 보니, 함수의 목적을 한눈에 파악하기 어렵고, 테스트 코드 작성 시에도 어려움이 있을 것 같습니다. 그래서, 함수의 기능을 더 세분화하는 것이 좋을 것 같다는 의견 드립니다!
2주차 미션도 화이팅입니다! 🫡
// 구분자를 통해 구분하는 함수 | ||
fun run(input: String): List<Int> { | ||
if (input.isBlank()) return listOf(0) | ||
|
||
if (input.startsWith(customSeparates.first)) { | ||
getCustomSeparate(input) | ||
if (endIndex+customSeparates.second.length == input.length) return listOf(0) | ||
} | ||
|
||
input.substring(endIndex + customSeparates.second.length).split(*separates.toCharArray()).forEach { item -> | ||
item.toIntOrNull()?.let { | ||
result.add(it) | ||
} ?: run { | ||
throw IllegalArgumentException("구분된 ${item}은 숫자가 아닙니다.") | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 함수의 이름을 run
에서 extractNumbers
나 parseNumbers
로 변경하면, 함수의 목적을 더 명확하게 나타낼 수 있을 것 같아요!
✏️ main
✏️ calculator
입력 기능 - setInput()
input: String
을 선언한다.camp.nextstep.edu.missionutils.Console
의readLine()
을 이용하여 입력받는다.합 구하기 - getSum()
✏️ separator
변수 선언
,
,:
)가 담겨있는 변경 가능한 리스트//
,\n
)가 담겨있는 변수빈 값 처리 1 - run()
커스텀 구분자 추출 - getCustomSeparate()
//
로 시작하지 않는다면 커스텀 생성자가 없는 것이므로 반환한다.//
로 시작한다면\n
의 인덱스를 찾는다. -> 커스텀 생성자가 있어야 한다.\n
이 없다면 오류를 발생시킨다. -> 잘못된 입력이다.\n
이 있다면 separates에 추가한다.빈 값 처리 2 - run()
구분하고 result에 추가하기
\n
이후 부터 문자열의 끝까지, split()을 통해 구분한다.반환하기