2013-03-12 2 views
1

나는 Objects를 포함하는 arrayList를 가지고 있습니다. 각 객체는 여러 문자열을 포함합니다. 이 문자열을 가져 와서 2 차원 배열에 추가하려고합니다.2 차원 배열에 추가하는 while 루프와 while 루프

public void iterateRow(Row row) 
{ 
    int x = 0; 
    int y = size(); 
    tableArray = new String[y][5]; 
    while(x < y){ 
     int z = 0; 
     for (String s: row.rowString()){ 
      tableArray[x][z] = s; 
      z++; 
     } 
     x++; 
    } 
} 

행 클래스에 대한 새 인스턴스를 실행하고 만들 때마다 메소드는 행에 포함 된 문자열을 배열에 추가해야합니다. 그러나 최신 항목을 x 번 복제합니다 (여기서 x는 항목의 총 개수입니다). 여기

추가 참조를 위해 행 클래스입니다 :

public class Row 
{ 
public String appNumber; 
public String name; 
public String date; 
public String fileLoc; 
public String country; 
public String elementString; 
public String results[]; 

public Row(String appNumber, String name, String date, String fileLoc, String country, Table table) 
{ 
    this.appNumber = appNumber; 
    this.name = name; 
    this.date = date; 
    this.fileLoc = fileLoc; 
    this.country = country; 
    table.addApplicant(this); 
} 

public String[] rowString() 
{ 
    String[] a = {appNumber, name, date, fileLoc, country}; 
    return a; 
}} 

나는 그것이 iterateRow() 메소드의 바보 같은 논리적 오류라고 생각하지만 난 무엇을 해결할 수없는 것. 어떤 도움을 주시면 감사하겠습니다.

편집 : 모든 사람의 도움을 받아서 while 루프를 제거했습니다. 그러나 여전히 다음 행으로 이동하기보다는 행을 복제하는 것으로 보입니까?

public void iterateRow(Row row) 
{ int x = 0; 
    int y = size(); 
    tableArray = new String[y][row.rowString().length]; 
    for(int i =0; i<y;i++){ 
    int z = 0; 
    for (String s: row.rowString()){ 
     tableArray[x][z] = s; 
     z++; 
    }x++;} 
} 
+0

'size()'는 무엇을 반환합니까? 배열'row()'에 동일한 행'rowString()'요소를 추가하고 있기 때문에. –

+0

루프를 기반으로 'row'매개 변수가 절대로 변경되지 않으므로 배열을 작성하는 소스는이 'row'에 있습니다. 나는 당신의 'for each'루프가 다음 행으로 넘어 가기를 원한다고 상상할 것입니다 ... ... 또한, while 루프는 'for'루프로 단순화 될 수 있습니다. – souldzin

+0

왜 여기에 5, tableArray = new String [y] [5]? – Machinegon

답변

1

당신이 행

은 어쩌면 당신은 다음과 같은 방법을 사용할

의 목록의 각 요소를 반복 할 것 같습니다 :, 그것을 구현하는 것이 좋을 것입니다 그러나

public void iterateRows(List<Row> rows) { 
    int cols = 5; 
    int row = 0, col = 0; 
    tableArray = new String[rows.size()][cols]; 
    for(Row row : rows) { 
     col = 0; 
     for(String c : row.rowString()) { 
      tableArray[row][col] = c; 
      col++; 
     } 
     row++: 
    } 
} 

을 5 개 이상의 열이있는 넣다 확인 자신의 오류 ...

편집

이것은 확률값입니다 ably 프로그램에 가장 좋은 디자인을 사용하는 것이 아니라 새 행을 추가 할 때 이전 행을 반복 할 필요가 없도록 변경하는 것이 좋습니다.

0

귀하의 tableArray가 호출 될 때마다 재 작성합니다 iterateRow 방법. while 루프 때문에 개체는 배열에서 y 번 복제됩니다.

iterateRow 메서드 밖에서 배열을 만들고 while 루프 (for 루프 만)를 사용하여 배열의 다음 슬롯을 채우지 않을 것으로 생각됩니다.

+0

호출 할 때마다 둘 다 수행합니다. 'tableArray = new String [y] [5]; '를 사용하여 배열을 재생성하고 while 루프는 행을 반복합니다. – rgettman

0

2 차원 배열의 크기를 행 크기에 비례하지 않도록주의하십시오. 이 흡연 총을하지 않을 수 있지만

는, while 루프에 같은 문제가 보이는

tableArray = new String[y][row.rowString().length]; 

대신

tableArray = new String[y][5]; 
+0

감사합니다. Row 클래스에 더 많은 요소가 추가 될 때 편리합니다. :) – Hoggie1790

2

의 할 것이 훨씬 안전 할 것입니다. 예를 들어, size()가 3을 반환하면 while 루프는 x = 0,1,2와 함께 실행되므로 tableArray [0], tableArray [1] 및 tableArray [2]를 할당합니다.

코드에서 while 루프를 사용하는 이유를 이해할 수 없으므로 해결책이 무엇인지 알기가 어렵습니다.

0

실용적인 목적인지 또는 IterateRow() 호출 방법인지는 모르겠지만이 작업을 수행하는 논리적 인 방법은 먼저 배열을 선언하고 IterateRow에 2 개의 인수를 추가하는 것입니다 (배열 및 currentRow). 그런 다음 iterateRow 내부에서 while 루프를 제거하면 문자열 소유권에 대한 루프 만 수행 할 수 있습니다.