: 매일 저녁, 하루를 마무리하며 작성 !
: ⭕ 지식 위주, 학습한 것을 노트 정리한다고 생각하고 작성하면서 머리 속 흩어져있는 지식들을 정리 !
charAt(0)
)import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 1. Scanner 를 사용하여 양의 정수
// 2개(0 포함)를 전달 받을 수 있습니다.
// 양의 정수는 각각 하나씩 전달 받습니다.
// 양의 정수는 적합한 타입으로 선언한 변수에 저장합니다.
int result = 0;
String order = "";
// int[] intArray = new int[10]; // 초기값 {0,0,0 ... }
int index = 0; // 배열 인덱스를 나타내는 변수
// 7. 연산 결과가 10개로 고정되지 않고 무한이 저장될 수 있도록 소스 코드를 수정합니다.
// - JCF(Java Collection Framework)를 사용합니다. (e.g. List, Set …)
List<Integer> resultList = new ArrayList<>();
do {
System.out.print("첫 번째 숫자를 입력하세요: ");
// Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
int Number1 = Integer.parseInt(sc.nextLine());
System.out.print("두 번째 숫자를 입력하세요: ");
// Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
int Number2 = Integer.parseInt(sc.nextLine());
// 2. Scanner를 사용하여 사칙연산 기호를 전달 받을 수 있습니다.
System.out.print("사칙연산 기호를 입력하세요: ");
// 사칙연산 기호를 적합한 타입으로 선언한 변수에 저장합니다
char operator = sc.nextLine().charAt(0);
// 3. 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력합니다.
// - 사칙연산 기호에 맞는 연산자를 사용하여 연산을 진행합니다.
// - 입력받은 연산 기호를 구분하기 위해 제어문을 사용합니다. (e.g.if, switch)
// - 연산 오류가 발생할 경우 해당 오류에 대한 내용을 정제하여 출력합니다.
// - e.g. “나눗셈 연산에서 분모(두번째 정수)에 0이 입력될 수 없습니다. “
/* 제어문을 활용하여 위 요구사항을 만족할 수 있게 구현합니다.*/
if (Number1 <= 0 && Number2 <= 0) {
System.out.println("두 정수가 모두 0 이상이어야 합니다.");
} else {
switch (operator) {
case '+':
result = Number1 + Number2;
break;
case '-':
result = Number1 - Number2;
break;
case '*':
result = Number1 * Number2;
break;
case '/':
if (Number2 == 0) {
System.out.println("0으로 나눌 수 없습니다.");
continue;
}
result = Number1 / Number2;
break;
case '%':
result = Number1 % Number2;
break;
default:
System.out.println("올바르지 않은 연산자입니다.");
continue;
}
}
System.out.println("결과: " + result);
// 5. 연산 결과 10개를 저장할 수 있는 배열을 선언 및 생성하고 연산의 결과를 저장합니다.
// 연산의 결과를 저장할 수 있도록 적합한 타입의 배열을 생성합니다
// 연산의 결과를 비어있는 곳에 저장하기 위해 저장할 때마다 count 합니다.
// 연산 결과가 10개를 초과하는 경우
// 배열에 결과 값을 추가하고, 10개를 초과하는 경우 가장 처음에 들어온 결과 값을 제거합니다.
// if (index >= intArray.length) {
// for (int i = 0; i < intArray.length - 1; i++) {
// intArray[i] = intArray[i + 1];
// }
// intArray[intArray.length - 1] = result; // 새로운 결과 값을 맨 뒤에 추가합니다.
// } else {
// intArray[index] = result; // 현재 인덱스에 결과 값을 추가합니다.
// index++;
// }
//6. 연산 결과가 10개를 초과하는 경우 가장 먼저 저장된 결과를 삭제하고 새로운 연산 결과가 저장될 수 있도록 소스 코드를 수정합니다.
// - 현재 저장된 index가 마지막(9)라면 가장 먼저 저장된 결과 값이 삭제 되고 새로운 결과 값이 마지막 index에 저장될 수 있도록 구현합니다.
// - Hint : 결과 값들이 한칸씩 앞으로 이동되면 되지 않을까?
//7. 연산 결과가 10개로 고정되지 않고 무한이 저장될 수 있도록 소스 코드를 수정합니다.
// - JCF(Java Collection Framework)를 사용합니다. (e.g. List, Set …)
// - “remove”라는 문자열을 입력받으면 가장 먼저 저장된 결과가 삭제될 수 있도록 구현합니다.
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
order = sc.nextLine();
if (order.equals("remove")) {
// 첫 번째 결과를 삭제합니다.
resultList.remove(0);
// 새로운 결과 값을 맨 뒤에 추가합니다.
resultList.add(result);
} else {
// 결과 값을 추가합니다.
resultList.add(result);
}
// 8. “inquiry”라는 문자열이 입력되면 저장된 연산 결과 전부를 출력합니다.
// - foreach(향상된 for문)을 활용하여 구현 해봅니다.
System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
order = sc.nextLine();
if (order.equals("inquiry")) {
// 배열에 저장된 연산 결과를 출력합니다.
for (int number : resultList) {
System.out.print(number + " ");
}
}
System.out.print("더 계산하시겠습니까? (exit 입력 시 종료) ");
order = sc.nextLine();
// 4. 반복문을 사용하여 반복의 종료를 알려주는 “exit” 문자열을 입력하기 전까지
// 무한으로 계산을 진행할 수 있도록 소스 코드를 수정합니다.
} while (!order.equals("exit"));
sc.close();
}
}
// AbstractOperation class -----------------
public abstract class AbstractOperation {
public abstract int operate(int Number1, int Number2);
}
// AddOperator class -----------------
public class AddOperator extends AbstractOperation {
public int answer;
public AddOperator(){
answer = 0;
}
public int operate(int Number1, int Number2) {
answer = Number1 + Number2;
return answer;
}
}
// SubtractOperator class -----------------
public class SubtractOperator extends AbstractOperation{
public int answer;
public SubtractOperator(){
answer = 0;
}
@Override
public int operate(int Number1, int Number2) {
answer = Number1 - Number2;
return answer;
}
}
// MultiplyOperator class -----------------
public class MultiplyOperator extends AbstractOperation{
public int answer;
public MultiplyOperator(){
answer = 0;
}
@Override
public int operate(int Number1, int Number2) {
answer = Number1 * Number2;
return answer;
}
}
// DivideOperator class -----------------
public class DivideOperator extends AbstractOperation{
public int answer;
public DivideOperator(){
answer = 0;
}
@Override
public int operate(int Number1, int Number2) {
answer = Number1 / Number2;
return answer;
}
}
// ModOperator class -----------------
public class ModOperator extends AbstractOperation{
public int answer;
public ModOperator(){
answer = 0;
}
@Override
public int operate(int Number1, int Number2) {
answer = Number1 % Number2;
return answer;
}
}
// Calculator class -----------------
import java.util.ArrayList;
import java.util.List;
public class Calculator {
/* 연산 결과를 저장하는 컬렉션 타입 필드 선언 및 생성 */
/* 연산 결과를 저장하는 컬렉션 타입 필드를 외부에서 직접 접근 하지 못하도록 수정*/
private static int total = 0;
private static List<Integer> resultList;
// 원의 넓이를 구하는 필드와 메서드 선언과 구현 ----------------------------
/* 원의 넓이 결과를 저장하는 컬렉션 타입 필드 선언 및 생성 */
/* 원의 넓이 결과를 저장하는 컬렉션 타입 필드를 외부에서 직접 접근 하지 못하도록 수정*/
private static double AreaTotal = 0;
private static List<Double> AreaResultList;
/* 원주율은 pi 이기에 상수로 생성*/
private static final double PI = 3.141592;
/* Calculator 기본 생성자 구현 */
public Calculator() {
resultList = new ArrayList<>(); // 생성자에서 컬렉션 필드 초기화
AreaResultList = new ArrayList<>();
}
/* 사칙연산 저장 리스트 Getter 구현 */
public List<Integer> getResultList() {
return resultList;
}
/* 사칙연산 결과 Getter 구현 */
public int getTotal() {
return total;
}
/* 사칙연산 결과 Setter 구현 */
public void setTotal(int total) {
this.total = total;
}
/* 원의 넓이 저장 필드 Getter, Setter, 조회 메서드 구현 */
/* 원의 넓이 결과 저장 리스트 Getter 구현 */
public List<Double> getAreaResultList() {
return AreaResultList;
}
/* 원의 넓이 결과 Getter 구현 */
public double getAreaTotal() {
return AreaTotal;
}
/* 원의 넓이 결과 Setter 구현 */
public void setAreaTotal(double AreaTotal) {
this.AreaTotal = AreaTotal;
}
public int calculate(int Number1, int Number2, char operator) throws CalculatorException {
throw new UnsupportedOperationException("ArithmeticCalculator 또는 CircleCalculator의 calculate 메서드를 사용하세요.");
}
/* 원의 넓이를 구하는 메서드 선언*/
public double calculateCircleArea(int r) throws CalculatorException {
throw new UnsupportedOperationException("CircleCalculator의 calculateCircleArea 메서드를 사용하세요.");
}
// removeResult 메서드 구현
public void removeResult() {
//if (!resultList.isEmpty()) {
// resultList.remove(0);
//}
// 첫 번째 결과 삭제 오버라이딩으로 하단에서 구현
throw new UnsupportedOperationException("ArithmeticCalculator 또는 CircleCalculator의 removeResult 메서드를 사용하세요.");
}
// inquiryResults 메서드 구현
public void inquiryResults() {
//for (int number : resultList) {
//System.out.print(number + " ");
//}
//System.out.println();
// 배열에 저장된 연산 결과를 출력합니다.
// 오버라이딩으로 하단에서 구현
throw new UnsupportedOperationException("ArithmeticCalculator 또는 CircleCalculator의 inquiryResults 메서드를 사용하세요.");
}
AddOperator addOperator = new AddOperator();
SubtractOperator subtractOperator = new SubtractOperator();
MultiplyOperator multiplyOperator = new MultiplyOperator();
DivideOperator divideOperator = new DivideOperator();
ModOperator modOperator = new ModOperator();
public static class ArithmeticCalculator extends Calculator {
public ArithmeticCalculator(){
}
@Override
public int calculate(int Number1, int Number2, char operator) throws CalculatorException {
int answer = 0;
if (Number1 <= 0 && Number2 <= 0) {
throw new CalculatorException("두 정수가 모두 0 이상이어야 합니다.");
} else {
switch (operator) {
case '+':
answer = addOperator.operate(Number1, Number2);
break;
case '-':
answer = subtractOperator.operate(Number1, Number2);
break;
case '*':
answer = multiplyOperator.operate(Number1, Number2);
break;
case '/':
if (Number2 == 0) {
throw new CalculatorException("나눗셈 연산에서 분모(두번째 정수)에 0이 입력될 수 없습니다.");
}
answer = divideOperator.operate(Number1, Number2);
break;
case '%':
answer = modOperator.operate(Number1, Number2);
break;
default:
throw new CalculatorException("올바르지 않은 연산자입니다.");
}
}
//getResultList().add(answer);
return answer;
}
// 사칙 연산의 removeResult 메서드 오버라이딩
@Override
public void removeResult() {
if (!resultList.isEmpty()) {
resultList.remove(0); // 첫 번째 결과 삭제
}
}
// 사칙 연산의 inquiryResults 메서드 오버라이딩
@Override
public void inquiryResults() {
// 배열에 저장된 연산 결과를 출력합니다.
for (int number : resultList) {
System.out.print(number + " ");
}
System.out.println();
}
}
public static class CircleCalculator extends Calculator {
public CircleCalculator(){
}
@Override
public double calculateCircleArea(int r) throws CalculatorException {
if (r <= 0) {
throw new CalculatorException("반지름은 0보다 커야 합니다.");
}
double area = r * r * PI;
//getAreaResultList().add(area);
return area;
}
// 원의 넓이 구하기 inquiryResults 메서드 오버라이딩
@Override
public void inquiryResults() {
// 배열에 저장된 연산 결과를 출력합니다.
for (double number : AreaResultList) {
System.out.print(number + " ");
}
System.out.println();
}
}
// 예외 선언 !
class CalculatorException extends Exception {
public CalculatorException(String message) {
super(message);
}
}
}
// Main ---------------------------------------------------
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Calculator.ArithmeticCalculator arithmeticCalculator = new Calculator.ArithmeticCalculator();
Calculator.CircleCalculator circleCalculator= new Calculator.CircleCalculator();
// 1. Scanner 를 사용하여 양의 정수
int result = 0;
String order = "";
int index = 0; // 배열 인덱스를 나타내는 변수
// 7. 연산 결과가 10개로 고정되지 않고 무한이 저장될 수 있도록 소스 코드를 수정합니다.
do {
try {
/* 사칙연산을 진행할지 원의 너비를 구할지 선택 구현 */
System.out.print("원의 넓이 구하기 : 1. 사칙연산하기 : 2 ");
int choose = Integer.parseInt(sc.nextLine());
if (choose == 1) {
// 원의 넓이
/* 원의 넓이를 구하는 경우 반지름을 입력받아 원의 넓이를 구한 후 출력*/
System.out.print("반지름 입력: ");
int radius = Integer.parseInt(sc.nextLine());
double areaResult = circleCalculator.calculateCircleArea(radius);
System.out.println("원의 넓이: " + areaResult);
/* 원의 넓이 저장 */
circleCalculator.getAreaResultList().add(areaResult);
/* 원의 넓이 리스트 출력 */
circleCalculator.inquiryResults();
} else if (choose == 2) {
System.out.print("첫 번째 숫자를 입력하세요: ");
// Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
int Number1 = Integer.parseInt(sc.nextLine());
System.out.print("두 번째 숫자를 입력하세요: ");
// Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다.
int Number2 = Integer.parseInt(sc.nextLine());
// 2. Scanner를 사용하여 사칙연산 기호를 전달 받을 수 있습니다.
System.out.print("사칙연산 기호를 입력하세요: ");
// 사칙연산 기호를 적합한 타입으로 선언한 변수에 저장합니다
char operator = sc.nextLine().charAt(0);
// 3. 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력합니다.
result = arithmeticCalculator.calculate(Number1, Number2, operator);
//System.out.println("결과: " + result);
// 5. 연산 결과 10개를 저장할 수 있는 배열을 선언 및 생성하고 연산의 결과를 저장합니다.
// 6. 연산 결과가 10개를 초과하는 경우 가장 먼저 저장된 결과를 삭제하고 새로운 연산 결과가 저장될 수 있도록 소스 코드를 수정합니다.
// 7. 연산 결과가 10개로 고정되지 않고 무한이 저장될 수 있도록 소스 코드를 수정합니다.
System.out.println(result);
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
order = sc.nextLine();
if (order.equals("remove")) {
arithmeticCalculator.removeResult(); // 첫 번째 결과 삭제
}
arithmeticCalculator.getResultList().add(result);
// 8. “inquiry”라는 문자열이 입력되면 저장된 연산 결과 전부를 출력합니다.
// - foreach(향상된 for문)을 활용하여 구현 해봅니다.
System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
order = sc.nextLine();
if (order.equals("inquiry")) {
arithmeticCalculator.inquiryResults();
}
}
} catch (NumberFormatException e) {
System.out.println("올바른 숫자를 입력하세요.");
} catch (Calculator.CalculatorException e) {
System.out.println("오류: " + e.getMessage());
}
System.out.print("더 계산하시겠습니까? (exit 입력 시 종료) ");
order = sc.nextLine();
// 4. 반복문을 사용하여 반복의 종료를 알려주는 “exit” 문자열을 입력하기 전까지
// 무한으로 계산을 진행할 수 있도록 소스 코드를 수정합니다.
} while (!order.equals("exit"));
sc.close();
}
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int angle) {
int answer = 0;
if ( 0<angle && angle<=180 ){
if (0<angle && angle<90){
answer = 1;
}else if(angle == 90){
answer = 2;
}else if(90<angle && angle<180){
answer = 3;
}else if(angle==180){
answer = 4;
}else {
answer = 0;
}
return answer;
}
}