2016-11-01 3 views
-5

사용자에게 입력을 요청하고 모든 사례의 모든 내용을 읽은 다음 output.displayMainMenu();에 다시 루프하여 4를 입력 할 때까지 반복합니다. 프로그램을 종료하십시오.자바 프로그래밍이 while 문을 루프로 가져오다

output.displayMainMenu(); 
int entry = keyboard.nextInt(); 
while(entry >= 1 || entry <=4) { 
    output.displayMainMenu(); 
    switch(entry) { 
     case 1: 
      output.displayStockChoices(portfolio); 
      portfolio.editPostion(); 
      portfolio.displayPositions(); 
      break; 
     case 2: 
      portfolio.updateCurrentPrice(); 
      break; 
     case 3: 
      System.out.print(investor.toString() + "Account Balance: " +portfolio.calcTotalAccountValue()); 
      break; 
     case 4: 
      System.out.print("Done."); 
      break; 
     default: 
      System.out.print("please enter 1-4!"); 
    } 
    break; 
}  
+0

여기 엔 무한 루프가있을 것입니다. 왜냐하면'entry'는 결코 루프에서 재 할당되지 않기 때문입니다. – Makoto

+2

|| 논리 OR이므로 두 조건 중 하나가 항상 참입니다. &&는 논리적 AND이며 찾고있는 것입니다. –

+5

스위치 외부에 '휴식;'이 있습니다. 이것은 루프에서 벗어납니다. 하지만 while 루프 조건과 사용자 입력을 얻는 것과 같은 몇 가지 문제가 있습니다. – AntonH

답변

0

루프 내부의 코드가 적어도 한 번 실행되어야하므로 do-while 루프를 사용하는 것이 좋습니다. 나는이 코드의 몇 가지 이슈 인 @AntonH에 동의한다. 언급 된 문제를 고려하여 다시 작성했습니다.

int entry = 0; 
do { 
    output.displayMainMenu(); 
    try { 
     entry = keyboard.nextInt(); 
    } catch (InputMismatchException e) { 
     System.out.print("Invalid input. "); 
    } 

    switch (entry) { 
     case 1: 
      output.displayStockChoices(portfolio); 
      portfolio.editPosition(); 
      portfolio.displayPositions(); 
      break; 
     case 2: 
      portfolio.updateCurrentPrice(); 
      break; 
     case 3: 
      System.out.print(investor.toString() + "Account Balance: " 
        + portfolio.calcTotalAccountValue()); 
      break; 
     case 4: 
      System.out.print("Done."); 
      break; 
     default: 
      System.out.print("please enter 1-4!"); 
    } 

} while (entry >= 1 && entry < 4); 
// Don't forget to close Scanner object when program finish 
keyboard.close(); 
관련 문제