Java

[Java] For 문 응용, 다중 For문

Rosie_dev 2021. 1. 15. 09:07

예제1 - 문자열 출력하기


문자열을 작성하고 해당 문자열에서 숫자 전까지 문자열을 출력하는 for 문을 작성한다. 

//result 값에 ch라는 문자열을 이용해 index 하나하나 축적해서 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
String word = "sup3er007Man";
        String result = "";
        int i=0;
        
        //배열 풀이 고려해볼 것!
        for (; i<word.length(); i++) {
            char ch = word.charAt(i);
            
            if(Character.isDigit(ch)) {
                break;    //i => 5, 문자열이 길이와 동일
            } else {
                result += ch;
           }
            
        } 
        
        System.out.print("\n1.최초로 숫자가 나오는 곳의 앞까지 문자열 출력 => "+result);
        System.out.println("\n1.최초로 숫자가 나오는 곳의 앞까지 문자열 길이 => "+i);
cs

 

 

예제2 - 홀수번 영문자 나열 출력하기


★삼항연산자를 활용하기 

홀수번 영문자 나열의 마지막에는 "," 이 오면 안되므로 삼항연산자를 이용해 해당 경우의 수를 제거한다. 짝수번 문자는 출력하지 않으므로 배제를 위해 i%2==0 이란 방식으로 사용한다. 그리고 continue;를 통해 아래 코드가 실행되지 않도록 작성한다.

 

1
2
3
4
for(i='a';i<'z'+1;i++) {    
            if(i%2==0continue;
            String str = (i<'z'-1)?",":"";
            System.out.print((char)i+str);
cs

 

 

예제3 - 입력받은 값 사이의 홀짝의 합 구하기


if 문을 활용해 i가 2의 배수라면 홀수의 합계에 아래와 같이 넣어준다. 그리고 else에서 짝수의 합계에 넣어준다.

 

1
2
3
4
5
for(int i=firstNo;i<=secondNo;i++) {                
    if(i%2 == 0) {                   
        holSum += i;
        continue;
    } else jjakSum += i;;
cs

 

 

예제4 - 구구단 출력하기


레이블 활용하기

 

break; 문이 두 개 이상일 때, 기본대로 가장 가까운 반복문을 빠져나가는 것이 아니라 원하는 반복문의 탈출로 사용하고자 한다면 레이블을 사용한다. For 문 위에 레이블명: 을 작성하고 break 레이블명; 을 작성한다.  

 

구구단 출력코드 작성에 발생할 수 있는 문제의 모든 경우의 수를 생각해보자.

1. 먼저 구구단을 입력하라고 했을 때, 정수형으로 2~9 사이의 숫자가 아닌 문자, 실수, 그 외 정수형이 입력되는 경우는 배제

2. 구구단 출력 후 다시 구구단 프로그램을 실행할 것인지 여부 확인하기.

     이 때, y 나 n 이 아닌 다른 문자, 숫자, 실수가 입력되는 경우는 배제해야 한다. 그리고 대소문자의 여부와 관계없이 출력해야 하므로  .equalsIgnoreCase() 값을 이용해서 작성한다.

 

//scanner leak;를 방지하기 위해 중복 반복문에서 break;를 작성하는 문구 위에 넣어 불필요한 메모리 낭비를 방지하는 것이 효율적이다.

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package my.day07.b.FOR;
 
import java.util.Scanner;
 
public class GuguDan1Main {  //경우의  수 고려한 구구단 만들기
 
    public static void main(String[] args) {
 
    Scanner sc = new Scanner(System.in);    
 
        outer:  // outer: 을 레이블이라고 부르는데 그 레이블명이 지금은 outer일 뿐이다.
        for(;;) {
            
            try {
                System.out.print("몇 단 볼래? => ");
                String strDan = sc.nextLine();
                int Dan  = Integer.parseInt(strDan);
                
                if(1<Dan&&Dan<10) {
                    System.out.println("=== "+Dan+"단 ===");
                    for(int i=1;i<10;i++) {
                        System.out.println(Dan+"*"+i+"="+Dan*i);
                    }
                    
                    for(;;) {
                        System.out.print(">> 또 하시겠습니까? [Y/N] => ");
                        String yn = sc.nextLine();
                        
                        if ("N".equalsIgnoreCase(yn)) {     //대소문자 구분하지 않는 경우
                            System.out.println("== 프로그램 종료 ==");
                            sc.close();
                            break outer; // 가장 바깥에서 선언된 for문을 빠져나가야 하는 것이다. 
                                         // outer가 레이블명이다. 
                        } else if ("Y".equalsIgnoreCase(yn)) {
                                break;
                        } else System.out.println(">>> Y 또는 N만 가능합니다 <<<");
                    }//end of for ------------------------------------------------
                
                } else
                    System.out.println(">>> 2단부터 9단까지만 가능합니다 <<<");
                
                
            } catch (NumberFormatException e) {
                System.out.println(">>> 2단부터 9단까지만 가능합니다 <<<");
            }
            
        //sc.close(); break;전에 넣어주기
        }//end of for-------------------------------------------------
    }
}
 
cs

 

 

예제5 - 구구단 전체 출력하기


행렬

 

출력하고자 하는 값이 행렬형태일 때, 배열을 이용한다. 중접 For문을 이용해서도 행렬형태를 출력할 수 있다. (row은 행, col은 열로 작성)

 

printf

 

서식지정자를 지정받아 출력할 수 있다. 

System.out.printf("%35s\n","== 구구단 ==");  에서와 같이 %s 는 String 문자열을 출력하는 지정자이고, % 뒤에 숫자를 써서 왼쪽 정렬 기준으로 공백을 두고 문자열을 배치하도록 할 수 있다. 오른쪽 정렬은 음수를 쓰면 된다. 출력 값의 출력 위치를 지정할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
 
        System.out.printf("%35s\n","== 구구단 ==");   
 
        for (int row=1; row<10; row++) {
            for (int col=2; col<10; col++) {
                System.out.printf(col+"*"+row+"=%-4d",(row*col));
            }
            System.out.print("\n");
        }
}
cs

 

 

다중 For 문의 활용


5*5 행렬 형태에서 4행, 4열을 빼고 작성하고자 하는 경우에는 다음과 같이 if 문의 continue; 으로 해당 행렬 부분을 빼고 출력이 가능하다.

 

1
2
3
4
5
6
7
8
for (i=5; i>0 ;i--) {
            if(i==4continue;
            for (j=1; j<6; j++) { 
                if(j==4continue;
                System.out.print(i+"0"+j+"호\t");
            }
            System.out.print("\n");
        }
cs
댓글