나의 1시간을 가져간 허무한 에러
static ArrayList<Product> orderArrayList;
static double getTotalPrice() {
double total = 0;
for (Product product : orderArrayList) {
total += product.getPrice();
}
return total;
}
ArrayList 안에 Product 형태의 데이터를 받는 'orderArrayList'를 하나 생성했다.
밑에 List안에 받아둔 객체들안에 double형태의 price를 가져오는 getPrice()메소드를 반복실행할 수 있게 코드를 짰다.
iterator()를 호출할 수 없다고 한다.
아직 ArrayList가 비어있어서 그런가. 근데 초기화값인 것과 null로 나오는 건 다른 개념같았다.
선언과 초기화를 동시에 해야하지 않았던 예전 모습과 비슷해서 생성자를 통해 간단히 해결했다.
static ArrayList<Product> orderArrayList; // 변경 전
static ArrayList<Product> orderArrayList = new ArrayList<>(); // 변경 후
생각해보면 당연하다. 데이터 형태만 잡아준거고, 거기에 생성자를 통해 준비된 메모리에 값을 넣어줬어야 하는 건데.
사실 저것 때문에 엄청 꼬여서 iterator부터 제네릭과 arrayList, set, map 등 자료구조를 다시 공부하게 된 고마운 계기였다.
덕분에, 객체들을 자료구조로 다룰 수 있다는 점과 생성자의 개념을 다시 직관적으로 이해할 수 있게 됐다.
아래는 자꾸 찾게되서 참고용으로 붙여두는 주요 메소드
- .add((index), val): 순서대로 리스트를 추가, 배열 사이즈 초과 시 초기 설정된 사이즈만큼 자동으로 사이즈가 증가함, 인덱스를 추가로 지정해주면 해당 인덱스에 값을 삽입
- .get(index): 해당 인덱스의 값 반환
- .set(index, val): 인덱스로 값 변경
- .indexOf(val): 값을 제공하면 해당 값의 첫번째 인덱스를 반환
- .lastindexOf(val): 해당 값의 마지막 인덱스 반환
- .remove(index or val): 해당 인덱스의 값 or 해당 값 중 첫번째 값 삭제
- .contains(val): 해당 값이 배열에 있는지 검색해서 true / false 반환
- .containsAll(val1, val2...): argument로 제공한 컬렉션의 모든 값이 포함되어 있는지 여부를 true / false로 반환
- .toArray(): ArrayList 타입의 인스턴스를 일반 배열 타입으로 반환, 저장할 배열 타입에 맞춰 자동 형변환, 배열 크기 또한 자동으로 맞춰서 바꿔줌
- .clear(): 값 모두 삭제
- .isEmpty(): 비었으면 true, 하나라도 값이 있으면 false 반환
- .addAll(arr2): 두 컬렉션을 합침
- .retainAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값을 제외하고 모두 지워줌
- .removeAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값과 일치하는 값을 모두 지워줌, retainAll() 메소드와 반대
- .size(): 요소 개수 반환
'Back-End > Java' 카테고리의 다른 글
TIL 230602 : 튜터님의 코드와 비교해보는 코드리뷰 (키오스크 주문 프로그램) (0) | 2023.06.04 |
---|---|
TIL 230601 : ArrayList와 함께한 오늘의 삽질들. (0) | 2023.06.01 |
TIL 230530 : 키오스크처럼 쉬워보이는 거 특 : 개발하려하면 어려움 (feat. static하게) (0) | 2023.05.30 |
TIL 230525 : @오버라이드 super. this. (2) | 2023.05.25 |
TIL 230524 : 캡슐화..? (접근제어자, getter, setter, 유지보수..) (0) | 2023.05.24 |