자바 의 "goto" 구현 수정 필요...

7489 단어 자바C++cC#Blog
자바 의 "goto" 구현
본문 은
용암 블 로그
원본 박문 주소:
http://lavasoft.blog.51cto.com/
자바 언어 에서 goto 는 키 워드 를 유지 하고 goto 문 구 를 사용 하지 않 으 며 goto 키 워드 를 사용 하 는 곳 도 없습니다.
자바 에서 도 특정 상황 에서 특정한 수단 을 통 해 goto 의 기능 을 실현 할 수 있다.자바 가 개발 자 들 이 프로그램 을 마음대로 뛰 어 넘 는 것 을 원 하지 않 는 것 은 분명 하 다.다음은 두 가지 특정 을 설명 한다.
특정 상황: for, while 문 (do.. while 문 포함) 과 같은 순환 체 내 에 만 있 습 니 다.
특정 수단: 구문 태그 와 순환 제어 키워드 break, contine, 문법 형식 은 break / continue 구문 태그 입 니 다.
1. break, contine, 구문 태그
1. 구문 태그
구문 태그 의 문법 은: 태그 이름:
문장 라벨 은 방법 체 내의 마지막 문장 전에 정의 할 수 있다.그러나 구문 태그 가 실제 사용 하 는 기 회 는 break 와 contine 을 결합 하여 사용 하 는 것 이 고 break 와 contine 은 순환 문 구 를 결합 하여 사용 하기 때문에 실제 구문 태그 의 사용 도 순환 과 밀접 하 게 결합 된다.
구문 라벨 이 사용 되 는 경우 순환 반복 문 구 를 정의 할 수 있 습 니 다. 그렇지 않 으 면 컴 파일 오류 가 발생 합 니 다!
따라서 의미 가 있 고 사용 할 수 있 는 라벨 의 미 는 순환 문 구 를 지정 하 는 표지 이다!
2. break, contine 문 구 를 단독으로 사용 합 니 다.
단독 사용 상황 에서 break 문 구 는 현재 의 순환 교체 체 를 끝내 고 나머지 문 구 를 집행 하 는 역할 을 한다.
continue 문장의 역할 은 이번 교체 과정 을 끝내 고 다음 교체 과정 을 계속 수행 하 는 것 이다.
3. break, contine 구문 결합 구문 태그 의 사용
왜 문장 라벨 이 필요 합 니까?
이 유 는 프로그램 이 순환 하 는 끼 워 넣 을 수 있 기 때 문 입 니 다. 다 중 순환 끼 워 넣 을 때 한 번 에 다단 계 순환 이 필요 할 때 가 있 습 니 다. 이 경우 구문 라벨 을 결합 해 야 이 기능 을 실현 할 수 있 습 니 다.
탭 을 사용 한 경우: break 는 탭 이 지정 한 순환 을 중단 하고 뛰 어 내 립 니 다. contine 은 탭 이 지정 한 순환 으로 이동 하고 이 탭 이 지정 한 순환 을 계속 수행 합 니 다.
상황 을 설명 하기 위해 아래 의 예 를 보 세 요.

import java.util.Random; 

/** 
*        
* 
* @author leizhimin 2009-7-16 11:43:08 
*/ 
public class TestLable { 
        public static void main(String[] args) { 
                outer: 
                for (int i = 0; i < 10; i++) { 
                        System.out.println("
outer_loop:" + i); inner: for (int k = 0; i < 10; k++) { System.out.print(k + " "); int x = new Random().nextInt(10); if (x > 7) { System.out.print(" >>x == " + x + ", inner , outer !"); continue outer; } if (x == 1) { System.out.print(" >>x == 1, outer inner !"); break outer; } } } System.out.println("------>>> !"); } }

실행 결과:

outer_loop:0 
0 1 2 3 4 5 6 7 8 9    >>x == 8,  inner  ,      outer   ! 
outer_loop:1 
0 1 2 3 4 5    >>x == 9,  inner  ,      outer   ! 
outer_loop:2 
0 1 2 3 4 5 6 7 8 9    >>x == 8,  inner  ,      outer   ! 
outer_loop:3 
0 1 2 3 4    >>x == 9,  inner  ,      outer   ! 
outer_loop:4 
0 1 2 3 4 5 6 7 8 9 10    >>x == 8,  inner  ,      outer   ! 
outer_loop:5 
0    >>x == 1,       outer inner  !------>>>        ! 


이 집행 결 과 는 무 작위 이다.
다음은 그림 을 보 여 드 리 겠 습 니 다.
http://lavasoft.blog.51cto.com/62575/178997/
스위치
switch 문 구 는 조건 선택 문 입 니 다. 이 문 구 는 'goto' 의 맛 이 있 지만 제한 도 많 기 때문에 실제 적 으로 사용 이 적 습 니 다.
switch 문장의 구 조 는 다음 과 같다.
switch(intvar){
        case intval: 구문 코드; break;
        case intval: 구문 코드; break;
        case intval: 구문 코드; break;
        case intval: 구문 코드; break;
        default:
                 문장 코드;
}
switch (intval) {...} 구문 에서 작은 괄호 에서 intvar 는 정수 조건 인자 변수 입 니 다. 이 변 수 는 byte, char, short, int 와 enum (매 거 유형) 몇 가지 유형 으로 본질 적 으로 성형 숫자 입 니 다.intval 은 일치 하 는 조건 인자 값 입 니 다. 일치 할 때 다음 문 구 를 실행 합 니 다.그 중의 모든 break 문 구 는 선택 할 수 있다.break 문 구 를 실행 한 후에 전체 switch 문 구 를 뛰 어 내 립 니 다. 그렇지 않 으 면 다른 조건 과 계속 일치 합 니 다.intvar 가 모든 주어진 조건 값 과 일치 하지 않 을 때 default 문 구 를 실행 하고 default 문 구 를 사용 하지 않 으 면 switch 문 구 를 건 너 뜁 니 다.
switch 문장의 조건 인자 변 수 는 전체 숫자 나 문자 형, 매 거 진 유형 으로 만 사용 할 수 있 습 니 다. 이 제한 이 너무 엄격 해서 switch 문장의 실제 용도 가 크 지 않 습 니 다.
다음은 중국어 금액 숫자 변환 프로그램 입 니 다.

/** 
*            
* 
* @author leizhimin 2009-7-16 13:28:05 
*/ 
public class TestSwitch { 

        /** 
         *             
         * 
         * @param num    
         * @return        
         */ 
        public static String genCnNum(Long num) { 
                StringBuffer sb = new StringBuffer(); 
                String snum = String.valueOf(num); 
                for (char c : snum.toCharArray()) { 
                        sb.append(num2Cn(c)); 
                } 
                return sb.toString(); 
        } 

        /** 
         *               
         * 
         * @param c      
         * @return        
         */ 
        private static String num2Cn(char c) { 
                String res = null; 
                switch (c) { 
                        case '0': 
                                res = " "; 
                                break; 
                        case '1': 
                                res = " "; 
                                break; 
                        case '2': 
                                res = " "; 
                                break; 
                        case '3': 
                                res = " "; 
                                break; 
                        case '4': 
                                res = " "; 
                                break; 
                        case '5': 
                                res = " "; 
                                break; 
                        case '6': 
                                res = " "; 
                                break; 
                        case '7': 
                                res = " "; 
                                break; 
                        case '8': 
                                res = " "; 
                                break; 
                        case '9': 
                                res = " "; 
                                break; 
                        default: 
                                System.out.println("      ,   !"); 
                } 
                return res; 
        } 

        public static void main(String[] args) { 
                System.out.println(genCnNum(4523586022L)); 
        } 
}

실행 결과:
           

Process finished with exit code 0

좋은 웹페이지 즐겨찾기