2011-12-08 7 views
0

과일이 들어있는 벡터가 있습니다. 나는 드로잉 캔버스에 여러 종류의 과일을 넣을 수있다. 두 개의 겹치는 과일이있는 경우 과일을 선택하면 과일을 키울 수 있기를 원합니다. 마치 다른 과일 위에있는 것처럼 보입니다.벡터에서 요소의 순서를 변경하는 방법은 무엇입니까?

기본 아이디어는 jbutton을 누른 후 호출되는 raiseFruit()을 사용하는 것입니다. 선택된 과일과 동일한 임시 변수 세트를 만든 다음 과일을 (a + 1)과 동일하게 설정하려고합니다. 그래서 벡터의 다음 위치에 놓습니다. 그리고 나서이 변수를 임시 변수로 설정합니다. 나는 이것이 올바른 생각이라고 생각하니?

public void raiseFruit() { //raisefruit button 
    if (_fruitIsSelected==true) { 
     for (int i=0; i<_storedFruit.size() - 1; i++) { 
      FunFruit a = _storedFruit.get(i); 
      FunFruit b = _storedFruit.get(i + 1); 
      if (_storedFruit.get(i+1)!=null) { 
       FunFruit temp = a; 
       _storedFruit.get(i) = _storedFruit.get(i+1); 
       a=b; 
       b = temp; 
       //_storedShapes.setElementAt(_storedShapes.get(i+1), i); 
       //_storedShapes.setElementAt(_currentShape, i+1); 
       repaint(); 
      } 
     } 
    } 
} 

내가했던 setElementAt를 사용하여 시도하고 그것이 작동하지만, 그때 누르면 "raisefruit"다시 그냥 완전히 사라 그것의 앞에 요소를 만들 것입니다. 방금 앞에서 요소를 계속 만드는 부분에 주석을 달아서 사라지는 코드를 게시했습니다. "a = b"대신 변수 b의 벡터에서 whats와 동일한 변수 a에 벡터의 내용을 설정하려고합니다. "왼손잡이는 변수 여야합니다."라는 오류가 계속 발생합니다. 왜냐하면 나는 단지 =를 설정하는 것이 포인터를 변경한다는 것을 알고 있기 때문입니다. 나는 과일 요소를 앞에 놓지 않고 벡터 내부에서 그것을 실제로 어떻게 바꾸는 지 알지 못한다.

+0

그냥 궁금해서 온도,에 할당하는 대신 목록에서 요소를 설정하는

_fruits.setElementAt(fruit, index); 

를 사용 '벡터'를 사용합니까? 지나치게 오래된 자바 서적/자습서를 읽고 있지 않습니까? '벡터'는 10 년 이래로 레거시/구식 클래스로 간주됩니다. – BalusC

+0

벡터가 쓸모없는 클래스로 간주되는 이유는 무엇입니까? 나는 AP 컴퓨터 과학 수업에서 고등학교 때 그들을 사용하는 방법을 배웠습니다. – Susie

+0

벡터는 확실히 쓸모가 없습니다. 그것들의 유용성은 ArrayList 나 Collections 클래스에서 얻은 객체만큼 뛰어나지 만 여전히 다른 유사한 클래스에서는 사용할 수없는 기능을 가지고 있습니다. – Crollster

답변

1

목록 대신 임시 변수를 다시 지정합니다.

_fruits.get(_currentSelectedFruit + 1) = temp; 

하는 당신은 단지 수에 의해 반환 된 포인터를 복용하고 배울 않았다

관련 문제