2016-11-23 4 views
1

조건과 일치하지 않습니다중첩 동안 루프 나는 다음과 같은 번호 인쇄 프로그램을 만들려고 노력하고

1 1 
1 2 
1 3 
1 4 
2 1 
2 2 
2 3 
2 4 

코드는

public class JavaApplication8 { 

    public static void main(String[] args) { 

     int i = 1; 
     int j = 1; 

     while (i <= 2 && j <= 4) { 

      while (i <= 2 && j <= 4) { 

       System.out.printf("%d%d\n", i, j); 

       j++; 
      } 

      j = j - 4; 

      i++; 

      System.out.printf("%d%d\n", i, j); 
      j++; 

     } 

    } 
} 

프로그램 인쇄이

입니다
1 1 
1 2 
1 3 
1 4 
2 1 
2 2 
2 3 
2 4 
3 1 

내 조건에서 왜 이런 일이 일어나고 있는지 나는 알지 못합니다. 그러나 그 크기는 작거나 같아야합니다. 2

답변

2

귀하의 최종 println 문 (아래 표시)이 무조건이기 때문에 최종 3 1을 출력하고 있습니다. 따라서 i을 3 씩 증가시킨 후에도 그 명령문을 실행합니다. while 조건은 이후에 적용되기 때문에 인쇄 후 중지됩니다.

public class JavaApplication8 { 

    public static void main(String[] args) { 

     int i = 1; 
     int j = 1; 

     while (i <= 2 && j <= 4) { 

      while (i <= 2 && j <= 4) { 

       System.out.printf("%d%d\n", i, j); 

       j++; 
      } 

      j = j - 4; 

      i++; 

      System.out.printf("%d%d\n", i, j); // <=== This one 
      j++; 

     } 

    } 
} 

는 모든 일하지만, 극적으로 간단하게 할 수있는 :

public class JavaApplication8 { 
    public static void main(String[] args) { 
     for (int i = 1; i <= 2; ++i) { 
      for (int j = 1; j <= 4; ++j) { 
       System.out.printf("%d%d\n", i, j); 
      } 
     } 
    } 
} 

Live Example

+0

때문에, 실 거예요 (31)을 인쇄하는 것이 방법이 없다? – Smas

+1

@Smas : 로직을 변경하기 만하면됩니다. 위의 논리를 변경할 수있는 한 가지 방법을 보여주었습니다. 또 다른 것은'println'을 조건부 ('if'에 의해 보호 됨)로 만드는 것이지만, 존중하면 꽤 비 최적의 코드가되어 그 조건을 3 개의 다른 장소에서 반복합니다. –

+0

예, 말씀하신대로 if를 사용하면 저에게 효과적입니다. 정말 고맙습니다. – Smas