while(true) { //★ 구매하기 시도 후 올바른 값을 입력 할때 까지 다시 상품번호 입력
System.out.println("======[구매가능 상품목록]======");
printList(data);
System.out.println("구매 하실 상품 번호를 입력 하세요 : ");
try {
num=sc.nextInt();
}
catch(InputMismatchException e) { //★유효성검사 : 사용자의 입력값이 올바른 값 인지 확인
System.out.println("올바른 입력값이 아닙니다");
sc.nextLine(); //버퍼 제거
continue;
}
boolean flag = false;
for(int i=0;i<data.size();i++) {
if(num == data.get(i).getNum()) {
System.out.println("구매 하실 개수를 입력 하세요 : ");
cnt=sc.nextInt();
System.out.println("'"+data.get(i).getName()+"'을(를) "
+cnt+"개 선택 하셨습니다. ");
data.get(i).sell(cnt);
flag=true;
}
}
if(!flag) {
System.out.println(num+"번은 없는 상품번호 입니다");
continue;
}
break;
}
flag 는 보통 초기화 false로 함
boolean flag = true; //초기화 false 로 하면
for(int i=0;i<data.size();i++) {
if(num == data.get(i).getNum()) {//이건 되고???
System.out.println("구매 하실 개수를 입력 하세요 : ");
cnt=sc.nextInt();
System.out.println("'"+data.get(i).getName()+"'을(를) "
+cnt+"개 선택 하셨습니다. ");
data.get(i).sell(cnt);
flag=true;
break;
} else flag = false; //필요 없음
}
if(!flag) {
System.out.println(num+"번은 없는 상품번호 입니다");
continue;
}
0~리스트길이 끝 까지 반복문으로 돌면서 다 검사하면 1개만 맞고 나머지는 다 틀리니까 else flag = false는 무조건 한번 나오게 됨