본문 바로가기
국비 교육/백엔드(Java, Spring)

[자바] 키보드로부터 입력

by 육츠 2024. 1. 16.
Contents 접기

[예제 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