μλ° μ²« κ³Όμ κ° μ£Όμ΄μ‘λ€.
λ¨μν μ¬μΉμ°μ°μ΄ λλ κ³μ°κΈ° μ½λλ₯Ό μμ±ν μ€ μμλλ° μκ°λ³΄λ€ μꡬμ¬νμ΄ λ§μ μμ±μ μ‘°κΈ μ΄λ €μμ κ²ͺμλ€.
1λ¨κ³λ ν΄λμ€λ₯Ό λλμ§ μκ³ κ΅¬ννκ³ 2λ¨κ³μμλ ν΄λμ€λ₯Ό λλμ΄ κ΅¬ννλ μμΌλ‘ κ³Όμ κ° λλμ΄ μμλ€.
κ°μΈμ μΌλ‘ λ¨κ³λ³λ‘ λλμ΄μ Έ μλ μ΄μ λ 리ν©ν λ§ κ³Όμ μ μ΅νκ² νλ €λ μλλΌκ³ μκ°νκ³ λ°λΌμ 2λ¨κ³ κ³Όμ λ 1λ¨κ³μ νλ¦μ ν¬κ² λ°κΎΈμ§ μλ μ μμ ꡬ쑰λ₯Ό μ 리νκ³ κΉλνκ² λλλ κ²μ μ€μ μ λκ³ μμ±μ μμνλ€.
κ³Όμ λ λ μ μ(x β₯ 0)μ '+', '-', '*', '/' μ°μ°κΈ°νΈλ₯Ό μ
λ ₯ λ°μ μ¬μΉμ°μ°μ μννλ 'κ³μ°κΈ°'λ₯Ό λ§λλ κ²μ΄μλ€.
λ°λΌμ μ°μ°λ§λ€ κ°κ° λ€λ₯Έ λ©μλλ₯Ό ꡬννκ³ μ
λ ₯λ κΈ°νΈμ λ°λΌ ν΄λΉ μ°μ° λ©μλλ₯Ό νΈμΆνλ λ°©μμΌλ‘ ꡬ쑰λ₯Ό μ§°λ€.
κ³μ°κΈ° ν΄λμ€μΈ Calculator ν΄λμ€μμ λͺ¨λ μμ
μ μ²λ¦¬νλ€.
import java.util.InputMismatchException;
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
int b = 0;
double sum = 0;
String c = "";
while (true) {
//μμΈμ²λ¦¬
try {
System.out.println("---------------------");
System.out.println("κ³μ°ν λ μ μλ₯Ό μ
λ ₯νμΈμ (μ
λ ₯κ°>=0)");
System.out.print("첫 λ²μ§Έ μ μ: ");
a = sc.nextInt();
System.out.print("λ λ²μ§Έ μ μ: ");
b = sc.nextInt();
//μμ μ²΄ν¬ λ‘μ§
if(a < 0 || b < 0){
System.out.println("0λ³΄λ€ μμ κ°μ μ
λ ₯νμ΅λλ€. λ€μ μλν΄μ£ΌμΈμ!");
continue;
}
System.out.println("κ³μ°μ μ§νν μ°μ° κΈ°νΈλ₯Ό μ
λ ₯νμΈμ.(+, -, *, /)");
c = sc.next();
if(c.equals("+")){
sum = plusInt(a, b);
} else if(c.equals("-")){
sum = minusInt(a, b);
} else if(c.equals("*")){
sum = timesInt(a, b);
} else if(c.equals("/")){
try {
sum = dividedInt(a, b);
} catch (IllegalArgumentException e){
System.out.println(e.getMessage());
continue;
}
} else {
System.out.println("μ§μνμ§ μλ νμμ
λλ€. λ€μ μλν΄μ£ΌμΈμ.");
continue;
}
System.out.println("κ³μ° κ²°κ³Όκ°μ: " + sum + " μ
λλ€.");
sc.nextLine(); //λ¨μ κ°νλ¬Έμ(\n) μ§μ°κΈ°
System.out.println("μν°λ₯Ό λλ₯΄λ©΄ λ€μ κ³μ°μ μ§νν©λλ€. ('exit'λ₯Ό μ
λ ₯μ μ’
λ£λ©λλ€.)");
c = sc.nextLine();
if(c.equals("exit")) {
System.out.println("νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.");
break;
}
} catch (InputMismatchException e){
//InputMismatchException λ°μ μ μ²μλΆν° κ³μ°μ λ€μ μ€ν
System.out.println("μλͺ»λ μ
λ ₯μ
λλ€. 쑰건μ λ§κ² μ
λ ₯ν΄μ£ΌμΈμ.");
sc.nextLine(); //λ²νΌ λΉμ°κΈ°
continue; //νλ¦ λͺ
μν΄μ£ΌκΈ° μμ΄λ 무방
}
}
}
//μ¬μΉμ°μ° λ©μλ
public static int plusInt(int a, int b){
return a + b;
}
public static int minusInt(int a, int b){
return a - b;
}
public static int timesInt(int a, int b){
return a * b;
}
public static double dividedInt(int a, int b) throws IllegalArgumentException{
if(b == 0){
throw new IllegalArgumentException("λλκΈ° μ§ν μ λ λ²μ§Έ κ°μ΄ 0μ΄ λ μ μμ΅λλ€. λ€μ μλν΄μ£ΌμΈμ.");
}
return (double)a / b;
}
}
1λ¨κ³ κ³Όμ λ₯Ό μ¬μΉμ°μ°μ μννλ Calculator ν΄λμ€μ λ©μΈμ€νμ λ΄λΉνλ App ν΄λμ€λ‘ λλμ΄ λ¦¬ν©ν λ§νμλ€.
1μ°¨ μμ : 컬λ μ μ κ²°κ³Ό κ°μ μ μ₯νκ³ κ²ν°, μΈν° νμ© λλ½μΌλ‘ μΈν μμ
2μ°¨ μμ : 컬λ μ μ μ₯κ° μ κ±° κΈ°λ₯ ꡬν λλ½μΌλ‘ μΈν μμ
import java.util.ArrayList;
import java.util.List;
public class Calculator {
//μ°μ°κ²°κ³Ό μ μ₯ νλ
private final List<Double> operationResults = new ArrayList<>();
public double getOperationResults(){
return operationResults.get(0);
}
public void clearSumList(){
operationResults.clear();
}
public void setOperationResults(double sum){
operationResults.add(sum);
}
//μ¬μΉμ°μ° λ©μλ
public double plusInt(int a, int b){
return a + b;
}
public double minusInt(int a, int b){
return a - b;
}
public double timesInt(int a, int b){
return a * b;
}
public double dividedInt(int a, int b) throws IllegalArgumentException{
if(b == 0){
throw new IllegalArgumentException("λλκΈ° μ§ν μ λ λ²μ§Έ κ°μ΄ 0μ΄ λ μ μμ΅λλ€. λ€μ μλν΄μ£ΌμΈμ.");
}
return (double)a / b;
}
public void checkNegative(int a, int b) throws IllegalArgumentException{
if(a < 0 || b < 0){
throw new IllegalArgumentException("μ
λ ₯κ°μ μμκ° λ μ μμ΅λλ€. (μ
λ ₯κ°>=0)");
}
}
}
import java.util.InputMismatchException;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Calculator cal = new Calculator();
Scanner sc = new Scanner(System.in);
int a = 0;
int b = 0;
String c = "";
while (true) {
//μμΈμ²λ¦¬
try {
System.out.println("---------------------");
System.out.println("κ³μ°ν λ μ μλ₯Ό μ
λ ₯νμΈμ (μ
λ ₯κ°>=0)");
System.out.print("첫 λ²μ§Έ μ μ: ");
a = sc.nextInt();
System.out.print("λ λ²μ§Έ μ μ: ");
b = sc.nextInt();
//μμ μ²΄ν¬ λ©μλ
cal.checkNegative(a, b);
System.out.println("κ³μ°μ μ§νν μ°μ° κΈ°νΈλ₯Ό μ
λ ₯νμΈμ.(+, -, *, /)");
c = sc.next();
if(c.equals("+")){
cal.setOperationResults(cal.plusInt(a, b));
} else if(c.equals("-")){
cal.setOperationResults(cal.minusInt(a, b));
} else if(c.equals("*")){
cal.setOperationResults(cal.timesInt(a, b));
} else if(c.equals("/")){
try {
cal.setOperationResults(cal.dividedInt(a, b));
} catch (IllegalArgumentException e){
System.out.println(e.getMessage());
continue;
}
} else {
System.out.println("μ§μνμ§ μλ νμμ
λλ€. λ€μ μλν΄μ£ΌμΈμ.");
continue;
}
System.out.println("κ³μ° κ²°κ³Όκ°μ: " + cal.getOperationResults() + " μ
λλ€.");
sc.nextLine(); //λ¨μ κ°νλ¬Έμ(\n) μ§μ°κΈ°
//κ³μ°κΈ° μ μ₯κ° λΉμ°κΈ°
cal.clearSumList();
System.out.println("μν°λ₯Ό λλ₯΄λ©΄ λ€μ κ³μ°μ μ§νν©λλ€. ('exit'λ₯Ό μ
λ ₯μ μ’
λ£λ©λλ€.)");
c = sc.nextLine();
if(c.equals("exit")) {
System.out.println("νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€.");
break;
}
} catch (InputMismatchException e){
//InputMismatchException λ°μ μ μ²μλΆν° κ³μ°μ λ€μ μ€ν
System.out.println("μλͺ»λ μ
λ ₯μ
λλ€. 쑰건μ λ§κ² μ
λ ₯ν΄μ£ΌμΈμ.");
sc.nextLine(); //λ²νΌ λΉμ°κΈ°
continue; //νλ¦ λͺ
μν΄μ£ΌκΈ° μμ΄λ 무방
} catch (IllegalArgumentException e){
System.out.println(e.getMessage());
continue; //νλ¦ λͺ
μν΄μ£ΌκΈ° μμ΄λ 무방
}
}
}
}
μ²μμλ μ
λ ₯κ° a, b κ° μ μμ΄κΈ° λλ¬Έμ κ²°κ³Όκ°μ μ μ₯νλ sum λ³μλ intλ‘ μ μΈνλλ° λλμ
μ ꡬννλ©΄μ int / int μ°μ°μ μμμ μ΄νλ₯Ό λ²λ € μ νν κ²°κ³Όλ₯Ό μ»κΈ° μ΄λ ΅λ€λ κ±Έ κΉ¨λ¬μλ€.
κ·Έλμ sum λ³μλ₯Ό double νμΌλ‘ λ°κΎΈκ² λμκ³ ν΄λΉ κ³Όμ μμ double μ int λ³΄λ€ ν° μλ£νμΌλ‘ μλ νλ³νμ΄ λμ΄ λ©μλλ€μ μμ νμ§ μμμ§λ§ λλμ
μμλ μ€μ κ²°κ³Όλ₯Ό μ»κΈ° μν΄ (double)a / b λ‘ νλ³νμ ν΄μ€¬λ€.
μ΄κΈ°μλ μ
λ ₯λ νμ
μ΄ λ§μ§ μμΌλ©΄ λ°μνλ InputMismatchException μ μ²λ¦¬νκΈ° μν΄ λ°λ³΅λ¬Έ μ 체λ₯Ό κ°μΈκ³ μλ ννλ‘ try-catch λ¬Έμ μμ±νλ€.
νμ§λ§ int νμΌλ‘ ꡬνν λλκΈ° λ©μλμμ λ³μ b μ κ°μ΄ 0μΌ κ²½μ° ArithmeticException μμΈκ° λ°μνκ³ ν΄λΉ μμΈμ λν΄μλ μ²λ¦¬ν΄μΌ νλ€.
μ 체 try-catch λ¬Έμ ν΄λΉ μμΈμ λν catch λ¬Έμ μΆκ°νλκ² κΉλνλ€λ μκ°μ΄ λ€μμ§λ§ λλκΈ° λ©μλμμλ§ ν΄λΉ μμΈκ° λ°μνκΈ°μ μ΄λ₯Ό λͺ
μνκΈ° μν΄ ν΄λΉ ꡬ문μλ§ λ°λ‘ try-catch λ¬Έμ μΆκ°νμλ€.
κ·Έλ°λ° μ€μν λλμ
μΌλ‘ λ°κΎΈκ³ λλ λ³μ b μ κ°μ 0μ λ£μ΄λ μμΈκ° λ°μνμ§ μμκ³
μ€νλ € Infinity λΌλ κ°μ΄ μΆλ ₯λλ€. μ΄κ±΄ μ€μν μλ£λ₯Ό 0μΌλ‘ λλλ λ°μνλ κ°μΌλ‘ μλ°μμ μ€λ₯λ‘ μΈμνμ§ μκΈ° λλ¬Έμ μ΄μ μ²λΌ μμΈ μ²λ¦¬λ‘ κ±Έλ¬λΌ μ μμλ€.
κ·Έλμ μ²μμ Exception ν΄λμ€λ₯Ό μ΄μ©ν΄ κ°μ λ‘ μμΈλ₯Ό λ°μμν€λλ‘ νλλ° Exception μ λ무 ν¬κ΄μ μΈ μμΈλΌ μν©μ μ΄μΈλ¦¬λ μμΈ νμ
μ΄ μλλΌκ³ λκΌλ€.
ν΄λΉ μν©μ 'μλͺ»λ κ°βμ λκΈ΄ κ²½μ°λκΉ IllegalArgumentException μ΄ λ μ μ νλ€κ³ νλ¨νκ³ μμ μ μ§ννλ€.
μ΅μ’
μ μΌλ‘ λ³μ b μ κ°μ΄ 0μΌ λ "λλκΈ° μ§ν μ λ λ²μ§Έ κ°μ΄ 0μ΄ λ μ μμ΅λλ€. λ€μ μλν΄μ£ΌμΈμ." λΌλ λ©μΈμ§κ° λ΄κΈ΄ IllegalArgumentException μ λͺ
μμ μΌλ‘ λ°μμμΌ°κ³ catch λ¬Έμ e.getMessage() λ©μλλ₯Ό ν΅ν΄ μμΈ λ©μμ§λ₯Ό μΆλ ₯νκ² λ§λ€μλ€. μ΄λ κ² κ΅¬μ‘°λ₯Ό λ°κΎΈλ©΄μ 0μΌλ‘ λλλ μν©μ μ’ λ λͺ
ννκ² μ²λ¦¬ν μ μμκ³ νλ‘κ·Έλ¨ νλ¦λ μμ°μ€λ½κ² μ΄μ΄κ° μ μμλ€.
1μ°¨ μμ
2λ¨κ³ κ³Όμ μ μꡬμ¬νμΈ μ»¬λ μ νμ©μ λλ½ν΄μ μΆκ° μμ μ μ§ννλ€.
리μ€νΈμ κ°μ μ μΌλ‘ μ κ·Όν΄ κ²°κ³Όκ°μ κ°μ Έμ€κ³ μμ ν μ μλλ‘ κ²ν°, μΈν° λ©μλλ μΆκ°λ‘ ꡬννμλ€.
λ΄κ° ꡬνν μΈν°λ κΈ°λ₯μ μΈ μλ―Έμμ λΉμ·νλ° μΌλ°μ μΈ μΈν°μλ ꡬ쑰μ μΌλ‘ μ°¨μ΄κ° μμ΄ μ΄ λΆλΆμ λν΄μ νν°λκ» μ§λ¬Έμ λλ Έλ€.
νν°λλ "κ°μ μ€μ νλ μΈν°λ³΄λ¨ μ μ₯μ κ°κΉμ΄ λλμ΄μ§λ§ ν μν©μμ μꡬμ¬νμ λΆν©νλ ꡬνμ΄λΌκ³ μκ°νλ€." λΌκ³ λ΅λ³ν΄ μ£Όμ ¨κΈ°μ λ€λ₯Έ μμ μ¬νμ κ±°μΉμ§ μκ³ λ§λ¬΄λ¦¬νμλ€.
μΆκ°μ μΌλ‘ 리ν©ν λ§μ΄λ κΈ°μ‘΄μ μ½λλ₯Ό κ·Έλλ‘ κ°μ Έκ°λ κ²μ΄ μλλΌκ³ μλ €μ£Όμ ¨μ§λ§ μ΅λν ꡬ쑰λ₯Ό λ³κ²½νμ§ μκ³ μμ±νκΈΈ μνλ μ΄κΈ°μ μμ± μλλ₯Ό λ€μΌμκ³ λ μ΄ν΄ν΄μ£Όμ ¨λ€.
2μ°¨ μμ
μꡬμ¬ν μ€ μ»¬λ μ μ μ₯κ° μ κ±° κΈ°λ₯μ΄ μμλλ° λλ½ν΄μ μμ νμλ€.
ν λ²μ λ°λ³΅μ΄ μ’ λ£λκΈ° μ μ μ μ₯κ°μ λΉμ°λ λ©μλκ° μ€νλλ κ΅¬μ‘°λ‘ λ³κ²½λ¨μ λ°λΌGetter()λoperationResults.(operationResults.size()-1) : λ§μ§λ§ μ μ₯κ° μΆλ ₯μ΄ μλoperationResults.get(0) : 0λ²μ§Έ μΈλ±μ€μ μ μ₯κ°μΌλ‘ λ³κ²½νμλ€.
3λ¨κ³ λμ κ³Όμ λ enum, μ λ€λ¦, λλ€, μ€νΈλ¦Όμ λͺ¨λ μ¬μ©ν΄μΌ νλ κ³Όμ μ΄λ€.
μ€μ€λ‘ λλΌκΈ°μ νμ΅μ΄ λΆμ‘±νλ€λ νλ¨μ΄ λ€μ΄ μ‘°κΈ λ νμ΅μ μ§νν νμ μμν μμ μ΄λ€.