day21

상은👸·2023년 9월 25일
0

뚜벅뚜벅 첫번째

목록 보기
20/26
post-thumbnail

헉...이모티콘 윈도우키 + . 누르면 나온다ㅠㅠㅠ졸귀

✏️연습문제1

아래와 같은 주문프로그램 작성 종료시 주문내역 출력하시오
잘못된 메뉴 선택 시 잘못선택하셨습니다 다시선택해주세요 를 출력하고
메뉴화면을 반복 실행한다.
-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 +"원");

✏️연습문제2

//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;
}
profile
뒤죽박죽 벨로그

0개의 댓글

관련 채용 정보