질문

2010-05-26 3 views
0

안녕 난 내가이 질문은 어떻게 든 말도 안되는 것을 알고하지만 난 여기에 하나 개의 정렬 된 배열에 두 개의 정렬 된 배열을 병합 코드를 볼 수 있도록 질문이 자바 코드가질문

public class Merge { 

    public static void main(String[]args){ 

     int a[]=new int[]{7,14,23,30,35,40}; 
     int b[]=new int[]{5,8,9,11,50,67,81}; 
     int c[]=new int[a.length+b.length]; 
     int al=0; 
     int bl=0; 
     int cl=0; 

     while (al<a.length && bl<b.length)    
      if (a[al]<b[bl]) 
       c[cl++]=a[al++]; 
      else 
       c[cl++]=b[bl++]; 


     while (al<a.length) 
      c[cl++]=a[al++]; 

     while (bl<b.length) 
      c[cl++]=b[bl++]; 

     for (int j=0;j<c.length;j++){ 
      System.out.println(c[j]); 
     } 


    } 
} 

질문은 왜이다 여기에 쓸 경우 {} 대괄호

while (al<a.length && bl<b.length){ 
} 

?

+0

코드 블록에 코드 붙여 넣기가 아주 좋았을 것입니다! – ivans

+0

질문을 게시 할 때 정말주의해야합니다. 읽을 수 없기 때문입니다. 편집을 클릭하고 코드를 선택한 다음 101010 버튼을 클릭하고 모든 것을 들여 씁니다. – Palantir

+0

무엇이 당신의 질문입니까? 그것은 명확하지 않다. –

답변

1

내 추측이 맞으면 질문은 ...... 왜 다음 코드가 작동하지 않습니까?

while (al<a.length && bl<b.length) 
{ //<-- bracket here 

    if (a[al]<b[bl]) 
     c[cl++]=a[al++]; 


    else 
    c[cl++]=b[bl++]; 


    while (al<a.length) 
     c[cl++]=a[al++]; 

    while (bl<b.length) 
    c[cl++]=b[bl++]; 
} //<--- Bracket here 

그런 경우

while (al<a.length && bl<b.length) 

가 첫 번째 반복 후 실패합니다.

+0

감사합니다. 주주르르에게 도움을 청합니다. –

+0

정확히 한 번 반복하십시오. –

+0

@ 앤드 레아스 감사합니다. 그것을 수정 :) – Jujjuru

1

병합 정렬 알고리즘에 문제가있는 경우 this Wiki 문서를 확인하십시오. 코드를 게시 할 때 또한,

그것은 당신이 괄호를 넣어 위치에 따라 달라집니다
3

, 현재 코드는 동일합니다 당신의 whileif 문에 변수를 좀 더 설명하는 이름뿐만 아니라 추가 중괄호 ({ })을 줄 좋을 것이다 to :

while (al<a.length && bl<b.length) { 
    if (a[al]<b[bl]) { 
     c[cl++]=a[al++]; 
    } else { 
     c[cl++]=b[bl++]; 
    } 
} 

대괄호를 다른 곳에 넣으면 코드의 의미가 변경됩니다.

+0

아니요 대괄호를 사용했지만 작동하지 않습니다. –

+0

@davit이 위치에 대괄호를 삽입 했습니까? 아니면 다른 곳에서? – tanascius

1

한 좋은 조언 : 항상 서라운드 중괄호 코드의 모든 논리 블록 :

if (expression) { 
    //some code 
} 

if (expression) { 
    //one line of code 
} else { 
    //another line 
} 

while (conditionIsTrue) { 
    //just 1 line here but surrounded with curly braces 
} 

그것은 당신이 모든 C 스타일의 언어로 수많은하지 명백한 실수를 방지 할 수 있습니다.

한 줄만 차단해야한다는 것을 이해하고 코드를 읽기 쉽게하기 위해 중괄호를 의식적으로 생략한다면 이러한 실수는 어떻게 나타날 수 있습니까? 아주 간단 해요! 그냥 코드 상상 :

if (a > b) 
    result = a; 

더 우아 처음 룩을 다음

if (a > b) { 
    result = a; 
} 

또는

if (a > b) 
{ 
    result = a; 
} 

하지만 지금의 당신이 당신의 코드에 일부 디버그 정보를 추가 할 가정하자 :

if (a > b) 
    System.out.println ("a > b, we're inside if-block"); 
    result = a;       //This line is ALWAYS executed 

실수를 저지르기 란 정말 쉽습니다. 따라서 중괄호를 생략하지 않으면 훨씬 쉽게 처리 할 수 ​​있습니다.