[예제 1] 키보드로부터 데이터를 입력받아 원의면적을 구하는 프로그램
키보드로 부터 입력을 받아오는 객체 생성 ' Scanner keyin = new Scanner(System.in); ' 하려면
import java.util.Scanner; 를 써야함. (즉 Scanner class 를 import 한 것)
import java.util.Scanner;
public class CircleAreaTest {
public static void main(String[] args) {
// 변수 선언
double radius, area;
final double PI = 3.141592;
Scanner keyin = new Scanner(System.in); // 키보드와 연결하기 위한 객체
System.out.print("원의 반지름을 입력:");
radius = keyin.nextDouble(); // double 형으로 데이터를 입력 받음
// 데이터가 올바르게 입력될때 까지 Blocking 상태
// 입력 시에는 더블, 또는 더블보다 작은 데이터 타입으로
area = PI * (radius * radius);
System.out.printf("반지름이 %.3f 인 원의 면적은 %.2f 입니다.", radius, area);
}
}
* Resource leak: 메모리 낭비 경고메세지가 생김
그 이유는 계속해서 입력을 받는 상태로 유지 되기 때문에 메모리 낭비가 일어나기 때문이다.
때문에 keyin.close () 를 통해 입력 받는 것을 끝내주면 경고메세지가 사라진다.
// 키보드로부터 데이터를 입력받아 원의면적을 구하는 프로그램
import java.util.Scanner;
public class CircleAreaTest {
public static void main(String[] args) {
// 변수 선언
double radius, area;
final double PI = 3.141592;
Scanner keyin = new Scanner(System.in); // 키보드와 연결하기 위한 객체
// Resource leak: 메모리 낭비
System.out.print("원의 반지름을 입력:");
radius = keyin.nextDouble(); // double 형으로 데이터를 입력 받음
// 데이터가 올바르게 입력될때 까지 Blocking 상태
// 입력 시에는 더블, 또는 더블보다 작은 데이터 타입으로
area = PI * (radius * radius);
System.out.printf("반지름이 %.3f 인 원의 면적은 %.2f 입니다.", radius, area);
keyin.close();
}
}
[예제 2] 국어, 수학, 영어 세 과목의 점수를 입력(!) 한 후평균을 구하여 출력하시오.
import java.util.Scanner;
public class ScoreTest {
public static void main(String[] args) {
int korean , math, english;
double avg;
Scanner keyin = new Scanner(System.in);
System.out.print("국어 점수를 입력하세요: ");
korean = keyin.nextInt();
System.out.print("수학 점수를 입력하세요: ");
math = keyin.nextInt();
System.out.print("영어 점수를 입력하세요: ");
english = keyin.nextInt();
avg = korean + math + english;
// 연산을 할때는 데이터 타입 중요
// int / int 는 double 이 될 수 없다.
// avg = (korean + math + english) / 3.0; => 해결 (프로모션이 일어남)
// avg = (double)(korean + math + english) / 3; => X
// 연산이 마무리된 상태에서는 int -> double 이 되는데 소수점이 잘리기 때문에 맞지 않음
System.out.println();
System.out.printf("세 과목의 평균 점수는 %.2f 입니다.", avg/3);
keyin.close(); // 없어도 상관은 없음!
}
}
avg = (korean + math + english) / 3 = > int / int 는 double 이 될 수 없다.
그래서 하나를 double 로만 만들어주어 프로모션이 일어나 더블로 변경해야 avg 안에 소수점으로 들어가게 된다.
- avg = (korean + math + english) / 3.0; => 해결 (프로모션이 일어남)
- avg = (double)(korean + math + english) / 3; => X ( 연산이 마무리된 상태에서 int -> double 은 소수점 뒤가 잘리기 때문)
- avg = ((double)(korean + math + english)) / 3; => 가능은 하지만 잘 사용하진 않는다. 간편한 첫 번째 방법을 선호.
- System.out.printf("세 과목의 평균 점수는 %.2f 입니다.", avg/3);
내가 사용한 방법은 파이썬의 방식 같다.
'국비 교육 > 백엔드(Java, Spring)' 카테고리의 다른 글
[자바] 반복문 -1 (While) (0) | 2024.01.17 |
---|---|
[자바] 연산자 Operator -2, Switch (0) | 2024.01.17 |
[자바] 자바 기초 -2 (0) | 2024.01.16 |
[자바] 자바 기초 -1 (0) | 2024.01.16 |