| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- MVC
- frontController
- after-throwing
- gradle
- c:if
- springjdbc
- 유효성검사
- 어노테이션
- 생성자주입
- produces
- AOP
- @
- PointCut
- @Valid
- application.properties
- 의존주입
- SpringBoot
- Java
- springmvc
- jointpoint
- @RequestMapping
- 비즈니스레이어
- @ResponseBody
- 스프링
- 서비스레이어
- spring
- .xml
- 바인딩변수
- @RequestParam
- Model
- Today
- Total
메모장
Scanner 본문
Scanner 에 대해 알아보자 !
자바에서는 Scanner 와 System.in을 통해 입력을 받는다. 이는 자바가 JVM이라는 가상머신위에서 구동되기 때문으로 생각 된다. 따라서 입출력을 위해 자바만의 과정이 필요하고, 이를 이용하는 클래스 모듈이 Scanner이며 받아들일 데이터의 종류를 지정해야하는데 그 때 쓰이는 메서드가 nextInt( ), nextline( )등의 자료형을 지정하는 코드이다.
// [ 자판기 프로그램에 대해 만들어 보자 ]
// 주의해야 할
// 어디에, 어떤 방식으로 "유효성 검사"가 들어가야할까?
// 총 몇개 추가되어야할까??? => 4번
// : 유효성 검사는 "입력할때마다" 진행!
// 1) 사용자에게 안내 -> 올바른 입력을 알려주면 더 좋음!
// 2) 프로그램의 강제종료를 예방
import java.util.Random; // 임포트 설정 꼭 해주기
import java.util.Scanner; // ctrl + shift + o (단축키)
public class Test01 {
public static void main(String[] args) {
// 1. 구매하기 / 종료하기
// 2-1. 종료하기 : 프로그램 종료
// 2-2. 구매하기 : 아메리카노/카페라떼/아이스티 등의 메뉴를 출력
// 3. 몇개 구매?
// 4. 가격안내
// 5. 현금입력 -> 거스름돈 반환
// ※ 재고 데이터 O
Scanner sc=new Scanner(System.in);
Random rand=new Random();
int N=3; // 메뉴의 개수
String[] mName=new String[N]; // 메뉴이름 배열
mName[0]="아메리카노";
mName[1]="카페라떼";
mName[2]="아이스티";
int[] mPrice=new int[N];
mPrice[0]=2500;
mPrice[1]=3500;
mPrice[2]=3000;
int[] mCnt=new int[N];
for(int i=0;i<mCnt.length;i++) {
mCnt[i]=rand.nextInt(3)+1;
}
while(true) { // 몇번반복할지 모르기때문
// 1. 출력
System.out.println("1.구매 2.종료");
System.out.print("입력) ");
int action=sc.nextInt();
// 2-1. 종료
if(action==2) { // 종료조건 : 종료하기 버튼을 눌렀다면
System.out.println("이용해주셔서 감사합니다!");
System.out.println();
break; // 무한루프? if(){break;} 종료조건이 필수다!
}
else if(action<1 || 2<action) { // 유효성 검사 : 1,2도 아니라면
System.out.println("잘못된 입력값입니다.");
System.out.println("확인후 다시 이용해주세요!~~");
System.out.println();
continue;
}
int num;
// 2-2. 구매
while(true) {
System.out.println("=== 메뉴판 ===");
for(int i=0;i<mName.length;i++) {
System.out.println((i+1)+". "+mName[i]);
}
System.out.println("====================");
System.out.print("구매할 상품의 번호를 입력) ");
num=sc.nextInt();
// num (지역)변수는 while블록에서 선언되었기때문에
// while의 블록을 벗어나면 소멸된다!
if(1<=num && num<=N) { // 종료조건 : 제대로 입력했다면
break;
}
/*if(num<1 || N<num) {
System.out.println("없는 상품번호입니다!");
System.out.println("다시 입력하세요!~~");
System.out.println();
continue;
}*/
System.out.println("없는 상품번호입니다!");
System.out.println("다시 입력하세요!~~");
System.out.println();
}
int cnt; // 지역변수의 특성
while(true) { // 유효성 검사 : 구매할 개수가 음수이거나, 재고보다 많으면 안됨!
System.out.println("선택한 상품은 "+mName[num-1]+"입니다.");
System.out.println("가격: "+mPrice[num-1]+"원 재고: "+mCnt[num-1]+"개");
System.out.print("구매할 개수를 입력) ");
cnt=sc.nextInt();
if(0<=cnt && cnt<=mCnt[num-1]) {
break;
}
System.out.println("잘못된 입력입니다!");
System.out.println("다시 입력해주세요!~~");
System.out.println();
}
int res = mPrice[num-1]*cnt;
int money;
System.out.println("금액: "+res+"원");
while(true) {
System.out.print("돈 입력) ");
money=sc.nextInt();
if(res<=money) {
break;
}
System.out.println("잘못된 입력입니다!");
System.out.println("새로 입력해주세요!");
System.out.println();
}
res=money-res;
if(res!=0) {
System.out.println("거스름돈 "+res+"원 반환 완료!");
}
System.out.println("구매 성공!");
System.out.println();
mCnt[num-1]-=cnt;
}
}
}
'JAVA > 개념정리' 카테고리의 다른 글
| Flag 알고리즘 (0) | 2024.04.06 |
|---|---|
| Random (0) | 2024.04.06 |
| 반복문 (for문) (0) | 2024.04.06 |
| 반복문 (while문) (0) | 2024.04.06 |
| 함수 (메서드) (0) | 2024.04.06 |