[Java] 계산기 프로그램 본문
Fizzyelf 2020. 9. 29. 19:38
import java.util.Scanner; public class Qu3_5 { public static void main(String[] args) { do{ //5. 사용자로부터 정수를 입력 받아 변수 firstNum에 저장하여라 Scanner sc = new Scanner(System.in); System.out.println("첫 번째 숫자를 입력해주세요"); int firstNum = sc.nextInt(); //6. 사용자로부터 부호를 입력 받아 buho에 저장하여라 System.out.println("부호를 입력해주세요"); String buho = sc.next(); //7. 사용자로부터 정수를 입력 받아 변수 secondNum에 저장하여라 System.out.println("첫 번째 숫자를 입력해주세요"); int secondNum = sc.nextInt(); //8. buho에 저장된 값이 '+'이면 add메서드, '-'이면 substract메서드 // '*'이면 multiply메서드, '/'이면 divide메서드를 호출하고 결과를 출력하여라. // 단. buho의 저장된 값이 위의 4가지 경우가 아니라면 '연산종료'를 출력하여라. Calc cl = new Calc(); if("+".equals(buho)) { int add = cl.add(firstNum, secondNum); System.out.println("두 수의 합계 : "+add+"입니다."); System.out.println(); } else if("-".equals(buho)){ int substract = cl.substract(firstNum, secondNum); System.out.println("두 수의 차수 : "+substract+"입니다."); System.out.println(); } else if("*".equals(buho)){ long multiply = cl.multiply(firstNum, secondNum); System.out.println("두 수의 곱은 : "+multiply+"입니다."); System.out.println(); } else if("/".equals(buho)) { float divide = cl.divide(firstNum, secondNum); System.out.println("두 수의 나누어 소수점 2번째 자리에서 첫쨰 자리까지 반올림한 결과는 : "+divide+"입니다."); System.out.println(); } else { System.out.println(); System.out.println("부호를 잘못 입력하셨습니다. 프로그램을 종료합니다"); break; } } while(true); } } class Calc { //1. 두 개의 int타입 입력받아 두 인자의 합의 결과를 반환하는 인스턴스메서드 // add를 구현 하여라. int add(int i , int k ){ int result = i + k ; return result; } //2. 두 개의 int타입 입력받아 앞의 인자에서 뒤의 인자를 뺀 결과를 반환하는 // 인스턴스메서드 substract를 구현 하여라. int substract(int i, int k){ int result = i - k; return result; } //3. 두 개의 int타입 입력받아 두 인자의 곱의 결과를 반환하는 인스턴스메서드 // multiply를 구현 하여라. // 단. overflow를 고려하여라. long multiply(int i, int k){ long result = i * k ; return result; } //4. 두 개의 int타입 입력받아 앞의 인자를 뒤의 인자로 나누기한 결과를 반환하는 // 인스턴스메서드 divide를 구현 하여라. // 단. 결과는 소수점 두 번째 자리에서 반올림하여 젓 번째 자리까지 표현 하여라. float divide(int i , int k){ float result = (int)((float)i/k*10+0.5)/10f; return result; } }
728x90
반응형
이번 시간에는 작성한 메서드를 호출하여 사용하는 방법에 대해 알아볼까 합니다.
메서드에 선언된 매개 변수가 있는지 없는지에 따라, 메서드 호출은
이와 같이 두 가지 방식으로 나뉩니다.
계산기를 호출하는 예제를 통해 메서드가 호출되는 방식에 대해 더 구체적으로 알아보겠습니다.
public class Main { public static void main(String[] args) { Calculator mycal = new Calculator(); mycal.power(); System.out.println("계산기가 켜졌습니다."); long result1 = mycal.add(5,3); long result2 = mycal.subtract(5,3); long result3 = mycal.multiply(5,3); long result4 = mycal.divide(5,3); System.out.println("add(5,3)= " + result1); System.out.println("subtract(5,3)= " + result2); System.out.println("multiply(5,3)= " + result3); System.out.println("divide(5,3)= " + result4); mycal.power(); System.out.println("계산기를 끕니다."); } } class Calculator{ long add(long a, long b){ long result = a+b; return result; } long subtract (long a, long b){ return a-b; } long multiply(long a, long b){ return a*b; } long divide(long a, long b){ return a/b; } boolean power = false; void power(){ power = !power; } }매개변수가 없는 power 메서드를 통해 계산기의 전원을 켰다 껐다 할 수 있었습니다.
그리고 계산을 하기 위해 입력하는 매개변수 2개를 덧셈, 뺄셈, 곱셈, 나눗셈 메서드에 넣어 각각의 연산 결과값 (나눗셈은 몫) 을 받을 수 있었습니다.
또한, 같은 클래스 내의 메서드끼리는 참조변수를 사용하지 않아도 서로를 호출할 수 있지만, static 메서드의 경우 같은 클래스 내의 인스턴스 메서드를 호출할 수 없습니다.
아래의 예제를 통해 경우의 수를 따져보도록 하겠습니다.
class C1{ static int static_variable = 1; int instance_variable = 2; static void static_static(){ System.out.println(static_variable); } static void static_instance(){ // 클래스 메소드에서는 인스턴스 변수에 접근 할 수 없다. //System.out.println(instance_variable); } void instance_static(){ // 인스턴스 메소드에서는 클래스 변수에 접근 할 수 있다. System.out.println(static_variable); } void instance_instance(){ System.out.println(instance_variable); } }
static 변수에 1, instance변수에 2를 지정했습니다.
클래스 메서드에서는 instance 변수에 접근할 수 없지만, 그 반대의 경우는 접근이 가능합니다.
같은 형태면 변수에 접근할 수 있는 건 따로 설명드릴 필요가 없을 것입니다.
이 내용을 구체화한 코드가 아래와 같습니다.
public class Main { public static void main(String[] args) { C1 c = new C1(); // 인스턴스를 이용해서 정적 메소드에 접근 -> 성공 // 인스턴스 메소드가 정적 변수에 접근 -> 성공 : 1 c.static_static(); // 인스턴스를 이용해서 정적 메소드에 접근 -> 성공 // 정적 메소드가 인스턴스 변수에 접근 -> 실패 c.static_instance(); System.out.println("error"); // 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공 // 인스턴스 메소드가 클래스 변수에 접근 -> 성공 : 1 c.instance_static(); // 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공 // 인스턴스 메소드가 인스턴스 변수에 접근 -> 성공 : 2 c.instance_instance(); // 클래스를 이용해서 클래스 메소드에 접근 -> 성공 // 클래스 메소드가 클래스 변수에 접근 -> 성공 : 1 C1.static_static(); // 클래스를 이용해서 클래스 메소드에 접근 -> 성공 // 클래스 메소드가 인스턴스 변수에 접근 -> 실패 C1.static_instance(); System.out.println("error"); // 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패 //C1.instance_static(); System.out.println("error"); // 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패 //C1.instance_instance(); System.out.println("error"); } }그리고 그 결과는 위와 같습니다.
이번 레터를 통해 메서드가 값을 return하는 방식에 대해 알아보았습니다.
다음 편에서는 메서드를 호출하는 방법에 대해 알아보겠습니다.
728x90
반응형
공유하기
게시글 관리
구독하기고기만두의 돈과 커리어 만들기저작자표시 비영리 변경금지
- 카카오스토리
- 트위터
- 페이스북