본문 바로가기
Java/└ [JAVA] Practice

[실습문제] switch, for문

by 박채니 2022. 3. 15.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

switch, for문에 대해서 간단한 실습 문제들을 풀어보았습니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


@실습 문제1

수도세를 구하는 프로그램을 작성하세요. 
사용자에게 사용용도와 물사용량을 입력받고, 이에따른 수도세를 계산해 출력하세요.(switch문 사용할 것.)
* 사용요금: 용도별 가격(1liter)  * 사용량
* 수도세: 사용요금의 5%
* 총사용요금: 사용요금 + 수도세
* 사용용도메뉴에서 1,2,3번이외를 선택시에는 "메뉴번호는 1,2,3만 가능합니다."를 출력하고, 프로그램을 종료할 수 합니다.

 

사용자입력예시)
    ----------menu----------
    1. 가정용 (50원/liter)
    2. 상업용 (45원/liter)
    3. 공업용 (30원/liter)
    -------------------------
    메뉴번호를 선택하세요. ==> 2
    물 사용량을 입력하세요. ==> 250

출력예시)
    ----------<<수도세>>-----------
    선택메뉴번호 :  2. 상업용(업소에서 사용하실 경우)를 선택하셨습니다. 
    사용요금 : 11250
    수도세 : 562
    총수도요금 : 11812원

public void test5() {
	Scanner sc = new Scanner(System.in);
		
	String menu = "----------menu----------\n"
			+ "1. 가정용 (50원/liter)\n"
			+ "2. 상업용 (45원/liter)\n"
			+ "3. 공업용 (30원/liter)\n"
			+ "-------------------------";
		
	System.out.println(menu);
	System.out.print("> 메뉴번호를 선택하세요 ==> ");
	int menuNum = sc.nextInt();
	if(!(menuNum == 1 || menuNum == 2 || menuNum ==3)) {
		System.out.println("메뉴번호는 1,2,3만 가능합니다. 프로그램을 종료합니다.");
		return;
	}
	System.out.print("> 물 사용량을 입력하세요 ==> ");
	int userWa = sc.nextInt();
		
	String userChoice = "";
	int price = 0;
	
	switch(menuNum) {
	case 1: userChoice = "1. 가정용(가정에서 사용하실 경우)"; price = 50; break;
	case 2: userChoice = "2. 상업용(업소에서 사용하실 경우)"; price = 45; break;
	case 3: userChoice = "3. 공업용(공업에서 사용하실 경우)"; price = 30; break;
	}
		
	int useFee = price*userWa;
	int waterFee = (int)(useFee*0.05);
	int total = useFee + waterFee;
		
	print(userChoice, useFee, waterFee, total);
}
	
public void print(String userChoice, int useFee, int waterFee, int total) {
	System.out.println("----------<<수도세>>-----------");
	System.out.printf("메뉴선택번호 : %s를(을) 선택하셨습니다.\n", userChoice);
	System.out.printf("사용요금 : %d원\n", useFee);
	System.out.printf("수도세 : %d\n", waterFee);
	System.out.printf("총 수도 요금 : %d원\n", total);
}

@콘솔출력값
----------menu----------
1. 가정용 (50원/liter)
2. 상업용 (45원/liter)
3. 공업용 (30원/liter)
-------------------------
> 메뉴번호를 선택하세요 ==> 2
> 물 사용량을 입력하세요 ==> 250
----------<<수도세>>-----------
메뉴선택번호 : 2. 상업용(업소에서 사용하실 경우)를(을) 선택하셨습니다.
사용요금 : 11250원
수도세 : 562
총 수도 요금 : 11812원

여기서!!!! userChoice를 int형이 아닌 원래는 String형으로 받으려고 하였습니다.

처음에는 if문을 아래와 같이 짰었습니다.

System.out.print("> 메뉴번호를 선택하세요 ==> ");
String menuNum = sc.next();

if(!(menuNum == "1" || menuNum == "2" || menuNum == "3")) {
	System.out.println("메뉴번호는 1,2,3만 가능합니다. 프로그램을 종료합니다.");
	return;
}

하지만 내 마음과는 다르게 계속 메뉴번호는 1,2,3만 가능하다면서 프로그램을 종료되었습니다.

그 이유는!!

== 비교연산자는 stack메모리의 값을 비교하게 되고, 값이 일치하면 true/불일치하면 false를 리턴하게 됩니다.

하지만 참조형의 경우 stack메모리 상에는 실제 값이 아닌 실제 값을 가리키는 위치값이 존재합니다.

따라서 프로그램은 menuNum의 위치값과 "1"을 비교하게 되었고 불일치하니 올바르지 않다며 return 시켜버린 것이죠..

 

문자열을 비교하고 싶다면 .equals 메소드를 사용해야합니다.

System.out.print("> 메뉴번호를 선택하세요 ==> ");
String menuNum = sc.next();

if(!(userMenu.equals("1") || userMenu.equals("2") || userMenu.equals("3"))) {
	System.out.println("메뉴번호는 1,2,3만 가능합니다. 프로그램을 종료합니다.");
	return;
}

userMenu의 실제 값(힙 메모리)이 ("1")과 같니? 올바른 값을 입력하면 true이므로 return 하지 않고 무시해버리겠죠.

문자열을 비교할 때는 == 비교연산자가 아닌 .equals()를 사용해야 합니다!!!

 

@실습 문제2

1부터 사용자로부터 입력 받은 정수까지 존재하는 짝수의 합을 출력하세요. 
(for문 활용)

 

public void test6() {
	Scanner sc = new Scanner(System.in);
	System.out.print("> 정수를 입력하세요 : ");
	int input = sc.nextInt();
		
	int sum = 0;
	for(int i = 1; i <= input; i++) {
		if(i % 2 == 0)
			sum+=i;
	}
	System.out.println(sum);
}

@콘솔출력값
> 정수를 입력하세요 : 10
30

 

@실습 문제3

정수를 입력 받아 1부터 입력 받은 정수까지 수를 
홀수와 짝수를 나눠서 홀수면 “수”, 짝수면 “박”을 
출력 하세요.
  
예) 4입력 : 수박수박 / 5입력 : 수박수박수 출력

 

public void test7() {
	Scanner sc = new Scanner(System.in);
	System.out.print("> 정수를 입력하세요 : ");
	int input = sc.nextInt();
		
	String str = "";
	for(int i = 1; i <= input; i++) {
		if(i % 2 == 1) {
			System.out.print("수");
		}else {
			System.out.print("박");
		}
	}
}

@콘솔출력값
> 정수를 입력하세요 : 5
수박수박수

 

@실습 문제4

정수를 입력 받아 입력된 값의 구구단 프로그램을 만들어보세요.  
 
예) 5입력 
       5X1=5
       5X2=10
       5X3=15
      .
      .
       5X9=45
단, 1~9까지만 가능하고 이외에 값을 넣으면 “잘못 입력하셨습니다. 프로그램 종료합니다”출력

public void test8() {
	Scanner sc = new Scanner(System.in);
	System.out.print("> 단을 입력하세요(1~9) : ");
	int input = sc.nextInt();
		
	if(input < 1 || input > 9) {
		System.out.println("잘못 입력하셨습니다. 프로그램을 종료합니다.");
		return;
	} else {
		for(int i = 1; i < 10; i++) {
			System.out.println(input + " X " + i + " = " + input*i);
		}
	}	
}

@콘솔출력값
> 단을 입력하세요(1~9) : 9
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81

 

@실습 문제 5

문자열과 문자열에서 검색될 문자를 입력 받아 문자열에 그 문자가 몇 개이었는지 개수를 확인하는 프로그램을 작성하세요. 
또, 검색할 문자가 영문자가 아니면 "영문자가 아닙니다." 출력 후 프로그램을 종료하세요. 
    
출력 예)
문자열 입력 : application
검색할 문자 입력 : p
'p'가 포함된 갯수 : 2 개


문자열 입력 : apple_test123
문자 입력 : ㄱ
영문자가 아닙니다.

public void test9() {
	Scanner sc = new Scanner(System.in);
	System.out.print("> 문자열 입력 : ");
	String input = sc.next();
	System.out.print("> 검색할 문자 입력 : ");
	char choice = sc.next().charAt(0);
		
	boolean alpha = choice >= 'a' && choice <= 'z' || choice >= 'A' && choice <= 'Z';
		
	int count = 0;
	if(!(alpha)) {
		System.out.println("영문자가 아닙니다.");
		return;
	} else {
		for(int i = 0; i < input.length(); i++) {
			if(input.charAt(i) == choice)
				count++;
		}
		System.out.printf("'%c'가 포함된 갯수 : %d개\n", choice, count);
	}
}

@콘솔출력값
> 문자열 입력 : application
> 검색할 문자 입력 : p
'p'가 포함된 갯수 : 2개

'Java > └ [JAVA] Practice' 카테고리의 다른 글

[실습문제] 배열  (0) 2022.04.13
[실습문제] 반복문, 분기문  (0) 2022.04.11
[실습문제] 난수, 조건문  (0) 2022.03.10
[실습문제] 연산자  (0) 2022.03.10
[실습문제] printf, Scanner  (0) 2022.03.01