계산기 만들기Language/Java2023. 12. 30. 15:13
Table of Contents
728x90
시작
3가지 중 마지막이다 '-'
백준을 풀면서 슥 지나갔던 것이라 조금은 수월하게 가능하지 싶다.
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("첫 번째 숫자를 입력하세요: ");
double num1 = scanner.nextDouble();
System.out.println("연산자(+, -, *, /)를 입력하세요: ");
char operator = scanner.next().charAt(0);
System.out.println("두 번째 숫자를 입력하세요: ");
double num2 = scanner.nextDouble();
scanner.close();
double output;
switch(operator)
{
case '+':
output = num1 + num2;
break;
case '-':
output = num1 - num2;
break;
case '*':
output = num1 * num2;
break;
case '/':
if(num2 != 0.0) {
output = num1 / num2;
} else {
System.out.println("0으로 나눌 수 없습니다.");
return;
}
break;
default:
System.out.println("잘못된 연산자입니다.");
return;
}
System.out.println(num1+" "+operator+" "+num2+": "+output);
}
}
늘 하듯이 제일 앞에는
System.out.println("첫 번째 숫자를 입력하세요: ");
double num1 = scanner.nextDouble();
System.out.println("연산자(+, -, *, /)를 입력하세요: ");
char operator = scanner.next().charAt(0);
System.out.println("두 번째 숫자를 입력하세요: ");
double num2 = scanner.nextDouble();
scanner.close();
여기서 double을 사용한 이유는 소수점 계산도 고려해서 double을 사용하게 되었고
char 같은 경우 문자열이 들어가기 때문에 넣게 되었다(굉장히 TMI)
scanner.close() 같은 경우 예제나 간단한 곳에선 리소스 낭비가 크지 않아서 상관없지만 이왕이면 습관 들여놓는게 좋다고 한다.
"char operator = scanner.next().charAt(0);" 이 코드는 사용자로부터 입력받은 문자열의 첫 번째 문자를 가져와서 'operator'라는 변수에 저장하는 역할을 합니다.
scanner.next()는 사용자로부터 입력받은 문자열을 반환합니다. 예를 들어, 사용자가 "+", "-", "*", "/" 중 하나를 입력하면 해당 문자열이 반환됩니다. charAt(0)는 문자열에서 첫 번째 문자를 가져옵니다. (자바에서는 문자열의 첫 번째 문자의 위치를 0으로 계산합니다.)
따라서 이 두 메소드를 조합하면, 사용자로부터 입력받은 연산자를 char 형태로 저장할 수 있습니다. 이렇게 하면 이후 switch-case 문에서 각 연산자에 따른 연산을 쉽게 구분할 수 있습니다.
조금 애를 먹었던 부분은 output에 어떻게 값을 저장할지...? 변수 선언을 어떻게 해야할지
"double output;"이라는 선언은 'output'이라는 이름의 double 타입 변수를 선언하는 것입니다. 이때, 변수는 선언만 되고 초기화는 되지 않았기 때문에 아직 어떤 값도 가지고 있지 않습니다. Java에서는 변수를 선언할 때 그 타입을 명시해야 합니다. 여기서 'double'은 실수를 저장할 수 있는 데이터 타입을 의미합니다. 따라서 'output'은 실수 값을 저장할 수 있게 됩니다. 이후에 switch-case 문에서 각 연산의 결과를 'output'에 저장하게 됩니다. 이렇게 선언과 초기화를 분리할 수 있습니다. 즉, 이 코드는 'output'이라는 이름의 변수를 만들어놓고, 나중에 연산 결과를 저장하기 위한 공간을 미리 확보하는 것입니다.
이렇게 하게되면 변수 선언이 된다? 라고 한다.
switch(operator)
{
case '+':
output = num1 + num2;
break;
case '-':
output = num1 - num2;
break;
case '*':
output = num1 * num2;
break;
case '/':
if(num2 != 0.0) {
output = num1 / num2;
} else {
System.out.println("0으로 나눌 수 없습니다.");
return;
}
break;
default:
System.out.println("잘못된 연산자입니다.");
return;
}
System.out.println(num1+" "+operator+" "+num2+": "+output);
}
switch 문을 써주기는 하는데 나눗셈에서 예외처리를 하지 않았더니 문제가 좀 생겼다.
case '/':
if(num2 != 0.0) {
output = num1 / num2;
} else {
System.out.println("0으로 나눌 수 없습니다.");
return;
}
break;
요 녀석을 이렇게 예외사항을 추가해주지 않으면 저때 에러가 떠버린다.
여튼 잘 마무리 되었다. 끝이겠지?
마치며
뒤늦게 자바를 다듬고 있는데 처음 배울때 했으면 헤매다가 끝났을 것 같은데 지금은 대충 뭐 넣을지만 정해지면 일단 코드를 칠 수 있다는게 그간 정말 소폭 실력이 오른게 아닐까 한다. 이런 간단한 프로그래밍 하나 하는데도 뭘 넣고 어떻게 할지를 고민하는데 대규모로 뭔가를 하는 곳은 생각의 크기가 얼마나 커야할까라는 생각이 참 많이 들었다. 학원에서 하는 그런 프로젝트와는 구성이나 준비 단계 자체가 다르다는데 대체 현업은 어떤 곳일까?
728x90
'Language > Java' 카테고리의 다른 글
오버라이딩, 오버로딩 그게 뭔데요 (0) | 2024.01.11 |
---|---|
자바 애플리케이션을 실행 했을 때 일어나는 일들 (0) | 2024.01.06 |
배열 (1) | 2023.12.20 |
가위, 바위 ,보 만들기 (1) | 2023.12.15 |
구구단 만들기 (0) | 2023.12.14 |
@Marty_ :: 소리 지르고 싶다.
쓰임 있는 사람이 되기 위해 노력 중입니다.