2014-11-19 2 views
0

정수 배열과 구분 기호를 사용하여 배열을 분할하는 정수 구분 기호가있는 splitArrayByNum 함수를 실행해야합니다. 이 함수는 2D 배열을 반환합니다 (예 : splitArrayByNum([0,0,0,3,1,1,1], 3) -> [[0,0,0],[1,1,1]]splitArrayByNum([3,1,3,3], 3) ->[[1]]).숫자로 배열을 분할하는 함수

내 코드가 콘솔에 아무 것도 인쇄하지 않는 이유는 무엇입니까? m을 감소하여 두 개의 조건문이 충족되지 않기 때문에

package hw3; 
import java.util.Arrays; 

public class ArrayUtils { 

    public static void p(int[][] a) 
    { 
     for (int i = 0; i < a.length; i++) 
     { 
      System.out.println(Arrays.toString(a[i])); 
     } 
    } 

    public static void main(String[] args) 
    { 
     int[] x1={0,0,0,3,1,1,1}; int y1=3; 
     splitArrayByNum(x1, y1); 
     p(splitArrayByNum(x1, y1)); 
    } 

    public static int lastIndexOf(int value, int[] nums) { 
     for (int i = nums.length - 1; i >=0; i--) { 
      if (nums[i] == value) { 
       return i; 
      } 
     } 
     return -1; 
    } 
    public static int firstIndexOf(int value, int[] nums) { 
     int index = -1; 
     for (int i = 0; i < nums.length; i++) { 
      if (nums[i] == value) { 
       index = i; 
       break; 
      } 
     } 
     return index; 
    } 
    \\ turns the number of elements between two Extreme instances 
    public static int mySpan(int value, int[] nums) { 
     if (lastIndexOf(value, nums)==-1) 
      return 0; 
     else 
      return lastIndexOf(value, nums) - firstIndexOf(value, nums) + 1; 
    } 
    public static int [][] splitArrayByNum(int[]input,int number){ 
     //finding the'm' in 'arraySplit[m][]' 
     int []arrayInUse=new int[input.length]; 
     arrayInUse=Arrays.copyOfRange(input, 0, input.length); 
     int counter=0; 
     while(mySpan(number,arrayInUse)!=0) 
     { 
      int first=arrayInUse[firstIndexOf(number,arrayInUse)]; 
      int last= arrayInUse[lastIndexOf(number,arrayInUse)]; 
      int k=1; 
      int m=mySpan(number,arrayInUse); 
      while (m>0) 
      {  \\ checking for deleting sequences from the sides 

       if((arrayInUse[first]!=arrayInUse[first+k]) &&(arrayInUse[last]!=arrayInUse[last-k])) 
        continue; 
       if (arrayInUse[first]==arrayInUse[first+k]) 
        m=m-1; 
       if(m<0) 
        continue; 
       first=first+k; 
       if ((arrayInUse[last])==(arrayInUse[last-k])) 
        m=m-2; 
       if(m<0) 
        continue; 
       last=last-k; 
       k=k+1; 

      } 
      if (m<0) 
       continue; 
      counter=counter+1; 
      arrayInUse=Arrays.copyOfRange(arrayInUse, first, last+1); 
     } 
     int [][]splitArray=new int[counter][]; 
     // creating splitArray 
     counter=0; 
     arrayInUse=Arrays.copyOfRange(input, 0, input.length); 
     while(mySpan(number,arrayInUse)!=0) 
     { 
      int first=arrayInUse[firstIndexOf(number,arrayInUse)]; 
      int last= arrayInUse[lastIndexOf(number,arrayInUse)]; 
      int k=1; 
      int m=mySpan(number,arrayInUse); 
      while (m>0) 
      {  \\ checking for deleting sequences from the sides 
       if((arrayInUse[first]!=arrayInUse[first+k]) &&(arrayInUse[last]!=arrayInUse[last-k])) 
        continue; 
       if (arrayInUse[first]==arrayInUse[first+k]) 
        m=m-1; 
       if(m<0) 
        continue; 
       first=first+k; 
       if ((arrayInUse[last])==(arrayInUse[last-k])) 
        m=m-2; 
       if(m<0) 
        continue; 
       last=last-k; 
       k=k+1; 

      } 
      if (m<0) 
       continue; 

      arrayInUse = Arrays.copyOfRange(arrayInUse, first+1, last+1); 
      splitArray[counter] = Arrays.copyOfRange(arrayInUse,first+1,firstIndexOf(number,arrayInUse)); 
      counter = counter+1; 
     } 

     return splitArray; 
    } 
} 
+0

"실행했을 때 코드가 응답하지 않았습니다." 평균? – Aleksandar

+0

조금 좁혀주세요. 이것은 거의 코드 덤프입니다. – Coffee

+0

"int [] x1 = {0,0,0,3,1,1,1}; except int y1 = 3;" [[0,0,0], [1,1,1]]을 돌려 주지만, "실행"하면 아무 것도 되돌릴 수 없습니다. – user3227

답변

0

while (m>0)의 첫 번째 블록은 결코 종료하지 않습니다.

 while (m>0) 
     { 
      System.out.println(m); //Debugging statement to show that value of m never changes 

      if((arrayInUse[first]!=arrayInUse[first+k]) &&(arrayInUse[last]!=arrayInUse[last-k])) 
       continue; 
      if (arrayInUse[first]==arrayInUse[first+k]) 
       m=m-1; 
      if(m<0) 
       continue; 
      first=first+k; 
      if ((arrayInUse[last])==(arrayInUse[last-k])) 
       m=m-2; 
      if(m<0) 
       continue; 
      last=last-k; 
      k=k+1; 

     } 
+0

@ Forager, 감사합니다! ("계속"으로 "중단"을 변경합니다. 이 문제를 해결했지만 여전히 작동하지 않습니다 ...)하지만 디버그가 어떻게 도움이됩니까? 디버그 모드에있을 때 실행을 클릭하면 아무 것도 표시되지 않습니다. – user3227

+0

디버그 모드는 중단 점을 설정 한 행에 도달 할 때 프로그램 실행을 일시 중지합니다. 그렇게하려면 문제가되는 행에서 Ctrl + Shift + B를 누릅니다. 아니면 내가했던 것처럼 인쇄 문을 코드에 추가 할 수 있습니다. 또는 변수의 값을 확인합니다. – Forager

관련 문제