헉...이모티콘 윈도우키 + . 누르면 나온다ㅠㅠㅠ졸귀
아래와 같은 주문프로그램 작성 종료시 주문내역 출력하시오
잘못된 메뉴 선택 시 잘못선택하셨습니다 다시선택해주세요 를 출력하고
메뉴화면을 반복 실행한다.
-y 입력 시 메뉴 화면을 반복 실행하고
-n 입력 시 메뉴 화면이 종료되며 화면에 주문한 정보와 가격이 출력된다
추가 : y/n이 아닌 문자 입력 시 잘못입력하셨습니다 다시입력해주세요 를
출력하고 추가 주문화면을 반복 실행한다
1) 쉬운 버전 : 제일 마지막 주문 수량으로 선택해서 주문
예시)
주문시 >>> 아메리카노 2잔 , 카페라떼 1잔
최종 >>> 아메리카노 2잔 , 카페라떼 1잔
주문시 >>> 아메리카노 2잔 , 카페라떼 1잔, 아메리카노 5잔
최종 >>> 아메리카노 5잔 , 카페라떼 1잔
2) 심화 버전 : 같은 메뉴를 여러번 주문 가능 (주문마다 누적으로 계속 쌓임)
예시)
주문시 >>> 아메리카노 2잔, 카페라떼 1잔, 아메리카노 4잔, 카페라떼 3잔
최종 >>> 아메리카노 6잔, 카페라떼 4잔
- 입출력 예시
메뉴
1.아메리카노 3500원
2.카페라떼 4100원
3.바닐라라떼 4300원
메뉴선택 : 1
수량선택 : 3
추가 주문하시겠습니까? (y/n) : y
메뉴
1.아메리카노 3500원
2.카페라떼 4100원
3.바닐라라떼 4300원
메뉴선택 : 2
수량선택 : 2
추가 주문하시겠습니까? (y/n) : n
아메리카노 3잔 : 10500원
카페라떼 2잔 : 8200원
총액 : 18700원
🚀기능개선 + 리팩토링🚀
기능개선
1. 주문한거만 내역보기
2. 추가주문을 잘못 입력하면
-> 메뉴선택으로 넘어가는게 아니라
-> 추가주문여부만 확인!
3. 메뉴선택도 범위내에서 입력
-> 잘못입력하면 다시입력해주세요
리팩토링
4. 주문갯수 -> 일괄관리 -> 배열화
5. 메뉴, 가격 -> 배열화
int[] orderCountArr = new int[3]; //메뉴3개
//0아메 1라떼 2바닐라
int[] menuPriceArr = {3500, 4100, 4300};
String[] menuNameArr = {"아메리카노", "카페라떼", "바닐라라떼"};
while(true) {
//메뉴 보여주기
System.out.println("=======메뉴=======");
for(int i=0; i<menuNameArr.length; i++) {
System.out.printf("%d. %s %d원\n",
(i+1), menuNameArr[i], menuPriceArr[i]);
}
System.out.println("=======================");
Scanner scan = new Scanner(System.in);
//메뉴,수량 주문내역 저장
int inputMenu;
int inputCount;
//while문안에서도 써야하고 밖에서도 써야하니까!
while(true) {
System.out.print("메뉴 선택 : ");
inputMenu = scan.nextInt();
if( !(inputMenu >= 1 && inputMenu <= menuNameArr.length) ) { //메뉴번호 1~3까지 아니면
System.out.println("잘못입력하셨습니다. 다시선택해주세요");
continue; //다시 메뉴선택: 뜨게!
}
System.out.print("수량 선택 : ");
inputCount = scan.nextInt();
break; //제대로 잘쓰였다면 안에 while문 탈출!
}
//메뉴 수량 누적합! 0아메 1라떼 2바닐라
orderCountArr[inputMenu-1] =
orderCountArr[inputMenu-1] + inputCount;
// 추가주문 y:다시진행 n:종료
scan.nextLine(); //위에 엔터로 인해서 한번 먹으니까 엔터방지용!
String addOrder;
while(true) { //추가주문잘못입력했을때 추가주문창만 따로 나오게!
System.out.print("추가 주문 하시겠습니까?(y/n) : ");
addOrder = scan.nextLine();
if( !(addOrder.equals("y") || addOrder.equals("n")) ) { //y,n이 아닌경우 잘못입력!
System.out.println("잘못입력하셨습니다. 다시입력해주세요);
continue; //다시 추가주문창으로 반복문 이동!
}
break; // 정상이면 안에 while문 빠져나가
}
if( addOrder.equals("n") ) { //n이면 끝!
break;
}
} //가장 밖에있는 while문 밖! 최종 결과가 나오면 된다
System.out.println("=================");
int totalPrice = 0; //총액
for (int i=0; i<menuNameArr.length; i++) {
System.out.printf("%s %d잔 : %d원\n",
menuNameArr[i], orderCountArr[i], orderCountArr[i]*menuPriceArr[i]);
totalPrice = totalPrice + menuPriceArr[i];
}
System.out.println("=================");
System.out.println("총액 : " + totalPrice +"원");
//basecode
public class TopScoreStudent {
public static void main(String[] args) {
//배열 생성
String[] names = {"Elena", "Suzie", "John", "Emily",
"Neda", "Kate", "Alex", "Daniel", "Hamilton", "Ace"};
int[] scores = {65, 74, 23, 75, 68, 96, 88, 98, 54, 67};
//1등 인덱스 검색
int i = topIndex(scores);
//결과 출력
System.out.printf("1등: %s(%d점)\n", names[i], scores[i]);
}
//정수형 배열을 입력받아 가장 큰 값의 인덱스를 반환
public static int topIndex(int[] arr) {
/* 해당 함수를 완성하세요. */
return 0;
}
}
가장 큰값의 인덱스를 반환하는 함수를 작성하시오!🤔
topIndex의 return값은 names[i], scores[i]에 들어갈 공통적인 인덱스 i의 값이 return되어야 한다!
=> 따라서 for문을 돌리면 (int i=0; i<arr.length; i++)으로 돌리겠지???? 그러면 여기서 i의 값이 나오게끔 해줘야해
=>
public static int topIndex(int[] arr) {
int max = arr[0];
int maxIndex = 0; //리턴값이 인덱스로 나와야하니까 변수하나잡아주고
for (int i=1; i<arr.length; i++) {
if(max < arr[i]) { //0인덱스보다 큰지 비교!
max = arr[i]; //바꿔주는거지 큰게나오면
maxIndex = i; //가장 큰 값의 인덱스!
} //0인덱스보다 큰거 없으면 0인덱스가 나오겠지
}
return maxIndex; //가장 큰 값의 인덱스 반환!
}
=> 다른방식!
public static int topIndex(int[] arr) {
int maxIndex = 0; //으로 잡아주고! //i의 값이 나오게끔 하기위해서!
for(int i=1; i<arr.length; i++) {
if (arr[maxIndex] < arr[i]) { //0인덱스부터 비교해줘야 하니까 for문 i는 1인덱스가 되어야 [0]<[1] 이겠지!
maxIndex = i; // 조건식에서 다따져보고 제일 큰 값을 가지고 있는 인덱스가 result에 들어가겠지?
}
}
return maxIndex;
}
🍔정리🍔 최댓값 최솟값 구하는거는 이렇게 알고있으면 된다!!! (순대먹고싶다..)
//최댓값 구하기
public static int topIndex(int[] arr) {
int maxIndex = 0;
for (int i=0; i<arr.length; i++) {
if(arr[maxIndex] < arr[i]) {
maxIndex = i;
}
}
return maxIndex;
}
//최솟값 구하기
public static int topIndex(int[] arr) {
int minIndex = 0;
for (int i=0; i<arr.length; i++) {
if(arr[minIndex] > arr[i]) { //부등호만 바꿔주면 최솟값구하기!!
minIndex = i;
}
}
return minIndex;
}