2014-02-25 3 views
0

내가 그것을 반복해야 할 때 원래 나는 긴 안되게 인 ​​배열에 작성하는이 방법을 사용하고, 코드를 정돈 시도 20 배I가 시도

 if (ant.getAntNumber() == 3) 
     { 
      numbers3.add(ant.getCol()); 
      numbers3y.add(ant.getRow()); 
     } 

     if (ant.getAntNumber() == 4) 
     { 
      numbers4.add(ant.getCol()); 
      numbers4y.add(ant.getRow()); 
     } 

배열에 쓸 수 어떤 제안이 도움이 될 것입니다 그것을 할 루프를 사용하지만 나는 그것의 문자열을 생각하기 때문에 배열을

for (int j = 0; j<maxAnts; j++) 
     { 
      String str = "numbers" + j; 
      String str2 = "numbers" + j + "y"; 
      //this part doesnt work 
      str.add(ant.getCol()); 

     } 

를 사용하는 것보다, 문자열 값을 사용하여 배열에 오히려 추가하는 방법을 알아낼 질수

+0

'number3', 'number4', ...,'numberN '은 배열에 속해야합니다. – moonwave99

+0

문자열의 배열은 String []으로 선언됩니다. str = new String() [SIZE]; – ItachiUchiha

+0

ABT 배열 또는 컬렉션에 대해 이야기 하시겠습니까? – Kick

답변

1

, 당신은 실제 변수를 참조 할 String 객체의 값을 사용할 수 없습니다

List<Integer> columnList = new List<Integer>(aAnt.length); 
List<Integer> rowList = new List<Integer>(aAnt.length); 

for(Ant ant : aAnt) { 
    columnList.add(ant.getCol()); 
    rowList.add(ant.getRow()); 
} 

또는 COL/행 객체

이름. Java는 String 객체에 add이라는 객체를 호출하려고 시도하고 있다고 생각합니다.이 객체는 존재하지 않으며보고있는 컴파일러 오류를 제공합니다.

반복을 피하려면 인덱스 할 수있는 두 개의 마스터 목록에 List을 추가해야합니다.

질문에 배열을 언급하지만 add이라고 부르므로 실제로는 List을 일종의 것으로 가정한다고 가정합니다.

List<List<Integer>> numbers = new ArrayList<List<Integer>>(20); 
List<List<Integer>> numbersy = new ArrayList<List<Integer>>(20); 
// Add 20 ArrayList<Integer>s to each of the above lists in a loop here. 

그럼 당신은 ant.getAntNumber()을 경계-확인하고 마스터 목록에 인덱스로 사용할 수 있습니다.

int antNumber = ant.getAntNumber(); 
// Make sure it's within range here. 

numbers.get(antNumber).add(ant.getCol()); 
numbersy.get(antNumber).add(ant.getRow()); 
+0

그러면이 데이터를 어떻게 다시 얻을 수 있습니까? 현재 내 이전 버전 에서 이것을 사용 (INT I = 0; 나는 numbers.size을() <; 내가 ++) \t \t \t { \t \t \t \t INT X = 번호.get (i); \t \t \t \t int y = numbersy.get (i); \t \t \t \t Ant.world [x] [y]. 증가 페로몬 (2); \t \t \t} 이것은 개미가 취한 경로 등을 얻을하고 개미가 통과 한 모든 셀에 페로몬 값을 증가시키는 것이다 , 감사 목록을 채우는처럼 – Mivox

+0

는에 get''를 호출하여 마스터 목록을 사용하여 각 개미에 대한 적절한 목록을 얻은 다음 두 목록을 반복하여'x' 및'y' 값을 반환합니다. – rgettman

+0

당신이 제공 한 솔루션은 나에게 그것의 크기가 항상 0이라고 말했기 때문에 경계 밖 예외 인덱스를 제공합니다. – Mivox

1

어때?

Ant[] aAnt = new Ant[20]; 

//Fill the ant-array 

int[] aColumns = new int[aAnt.length]; 
int[] aRows = new int[aAnt.length]; 

for(int i = 0; i < aAnt.length; i++) { 
    aColumns[i] = aAnt[i].getCol(); 
    aRows[i] = aAnt[i].getRow(); 
} 

또는 목록과

:

자바에서
class Coordinate { 
    public final int yCol; 
    public final int xRow; 
    public Coordinate(int y_col, int x_row) { 
     yCol = y_col; 
     xRow = x_row; 
    } 
} 

//use it with 

List<Coordinate> coordinateList = new List<Coordinate>(aAnt.length); 
for(Ant ant : aAnt) { 
    coordinateList.add(ant.getCol(), ant.getRow()); 
} 
1

코드의 솔직 포트는 X와 Y 좌표를 저장하는 두 Map<Integer, Integer>을 사용하는 것입니다. 귀하의 코드에서 개미가 고유 한 것처럼 보입니다. 즉, 개미 당 하나의 X 및 Y 값만 저장하면됩니다. 개미마다 여러 값을 저장해야하는 경우 Map의 값 유형으로 List<Integer>을 대신 사용하십시오.

Map<Integer, Integer> numbersX = new HashMap<Integer, Integer>(); 
Map<Integer, Integer> numbersY = new HashMap<Integer, Integer>(); 

for(Ant ant : ants) { 
    int number = ant.getAntNumber();   
    numbersX.put(number, ant.getCol()); 
    numbersY.put(number, ant.getRow()); 
}