int ν λ μμ κ°μ ꡬνλ Calculator κ° double νμ κ°μ΄ μ
λ ₯λΌλ μ¬μ© κ°λ₯νλλ‘ νμ₯μν¬ κ²
λμ κ³Όμ μμ κ°μ₯ μ€μν μꡬμ¬νμ΄λ€. λ¨μν
doubleλ‘μ νλ³νμ΄ μλλΌ μ λ€λ¦μ μ μ©ν΄μΌ νλ€.
μ¬κΈ°μ μ λ€λ¦μ΄λ ν€μλμ μ κ·ΌνκΈ°λ μ μ λ¬Έμ κ° μκΈ΄λ€.
2λ¨κ³κΉμ§μ κ³μ°κΈ°λ Scanner μ nextInt() λ©μλλ₯Ό ν΅ν΄ μ«μλ₯Ό μ
λ ₯λ°μλ€.
νμ§λ§ ν΄λΉ λ©μλλ μ μλ§ μ
λ ₯ κ°λ₯νλ©° μ€μλ₯Ό μ
λ ₯λ°μ μ InputMismatchException μμΈκ° λ°μνλ€.
κ·Έλ λ€κ³ nextDouble() μ μ¬μ©νκΈ°μ λ¨μν νλ³νμ νλκ²μ΄ μλλΌλ μꡬμ¬νκ³Ό μ μ, μ€μ λ κ°μ§μ μ νμ¬νμ λͺ¨λ λ°μνμ§ λͺ» νλ κ²μ΄λΌ μκ°νλ€.
κ³ λ―Όμ μκ°μ κ±°μ³ λ¬Έμμ΄μ λ°μ μλ£νμ λ§κ² νμ±νλ λ°©λ²μ μ ννλ€.
public class NumberParser {
public Number parseNumber(String number){
if(number.contains(".")){
return Double.parseDouble(number);
} else {
return Integer.parseInt(number);
}
}
}
λ¬Έμμ΄μ ν΄λΉ νμ
μΌλ‘ λ³ν μν€λ parseNumber() λ©μλλ₯Ό κ°μ§ Parserλ₯Ό λ§λ€μλ€.
μμμ μ λνλ΄λ . κΈ°νΈλ₯Ό κΈ°μ€μΌλ‘ λνΌν΄λμ€ Double νκ³Ό Integer νμ
μΌλ‘ λ³νμμΌ°κ³ νλμ λ©μλμμ μλ‘ λ€λ₯Έ μ«μ νμ
μ λ°νν μ μκΈ°μ Number λ₯Ό λ°ν νμ
μΌλ‘ μ€μ νμ¬ μ²λ¦¬νλ€.
'μ λ€λ¦μ μ¨μΌνλ€' λ μλ°κ°μ μ΅μ§λ‘ μ λ€λ¦μ νμ©νλ €λ€ λ³΄λ μ€νλ € μ λ€λ¦μ μ₯μ μ μ΄λ¦¬μ§ λͺ»νκ² λμλ€.
import java.util.ArrayList;
import java.util.List;
public class ArithmeticCalculator<T extends Number> {
private enum OperatorType {
PLUS("+"), MINUS("-"), TIMES("*"), DIVINED("/");
private final String oper;
OperatorType(String oper) {
this.oper = oper;
}
public String getOper() {
return oper;
}
public static OperatorType operChoice(String c){
for(OperatorType oper : OperatorType.values()) {
if (oper.getOper().equals(c)){
return oper;
}
}
throw new IllegalArgumentException("ν΄λΉνλ μ°μ°μκ° μμ΅λλ€.");
}
}
private final List<Number> operationResults = new ArrayList<>();
public void clearOperationResults() {
operationResults.clear();
}
public void removeOperationResult(int i) {
operationResults.remove(i);
}
public void setOperationResults(Number sum) {
operationResults.add(sum);
}
public Number getOperationResult() {
return operationResults.get(operationResults.size()-1);
}
public List<Number> getOperationResults() {
return operationResults;
}
public void checkNegative(T num1, T num2) throws IllegalArgumentException{
if(num1.doubleValue() < 0 || num2.doubleValue() < 0){
throw new IllegalArgumentException("μ
λ ₯κ°μ μμκ° λ μ μμ΅λλ€. (μ
λ ₯κ°>=0)");
}
}
public void calculator (T num1, T num2, String c){
OperatorType oper = OperatorType.operChoice(c);
checkNegative(num1, num2);
switch (oper) {
case PLUS:
setOperationResults(num1.doubleValue() + num2.doubleValue());
break;
case MINUS:
setOperationResults(num1.doubleValue() - num2.doubleValue());
break;
case TIMES:
setOperationResults(num1.doubleValue() * num2.doubleValue());
break;
case DIVINED:
if(num2.doubleValue() == 0){
throw new IllegalArgumentException("λλκΈ° μ§ν μ λ λ²μ§Έ κ°μ΄ 0μ΄ λ μ μμ΅λλ€. λ€μ μλν΄μ£ΌμΈμ.");
}
setOperationResults(num1.doubleValue() / num2.doubleValue());
break;
}
System.out.println("κ³μ° κ²°κ³Όλ: " + getOperationResult() + " μ
λλ€.");
}
}
import java.util.List;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
NumberParser np = new NumberParser();
Scanner sc = new Scanner(System.in);
ArithmeticCalculator<Number> ac = new ArithmeticCalculator();
while(true) {
try {
System.out.println("κ³μ°μ μ§νν λ μ«μλ₯Ό μ
λ ₯νμΈμ. (μ
λ ₯κ° >=0)");
System.out.print("첫 λ²μ§Έ μ
λ ₯κ°: ");
Number num1 = np.parseNumber(sc.nextLine());
System.out.print("λ λ²μ§Έ μ
λ ₯κ°: ");
Number num2 = np.parseNumber(sc.nextLine());
System.out.println("κ³μ°μ λ§λ μ°μ°κΈ°νΈ(+, -, *, /)λ₯Ό μ
λ ₯νμΈμ!");
String c = sc.nextLine();
ac.calculator(num1, num2, c);
System.out.println("μ«μλ₯Ό μ
λ ₯νλ©΄ μ§κΈκΉμ§μ κ³μ°κ° μ€ μ
λ ₯κ°λ³΄λ€ ν° κ°μ μΆλ ₯ν©λλ€.");
Number num3 = np.parseNumber(sc.nextLine());
PrintList printList = () -> {
List<Number> f = ac.getOperationResults().stream().filter(num -> num.doubleValue() > num3.doubleValue())
.toList();
if(f.isEmpty()){
System.out.println("μ
λ ₯κ°λ³΄λ€ ν° κ°μ΄ μμ΅λλ€.");
} else {
System.out.println("μ
λ ₯κ°λ³΄λ€ ν° κ°μ: " + f);
}
};
printList.prt();
System.out.println("κ³μν΄μ κ³μ°μ μ§ννμλ €λ©΄ μν°λ₯Ό μ
λ ₯νμΈμ.('exit' λ₯Ό μ
λ ₯μ μ’
λ£λ©λλ€.)");
String check = sc.nextLine();
if(check.equals("exit")){
break;
}
} catch (NumberFormatException e) {
System.out.println("μλͺ»λ μ
λ ₯μ
λλ€.");
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
sc.close(); //μ€μΊλ μ’
λ£ μμΉ μμ
}
}
ArithmeticCalculator<T extends Number>λΌλ μ λ€λ¦ ν΄λμ€λ₯Ό μμ±νμ§λ§ κ²°κ΅ λ§€κ°λ³μλ₯Ό Number λ‘ λ°λ κ²κ³Ό λ€λ₯Ό λ° μλ€.
νμλ§ μ λ€λ¦μ΄μ§ μ€μ§μ μΈ νμ
μΆμνμ μ΄μ μ μ ν λλ¦¬μ§ λͺ»ν μ½λμΈ κ²μ΄λ€.
λν μ
λ ₯κ° νμ±μ Numberλ‘ κ³ μ νκΈ°μ calculator() λ©μλμμ μ°μ°μ μν λ€μ΄μΊμ€ν
μ΄ νμνλ€.
λ§μ½ μ λ€λ¦μ μλ―Έ μκ² μ°κ³ μ νλ€λ©΄ num1, num2κ° int-int, int-double, double-int, double-double μ‘°ν©μΌ κ²½μ°λ₯Ό κ°κ° κ³ λ €ν΄ νμ
λ³λ‘ μ²λ¦¬λ₯Ό ν΄μΌ νκ² μ§λ§ κ·Έλ κ² κ΅¬νν μ μ½λ κ°λ
μ±μ κΈκ²©ν λ¨μ΄μ§κ³ μ μ§λ³΄μλ μ΄λ €μμ§κ² λλ€.
κ²°λ‘ μ μΌλ‘ νμ¬ κ΅¬μ‘°λ μ λ€λ¦μ μ°κΈ° μν μ€κ³ μμ²΄κ° μλͺ»λλ€κ³ μκ°λλ€.
enum(μ΄κ±°ν)μ μ¬μ©μ λ€μν μ₯μ μ μ»μ μ μλ€.
enumμ μ₯μ
1. μλ―Έ μλ μμλ₯Ό κ·Έλ£Ήν ν μ μλ€.
- μμ) μμΌ(MONDAY, TUESDAY ...) λ±
- switchλ¬Έκ³Ό μ μ΄μΈλ¦°λ€.
- 쑰건 λΆκΈ°μμ
enumμ¬μ©μ κ°λ μ±λ μ’κ³ κ΄λ¦¬λ μ¬μμ§λ€.- κ°λΏλ§ μλλΌ λμλ λ΄μ μ μλ€.
enumμμ μμ±μ, νλ, λ©μλλ λ£μ μ μμ΄ λ¨μν κ° μ΄μμ μλ―Έλ₯Ό κ°μ§λ€.- μ μ§λ³΄μμ νμ₯μ±μ΄ μ’λ€.
- μλ‘μ΄ κ°μ΄ νμν΄λ κΈ°μ‘΄ μ½λλ₯Ό κ±°μ 건λλ¦¬μ§ μκ³
enumμ μλ‘μ΄ μμλ§ μΆκ°νλ©΄ λλ€.
enum μ¬μ©μ μ΅μμΉ μμ κ²°κ΅ 1, 2λ²μ λ κ°μ§ μ₯μ λ°μ ꡬνμ νμ§ λͺ»νλ€.
μ°μ° λ©μλλ₯Ό λ£μ΄λ³΄λ € λ
Έλ ₯μ νμμΌλ μ¬κΈ°μλ Number νμ΄ λ°λͺ©μ μ‘μλ€.
enum μ μ°μ° λ©μλλ₯Ό λ£λ μ΄μ λ μ°μ°μ enum μμμ μ²λ¦¬νκ³ μ νλ λͺ©μ μ΄μ§λ§ Number λ₯Ό μ°μ°νκΈ° μν΄μ νλ³νμ΄ νμνλ€λ μ μ½μ΄ μμκΈ°μ νμ¬ μν©μμμ ꡬνμ λ΄ λ₯λ ₯ λ²μλ₯Ό λ²μ΄λλ€κ³ λκΌλ€.
λ΄κ° κ°λΉν μ μλ λ²μ λ΄μμ μꡬμ¬νμ μ΅λν λ°μνλ € λΆλ¨ν λ Έλ ₯νλ€.
κ·Έλ¬λ ꡬ쑰λ₯Ό μ€κ³νκ³ κ΅¬νμ λ€μ΄κ°λ μ€λΉ λ¨κ³κ° μ΅μνμ§ μμ 무μμ λΆλͺνλ― μμ μ μ΄μ΄κ°λ€ 보λ λ§λ¬΄λ¦¬ λ¨κ³μ μ΄λ₯΄λ¬μμΌ λ¬Έμ μ μ λ°κ²¬νκ² λμκ³ κ·Έ μμ μλ μ΄λ―Έ λ΄κ° ν΄κ²°ν μ μλ λ²μλ₯Ό λ²μ΄λ μ½λκ° λμ΄ μμλ€.
enum, λλ€μ, Stream μμ κΈ°λ³Έμ μΈ μμ€μμλ§ μ¬μ©νμ λΏ κ°κ°μ νΉμ±κ³Ό νμ©λ²μ μΆ©λΆν μ΄ν΄νμ§ λͺ»ν μνμκΈ°μ κ·Έ μ₯μ κ³Ό κ°λ₯μ±μ μ΄λ¦¬κΈ°λ³΄λ€λ ꡬνμ κΈκΈν λͺ¨μ΅μ΄μλ€.
μ¬λ¬λͺ¨λ‘ μμ¬μμ΄ λ¨λ κ³Όμ μμ§λ§ μ€μ μ μΌλ‘ νμ΅ν΄μΌ ν λ°©ν₯μ λΆλͺ ν μκ² λμλ€λ μ μ μμλ₯Ό λκ³ μ νλ€.
"κ·Έ μμ μλ μ΄λ―Έ λ΄κ° ν΄κ²°ν μ μλ λ²μλ₯Ό λ²μ΄λ μ½λκ° λμ΄ μμλ€."
β 리ν©ν°λ§μ λ¦μ λλ μμ΅λλ€!!!
enumμ λ³λμ ν΄λμ€κ° μλ λ΄λΆ ν΄λμ€λ‘ μ μν νΉλ³ν μ΄μ κ° μλμ?
μꡬμ¬νμ "Calculator ν΄λμ€μ μ μ₯λ μ°μ° κ²°κ³Όλ€ μ€ κ°μ₯ λ¨Όμ μ μ₯λ λ°μ΄ν°λ₯Ό μμ νλ κΈ°λ₯μ κ°μ§ λ©μλλ₯Ό ꡬν"λΌκ³ μλλ° μ¬κΈ°μ μλ λ©μλμΈκ°μ?
sumListλ μ μ΄λ¦μ΄ sumListμΈκ°μ? sumμ ν¬ν¨ν΄ λ€λ₯Έ λͺ¨λ κ²°κ³Όλ₯Ό λ΄μ μ μλ κ² μλκ°μ?