while 루프가 반복 될 때마다 예외 처리가 수행됩니다. 어떤 이유로 예외를 throw하는 조건이 true이면 예외 메시지가 표시되지만 프로그램은 중단없이 계속 실행됩니다. 전에는 이런 일이 일어난 것을 본 적이 없으며 while 루프 때문인 것으로 의심됩니다. 나는 반드시 내 큐에서 null 객체의 존재에 대한 모든 반복을 확인해야합니다. Another thread suggested using a try clause, try 절을 사용하도록 코드를 변경했지만 여전히 동일한 문제가 발생합니다. 예외가 발생하지만 프로그램이 중단되지 않습니다. 이 원인은 무엇입니까?Java : throwing exception 후에 프로그램이 중단되지 않습니다.
Purchase ownedShares;
while (numSharesToSell > 0) {
try {
ownedShares = q.peek();
}
catch(NullPointerException ex) {
throw new IllegalArgumentException("Not enough shares");
}
EDIT 2
저작물 않는 IsEmpty 함수()를 사용 :
Purchase ownedShares;
while (numSharesToSell > 0) {
if (q.isEmpty())
throw new IllegalArgumentException("Not enough shares");
else
ownedShares = q.peek();
// try {
여기서 코어 오류 예외가 실행되지 않는 것이 없다. 현재 실행 중이며 "공유가 충분하지 않습니다"라는 메시지가 인쇄됩니다. 문제가 발생하면 프로그램이 중단되지 않습니다. 외부 루프가 계속됩니다.
편집 3 :
내가 프로그램을 충돌에서 내가 던져 오류를 방지하는 try/catch 블록에 싸여 수정하고 메서드 호출. 이로 인해이 코드의 스켈레톤 클래스를 준 사람이 예외로 인해 프로그램을 중단시키지 않기를 바랍니다.
'numSharesToSell'이 0보다 큰 경우'numSharesToSell'을 업데이트 한 부분을 생략하지 않는 한 무한 루프가있는 것처럼 보입니다. – nem035
@nem - 부정확합니다. 'q'가 null이고'q'가 비어있는 것은 두 가지 다른 것들입니다. 'q'가 비어 있다면이 라인은 NPE를 던지지 않을 것이고'ownedshares'는 단지 null이 될 것입니다. 'q'가 null의 경우에만, NPE가 슬로우됩니다. – drewmoore
@drewmoore 나는 그 사람을 오해하고, 덧글 – nem035