2017-12-06 8 views
0

좋아, 잘하면이 말이 더 합리적이다. 나는 단지 1과 0으로 하드 코딩 된 배열을 가지고있다. 각 요소를 읽는 함수를 작성하여 0 또는 1인지 확인하려고합니다. 1이면 다른 함수를 실행 한 다음 해당 값을 0으로 변경하여 다시 읽지 않습니다. 나중에 구현할 다른 함수의 자리 표시 자로 간단하게 인쇄 할 수 있습니다. 배열의 모든 요소를 ​​검사하는 findfirst1 함수를 가져 오는 데 문제가 있습니다. 내가 코드의 흐름 내에서 다른 장소에 i와 k에 대한 증분자를 넣으려고했으나 시도하지 않은 것이 정확한 출력을 얻습니다.프리맨 체인 코드 (Java)

public static void main(String[] args) 
{ 
    int[][] testarray = {{1,0,0,0,0,0,0,1},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}, 
      {0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{1,0,0,0,0,0,0,1}}; 

    findfirst1(testarray); 
} 

public static void findfirst1(int[][] array1) 
{ 
    int value = 0; 
    for(int i = 0; i < 6;i++) 
    { 
     for(int k = 0; k < 7;k++) 
     { 
      value = array1[i][k]; 
      if(value == 1) 
      { 
       System.out.println(value); 
       array1[i][k] = 0; 
      } 
      else 
      { 
       System.out.println(value); 
      } 
     } 
    } 

} 
+0

필요한 정보 만 추가하십시오. –

+1

나는 당신이 성취하려는 것을 이해할 수는 없지만 명백한 오류가 있습니다. 최악의 경우는 ' .length'를 대신 사용해야 할 때 하드 코딩 된 배열 경계를 사용하는 것입니다. 'findfirst1'는 루프의 경계가 잘못된 것처럼 보이므로 전체 배열을 검사하지 않습니다. 또한 'outline7'과'outline8'은 실제로 아무 것도하지 않습니다. 아직 구현되지 않았습니까? 우리가 그 일을 끝내라고 우리에게 요구하고 있니? –

+0

나는 내 일을 사람들에게 요청하지 않는다. 그렇지 않으면 아무것도 배울 수 없다. 나는 코드를보고, 내가하려고하는 것이 왜 작동하지 않는지를 말해주기 위해 신선한 눈빛 쌍을 가진 사람이 필요하다. –

답변

0

좋아, 그래서 처음부터 끝까지 완전히 쓴 후 그것을 알아 냈어. array.length는 모두 옳았습니다. 나는 "이미지"의 개념에 너무 집중했기 때문에 머리를 감싸는 데 어려움을 겪었다.

편집 : 방금 array1의 마지막 줄이 인쇄되지 않는 오류가있어서 방금 추가 행 0 개를 추가했는데 오류가 발생했습니다.

public class ChainCodeClass { 

public static void main(String[] args) 
{ 
    int[][] array1 = {{0,1,0,0,0,0,0,0},{0,1,0,0,0,1,0,0},{0,1,1,1,0,0,1,0}, 
      {0,0,0,1,1,0,0,1},{0,0,0,0,1,0,0,1},{0,0,0,0,0,1,0,0}, 
      {0,0,0,0,0,0,1,0}**,{0,0,0,0,0,0,0,0}**}; 

    int[][] array2 = {{0,0,0,0,0,0,0,0},{0,1,1,1,1,0,1,0},{0,0,0,0,1,0,1,0}, 
      {0,0,1,1,1,0,1,0},{0,0,1,0,0,0,1,0},{0,0,1,0,0,0,1,0},{0,0,0,0,0,0,1,1}, 
      {0,0,0,0,0,0,0,0}}; 

    System.out.print("First Image"); 
    print(array1); 
    findfirst1(array1); 
    print(array1); 

    System.out.print("Second Image"); 
    print(array2); 
    outline8(array2); 
} 

public static void findfirst1(int[][] array) 
{ 
    int value = 0; 
    for(int i = 0; i < array.length; i++) 
    { 
     for(int k = 0; k < array.length; k++) 
     { 
      value = array[i][k]; 
      if(value == 1) 
      { 
       System.out.print(value + " "); 
       array[i][k] = 0; 
      } 
      else 
      { 
       System.out.println(value); 
      } 
     } 
    } 

} 

public static void print(int[][] array) 
{ 
for(int i = 0; i < array.length; i++) // print function for the array using incrementors 
{ 
    System.out.print("\n"); 

    for(int k = 0; k < array.length; k++) 
    { 
     System.out.print(array[i][k] + " "); 
    } 
} 
    System.out.println(); 
} 
} 
0

i로 변경 < 7; 및 k < 8 귀하의 코드가 작동합니다.

면책. 난 그냥 질문에 대답, 나는 이런 식으로 코드를 작성하지 않을 것이다.

내 편집 :

내 편집기에서 코드를 허용합니다.

내 대답을 업데이트하는 데 어려움이 있습니다.

이 컨텍스트에서는 int [] []를 사용하지 않고 원래 값을 조작하려고하지 않습니다.

하지만 원래 int [] []가 있으면 변환 할 것입니다.

final List<int[]> intArrays = Arrays.stream(testarray).collect(Collectors.toList()); 
final List<Integer> integers = intArrays.stream().flatMap(z -> Arrays.stream(z).boxed()).collect(Collectors.toList()); 

그런 다음 메소드에서 List를 허용하고 forEach를 수행하십시오. 그리고 값을 변경하는 데 신경 쓰지 않고 그냥 반응합니다.

건배.

+0

List가 변수 유형이라는 것을 알지 못했습니다. 나는 그것을 시도 할 것이다. 고맙습니다. –

+0

이렇게하면이를 1 차원 배열로 변환합니까? 내가 봤던 것에서 볼 때 프리맨 체인 코드는 2D 배열의 위치를 ​​기반으로하기 때문에 작동하지 않을 것입니다. Freeman Chain Code의 실제 코드 예제를 하나만 발견했습니다. 스페인어로 주석을 달고 실제 이미지와 배열 이미지를 비교하여 디자인 했으므로 사용하지 않으려 고합니다. –