JAVA/이론 정리 및 예제

[JAVA/자바] #3_6 제어문 실습

chaewon 2021. 9. 5. 18:48

forWhile

package com.kh.silsub4.example;

import java.util.Scanner;
import java.util.regex.Pattern;

public class ForWhile {
        private Scanner sc = new Scanner(System.in);        //private : 필드에서 사용한 sc를 다른 곳에서 사용하지 못 하게
        
        public void printStar1() {
                /*정수 하나 입력 : 5
                 * 1
                 * *2
                 * **3
                 * ***4
                 * ****5
                 * */
                System.out.print("정수 하나 입력 : ");
                int row = sc.nextInt();
                
                if(row > 0) {
                        for(int r = 1; r <= row; r++) {
                                for(int c = 1; c <= r; c++) {
                                        if(r == c) {                                //줄 수와 칸이 같아지면
                                                System.out.print(r);        //줄 수를 출력
                                        }else {
                                                System.out.print("*");        //별을 출력
                                        }
                                }
                                System.out.println();
                        }
                }else {
                        System.out.println("양수가 아닙니다.");
                }
        }
        public void printStar2() {
                /*정수 입력 : 5
                 * *
                 * **
                 * ***
                 * ****
                 * *****
                 * ===========
                 * 정수 입력 : -5
                 * *****
                 * ****
                 * ***
                 * **
                 * * 
                 * */
                System.out.print("정수 입력 : ");
                int row = sc.nextInt();
                
                if(row > 0) {
                        for(int r = 1; r <= row; r++) {                        //r = 1 일떄
                                for(int c = 1; c <= r; c++) {                //c는 두 번 반복
                                                System.out.print("*");
                                }
                                System.out.println();
                        }
                }else if(row < 0){
                        //for(int r = (-row); r > 0; r--){
                        //        for(int c = 1; c <= r; c++){
                        for(int r = 1; r <= Math.abs(row); r++) {
                                for(int c = r; c < Math.abs(row); c++) {        // 왜 등호를 없애야하지?
                                                System.out.print("*");
                                }
                                System.out.println("*");
                        }
                }else {
                        System.out.println("출력 기능이 없습니다.");
                }
                
                
        }
        public void selectMenu() {

                int price = 0, count = 0, sum = 0;
        
                for(;;) {
                        System.out.println("*** 메뉴를 선택하세요 ***");
                        System.out.println("햄버거 ***************");
                        System.out.println("1. 불고기버거        3500원");
                        System.out.println("2. 치킨버거        3200원");
                        System.out.println("추가 ****************");
                        System.out.println("3. 감자튀김        1000원");
                        System.out.println("4. 치즈스틱        400원");
                        System.out.println("5. 샐러드                2000원");
                        System.out.println("음료수 ***************");
                        System.out.println("6. 콜라                700원");
                        System.out.println("7. 에이드                1200원");
                        System.out.println("8. 커피                1000원");
                        System.out.println("********************");
                        
                        System.out.print("메뉴 선택 : ");
                        int menu = sc.nextInt();
                        
                        switch(menu) {
                        case 1 : {System.out.println("불고기버거를 선택하셨습니다."); price = 3500; } break;
                        case 2 : {System.out.println("치킨버거를 선택하셨습니다."); price = 3200; } break;
                        case 3 : {System.out.println("감자튀김을 선택하셨습니다."); price = 1000; } break;
                        case 4 : {System.out.println("치즈스틱을 선택하셨습니다."); price = 400; } break;
                        case 5 : {System.out.println("샐러드를 선택하셨습니다."); price = 2000; } break;
                        case 6 : {System.out.println("콜라를 선택하셨습니다."); price = 700; } break;
                        case 7 : {System.out.println("에이드를 선택하셨습니다."); price = 1200; } break;
                        case 8 : {System.out.println("커피를 선택하셨습니다."); price = 1000; } break;
                        }
                        System.out.print("수량은? ");
                        count = sc.nextInt();
                        System.out.println(count + "개 주문하셨습니다.");
                        sum = price * count;
                        System.out.println();
                        System.out.print("추가 주문하시겠습니까?(y/n) : ");
                        char ch = sc.next().charAt(0);

                        if(ch == 'y') {
                                continue;
                                
                        }else {
                                break;
                        }
                }
                System.out.println("* 주문하신 정보는 다음과 같습니다. *");
                System.out.println("-----------------------------------");

                System.out.println("-----------------------------------");
                System.out.println("총 가격 : " + sum + "원");        
        }
        public void countInputCharacter() {
                System.out.print("문자열 입력 : ");
                String str = sc.nextLine();
                
                for(int i = 0; i < str.length(); i++) {                //영문자인지 판단 0번쨰 문자부터 
                        char temp = str.charAt(i);                                //문자형 변수 temp에 넣어 비교!! **
                        
                        if(!((temp >= 'A' && temp <= 'Z') || (temp >= 'a' && temp <= 'z'))) {
                                //영문자가 아닌경우
                                System.out.println("영문자가 아닙니다.");
                                return;
                        }
                }
                
                System.out.print("문자 입력 : ");
                char ch = sc.next().charAt(0);
                
                int count = 0;

                for(int index = 0; index < str.length(); index++) {        //총 n글자 마지막 글자는 n-1번째이기 때문에 i < .length()
                        if(str.charAt(index) == ch) {
                                count++;
                        }
                }
                System.out.println("포함된 갯수 : " + count + "개");

        }
}

 

Exercise

package com.kh.silsub3.example;

import java.util.Scanner;

public class Exercise {
        Scanner sc = new Scanner(System.in);
        
        public void exercise1() {
                System.out.print("정수 입력 : ");
                int num = sc.nextInt();
                
                int sum = 0;
                
                for(int i = 1; i <= num; i++) {                //시작값은 1부터!
                        if(i % 2 == 0) {
                                sum += i;
                        }
                }
                System.out.println("1부터 " + num + "까지의 짝수의 합 : " + sum);
        }
        public void exercise2() {
                //1번 문제 while로 변경
                System.out.print("정수 입력 : ");
                int num = sc.nextInt();
                
                int sum = 0;
                
                int i = 1;                                                        //시작값은 1부터
                while(i <= num) {
                        if(i % 2 == 0) {
                                sum += i;
                        }
                        i++;
                }
                System.out.println("1부터 " + num + "까지의 짝수의 합 : " + sum);
        }
        public void exercise3() {
                //1부터 입력 받은 정수까지수를 홀수와 짝수로 구분하여
                //홀수면 "수", 짝수면 "짝" 반복하여 출력
                System.out.print("정수 입력 : ");
                int num = sc.nextInt();
                
                String result = "";
                
                int i = 1;
                while(i <= num) {
                        result = (i % 2 == 0)?"박":"수";
                        System.out.print(result);
                        i++;
                }
                
                /*String str1 = "수";                //재사용성 
                String str2 = "박";
                String result = "";
                
                //정수 입력
                
                for(int i = 1; i <= num; i++) {
                        if(i % 2 != 0) {
                                result += str1;
                        }else {
                                result += str2;
                        }
                }
                System.out.println(result);
                */
        }
        public void exercise4() {
                int menu = 0, price = 0, price2 = 0, count = 0, count2 = 0, sum = 0, sum2 = 0;
                String str3 = "", str4 = "";
                
                label:
                for(;;) {                        //do-while
                        System.out.println("============= Menu =============");
                        System.out.println("------------ 버거류 ------------");
                        System.out.println("1. 상하이 스파이스 치킨버거 -- 5,500원");
                        System.out.println("2. 빅맥 --------------- 5,000원");
                        System.out.println("3. 베이컨 토마토 디럭스 ----- 6,000원");
                        System.out.println("------------- 음료 -------------");
                        System.out.println("4. 콜라 --------------- 1,500원");
                        System.out.println("5. 사이다 -------------- 1,500원");
                        System.out.println("6. 오렌지 쥬스 ----------- 2,000원");
                        System.out.println("7. 커피 --------------- 1,000원");
                        System.out.println("------------ 사이드 ------------");
                        System.out.println("8. 감자튀김 --------------- 700원");
                        System.out.println("9. 아이스크림 ------------ 1,000원");
                        System.out.println("=================================");
                        
                        System.out.print("메뉴 선택 : ");
                        menu = sc.nextInt();
                        count2++;
                        if(count2 >= 1) {
                                switch(menu) {
                                case 1 : {price = 5500; str3 = "상하이 스파이스 치킨버거"; } break;
                                case 2 : {price = 5000; str3 = "빅맥"; }break;
                                case 3 : {price = 6000; str3 = "베이컨 토마토 디럭스"; }break;
                                case 4 : {price = 1500; str3 = "콜라"; }break;
                                case 5 : {price = 1500; str3 = "사이다"; }break;
                                case 6 : {price = 2000; str3 = "오렌지 쥬스"; }break;
                                case 7 : {price = 1000; str3 = "커피"; }break;
                                case 8 : {price = 700; str3 = "감자튀김"; } break;
                                case 9 : {price = 1000; str3 = "아이스크림"; }break;
                                }
                                str4 = str3;
                                price2 = price;
                        }
                        System.out.print("주문하실 수량을 입력하세요 : ");
                        count = sc.nextInt();
                        sum = price * count;
                        sum2 = price2 * count;
                        System.out.print("추가 주문하시겠습니까?(y/n) : ");
                        char ch = sc.next().charAt(0);

                        if(ch == 'y') {                //switch
                                count2++;
                                continue label;
                                
                        }else {
                                break;
                        }
                }
                System.out.println("============================");
                if(count2 >= 1) {
                        //for(int z = 0; z <= count; z++) {
                                System.out.println(str3 + "-" + count + "개 : " + sum);
                                System.out.println(str4 + "-" + count + "개 : " + sum2);
                        //}
                }
                System.out.println("============================");
                
                System.out.println("total price : " + sum);        
                
        }
        public void exercise4_1() {
                //맥도날드 주문받기
                Scanner sc = new Scanner(System.in);
                String product = "";
                int price = 0;
                
                String order = "";        //오더 누적 변수
                int total = 0;                //누적 금액
                
                do {
                        System.out.println("============= Menu =============");
                        System.out.println("------------ 버거류 ------------");
                        System.out.println("1. 상하이 스파이스 치킨버거 -- 5,500원");
                        System.out.println("2. 빅맥 --------------- 5,000원");
                        System.out.println("3. 베이컨 토마토 디럭스 ----- 6,000원");
                        System.out.println("------------- 음료 -------------");
                        System.out.println("4. 콜라 --------------- 1,500원");
                        System.out.println("5. 사이다 -------------- 1,500원");
                        System.out.println("6. 오렌지 쥬스 ----------- 2,000원");
                        System.out.println("7. 커피 --------------- 1,000원");
                        System.out.println("------------ 사이드 ------------");
                        System.out.println("8. 감자튀김 --------------- 700원");
                        System.out.println("9. 아이스크림 ------------ 1,000원");
                        System.out.println("=================================");
                        System.out.println("주문하실 메뉴를 번호로 입력하세요 : ");
                        int no = sc.nextInt();
                        System.out.println("주문하실 수량을 입력하세요 : ");
                        int ctn = sc.nextInt();
                        sc.nextLine();
                        System.out.println("추가 주문 하시겠습니까?(y/n) : ");
                        String con = sc.nextLine().toUpperCase();                //입력받은 문자를 모두 대문자로 변환
                        
                        switch(no) {
                        case 1 : price = 5500; product = "상하이 스파이스 치킨버거";  break;
                        case 2 : price = 5000; product = "빅맥";break;
                        case 3 : price = 6000; product = "베이컨 토마토 디럭스"; break;
                        case 4 : price = 1500; product = "콜라"; break;
                        case 5 : price = 1500; product = "사이다"; break;
                        case 6 : price = 2000; product = "오렌지 쥬스"; break;
                        case 7 : price = 1000; product = "커피"; break;
                        case 8 : price = 700; product = "감자튀김"; break;
                        case 9 : price = 1000; product = "아이스크림"; break;
                        }
                        
                        order += product + " - " + ctn + "개 : " + (price * ctn) + "원";        //*********
                        total += (price * ctn);
                        
                        switch(con) {
                        case "Y" : order += "\n"; break;                //다음 추가 주문 누적
                        case "N" : System.out.println("=======================");
                                           System.out.println(order);
                                           System.out.println("=======================");
                                           System.out.println("total price : " + total + "원");
                                           return;
                        }
                        
                }while(true);
        }
        public void exercise5() {
                int random = (int)(Math.random() * 100) + 1;
                
                int count = 1;                //1로 초기화 처음 난수를 발생시켜 바로 맞춘경우 1회 맞춘 것.

                for(;;) {
                        System.out.print("정수 입력 : ");
                        int num = sc.nextInt();
                        
                        if(random < num) {
                                System.out.println("입력하신 정수보다 작습니다.");
                                count++;
                        }else if(random > num){
                                System.out.println("입력하신 정수보다 큽니다.");
                                count++;
                        }else {
                                System.out.println("정답입니다. " + count + "회 만에 정답을 맞추셨습니다.");
                                break;
                        }
                }
                /*do {
                        System.out.print("정수 입력 : ");
                        int input = sc.nextInt();
                        
                }while(true);*/
        }
        public void exercise6() {                //*****************************실기면접
                //소수 판별
/*                System.out.print("정수 입력 : ");
                int num = sc.nextInt();                //5
                
                if(num > 2) {                                //true
                        for(int i = 1; i <= num; i++) {                //i = 1~5
                                int sum = num % i;
                                
                                if(sum == 1 && sum == num) {        //5 %
                                        System.out.println("소수다.");
                                        break;
                                }else {
                                        System.out.println("소수가 아니다.");
                                        break;
                                }
                        }
                }else {
                        System.out.println("잘 못 입력하셨습니다. 다시 입력하세요.");
                }
*/
                do {
                        System.out.print("2보다 큰 정수를 하나 입력하세요 : ");
                        int num = new java.util.Scanner(System.in).nextInt();
                        boolean check = true;
                        
                        if(num < 1) {
                                System.out.println("잘못 입력하셨습니다. 다시 입력하세요.");
                        }else {
                                for(int i = 2; i < num; i++) {                //1과 자기자신을 뺀 수들 중 나누어서 떨어지는 수가 하나라도 있으면 소수가 아니다.
                                        if(num % i == 0) {
                                                check = false;
                                                break;
                                        }
                                }
                                System.out.println(check?"소수다":"소수가 아니다");
                                break;
                        }
                        
                }while(true);
        }
        public void exercise7() {                        //******************
                //시저 암호
                //공백 판별
                //소문자 , 대문자 판별
                //z보다 크면 -26 해줘서 담아준다 -> 쉬프트         /대문자도 마찬가지
                System.out.print("문자열을 입력 : ");
                String s = sc.nextLine();
                
                System.out.print("문자를 얼만큼 밀지 : ");
                int num = sc.nextInt();
                
                String result = "";
                int mod = num % 26;                        //***나머지 값 만큼 밀어주기 56인경우 -26을 해도 다시 27이므로 mod 이용
                
                for(int i = 0; i < s.length(); i++) {
                        char temp = s.charAt(i);
                        
                        if(temp != ' ') {
                                if(temp <= 'z' && temp >= 'a') {                //소문자
                                        if(temp + mod > 'z') {
                                                result += (char)(temp + mod -26);
                                        }else {
                                                result += (char)(temp + mod);
                                        }
                                }else {                                                                        //대문자
                                        if(temp + mod > 'Z') {
                                                result += (char)(temp + mod -26);
                                        }else {
                                                result += (char)(temp + mod);
                                        }
                                }
                        }else {                        //공백 문자일 경우 그대로 담아준다.
                                result += temp;                
                        }
                }
                System.out.println(result);
        }
        public void exercise8() {
                System.out.print("받으신 금액을 입력하세요 : ");
                int money = sc.nextInt();
                System.out.print("상품 가격을 입력하세요 : ");
                int price = sc.nextInt();
                
                int change = money - price;
                int currency = 50000;
                int mok = 0;
                int nmg = 0;
                int sw = 0;
                int temp = change;
                
                System.out.println("=====================");
                while(true) {
                        mok = temp / currency;
                        nmg = temp % currency;
                        
                        if(mok == 0 && nmg == 0) {                //거스름돈 없음
                                break;
                        }
                        
                        if(mok != 0) {
                                if(currency > 500) {
                                        System.out.println(currency + "원권 지폐 : " + mok + "장");
                                }else {
                                        System.out.println(currency + "원권 지폐 : " + mok + "개");
                                }
                        }
                        
                        if(sw == 0) {
                                currency /= 5;
                                sw = 1;
                        }else { 
                                currency /= 2;
                                sw = 0;
                        }
                        temp = nmg;                //처음부터 다시 나머지 금액으로 연산할 수 있도록
                }
                System.out.println("=====================");
                System.out.println("거슴름돈 : " + change + "원");
        }
}