2011-10-04 5 views
3

면책 조항 : 이것은 숙제를위한 것입니다.반복 가능/다차원 배열 다음 메소드 문제

저는 현재 정사각형의 2 차원 배열에서 각 배열을 전달하기 위해 반복 가능한 인터페이스를 구현해야하는 과제를 수행하고 있습니다. 이 배열은 숫자 그리드를 나타 내기로되어 있습니다 (그래서 나는 그것들을 [행] [col]로 참조 할 것입니다). 내 문제는 행과 열을 반복하는 데 동일한 다음 메서드를 사용하고 싶다는 것입니다. 첫째, 이것이 가능한가? 둘째, 어떤 제안/힌트?

내 다음 방법은 현재 다음과 같습니다

public Data[] next(){ 
Data [] holder = new Data[ray.length]; 
for (int i = 0; i <ray.length; i++) 
    holder[i]=ray[counter][i]; 
counter++; 
return holder;} 

편집 : 나는 레이 [카운터] 카운터 그리고 난을 전환 할 수있는 알고있다 [i]를,하지만 난이 방법을 잘 모르겠어요 그게 가능하다면 둘 다 할 수 있습니다.

ray는 다차원 배열이며 count는 내가 만든 Iterator 메서드의 특성입니다 (0으로 초기화되었으며이 값을 변경하는 유일한 메서드입니다). 이 방법으로 "열의"열을 반환 할 수 없다는 것을 알고 있습니다. 그래서 다음에 열과 행을 호출하는 방법에 대해 어떻게 생각합니까 ?? 도움을 주셔서 감사합니다. 추가 질문이 있으면 내가 대기 할 것입니다.

+1

요점은 무엇인가요? 행 단위로 반복? –

+0

행 반복에 의한 행과 열 반복에 의한 열을 원합니다. – user527179

답변

1

제 문제는 동일한 다음 방법을 사용하여 행과 열을 반복하고 싶습니다. 첫째, 이것이 가능한가?

네가 무슨 뜻인지 알고 있다고 가정하면 가능합니다. (문구는 "행을 반복하고 열은"끔찍 모호합니다.)

을이 여기에 숙제 운동 힌트의 부부이기 때문에 :

  • 당신은 두 개의 카운터없는 일이 필요합니다.

  • 한 행의 끝에 도달하면 다음 행의 시작으로 이동해야합니다. (분명히!) 두 개의 카운터가 있다면 그게 무슨 뜻인지 생각해보십시오.

올바른 트랙을 얻으려면 충분합니다.


나는 행 반복하여 행과 열 반복하여 열을합니다.

이 또한 끔찍 모호한 설명입니다,하지만 난 가끔 당신이 오른쪽으로 위에서 아래로, 그리고 왼쪽으로 반복 할 의미대로 위에서 아래로 반복하고 싶지는 다른 시간을 해석하는거야 그리고 왼쪽에서 오른쪽으로. 또한 가능하다

:

  • 하나의 가능성이있는 당신이 반복되는 방향 반복자에게 여분의 상태 변수를 사용하는 것입니다; 즉, 열 내의 열 또는 열 내의 열.

  • 또 다른 가능성은 두 가지 방향에 대해 두 가지 별개의 클래스를 구현하는 것입니다.


문제는 반복자 클래스가 하나 개의 카운터를하도록되어 있다는 것입니다 및 단일 차원 배열을 반환합니다.

당신은 (마지막) 반복자가 배열을 반환하기 되어 것을 분명하게 우리에게 말 했어요. (! 좋은 치과 의사가 빨리보다 치아를 꺼내 수 있습니다) 그래서 여기

하면 힌트 다음 i 번째 행은 쉽게 돌아

  • 하지만 j 번째 열을 반환하는 것은 새로운 배열을 만들어야합니다 해당 열의 값을 보유합니다.
+0

나는 모호함을 알고 있으며 크게 사과한다. 과제는 전체적으로 모호합니다. 문제는 iterator 클래스가 하나의 카운터를 가지고 있다고 가정하고 단일 차원 배열을 반환한다는 것입니다. 나는 원래의 문제에 새로운 아이디어를 추가했다. 나는 다음 메소드가 어떻게 광선을 돌려 줄 것인지 확신하지 못한다. [i] [col] AND ray [row] [i] (나는 어떤 카운터라고 가정한다). – user527179

+0

@ user527179 - 과제가 실제로 모호한 경우 1) 설정자와 모호성을 해결하거나 2) 의미가 무엇인지 합리적으로 추측해야합니다. 후자의 경우, * 당신 *은 분명히하려고하는 것을 * 우리에게 알려야합니다. 다른 사람에게 책임을 묻지 마십시오 ... –

+0

@ user527179 - 참고 : 귀하의 직무 중 중요한 부분은 1) 명확한 의사 소통과 2) 귀하에게 양도 된 요구 사항/사양의 명백한 또는 실제적인 모호성을 만족스럽게 해결합니다. 이제는 이러한 기술을 배우기 시작할 때입니다. –

0

제 조언은 입니다. 배열을 2 차원 배열으로 변환하고 반복하십시오.

반복기를 초기화 할 때 목록을 변환하십시오. 그런 다음 목록을 쉽게 반복 할 수 있습니다.

다음은 p 코드입니다. 숙제의 구현을 풍부하게 만들 수 있습니다. 희망이 당신을 돕는다!

class TwoDimeIterator implements Iterator<Date> { 

    List transformedList = new ArrayList(); 

    int cursor = 0; 

    /** transform to a list row by row. 
     So you could define your Iterator order.**/ 
    TwoDimeIterator(){ 
     for(int i=0; i < ray.length; i++) 
      for(int j=0; j < ray[0].length; j++) 
       transformedList.add(ray[i][j]); 
    } 

    public Date next() { 
     return transformedList.get(cursor++); 
    } 

    public boolean hasNext() { 
     return cursor != transformedList.size(); 
    } 

//... 
} 
+0

ArrayList가 아닌 배열을 반환해야하지만 조언을 해주셔서 감사합니다! – user527179

+0

@ user527179 : 변환을 잊어 버리고 커서를 유지하고 배열을 반환합니다 : ray [cursor ++]. –