2014-02-08 2 views
-2

이 루프가 작동하는 데 도움이 필요합니다. 루프 또는 if 문을 사용하는 방법을 알지 못하기 때문일 수 있습니다. 하지만 내가 정말 결코 없기 때문에 그건 내 문제가 될 수도 있도록 루프를 사용하는 방법을 모르는 나는 그것이 10Java 루프 :이 루프가 예상대로 멈추지 않는 이유는 무엇입니까?

import java.util.Scanner; 

public class Foothill { 
    public static void main(String args[]){ 
     Scanner scanner = new Scanner(System.in); 
     int numPurchases, totalPurchased; 
     boolean correct; 
     String menu; 
     numPurchases = 0; 
     totalPurchased = 0; 
     correct = false; 
     while(!correct) 
     { 
      System.out.println("Menu:"); 
      System.out.println(" P (Process Purchase)"); 
      System.out.println(" S (Shut down)"); 
      menu = scanner.nextLine(); 
      if (menu.charAt(0)=='S' || menu.charAt(0)=='s'){ 
       System.exit(0); 
      } else if (menu.charAt(0)=='P' || menu.charAt(0)=='p'){ 
       continue; 
      } 
      System.out.println("Your choice: " + menu.charAt(0)); 
      System.out.println("How many yougurts would you like to buy?"); 
      numPurchases = scanner.nextInt(); 
      totalPurchased += numPurchases; 
      if (totalPurchased > 0 || totalPurchased < 10){ 
       System.out.println("you have purchased " + totalPurchased + " yogurts"); 
      } else if (totalPurchased >= 10){ 
       System.out.println("Congradulations you have recieve a free Yogurt"); 
       System.out.println("Remainding yogurt credits: " + (totalPurchased-10)); 
      } 
     } 
    } 
} 

후 무료로 요구르트를 수신에 올 때 만약 문을 사용하는 데 필요한 생각 거짓과 진실이

+8

제목 사람이 익사 제안 .. –

+0

'while (! correct)'를 확인 했습니까? –

+2

'if (totalPurchased> 0 || totalPurchased <10) {'- 모든 숫자가 0보다 크거나 10보다 작습니다. '&&'를 원합니다. – user2357112

답변

0

그냥 다음 문을 제거하여 루프를 만든 다음 루프가 작동합니다

else if (menu.charAt(0)=='P' || menu.charAt(0)=='p'){ 
       continue; 
      } 
0

당신은 당신의 코드와 함께 많은 문제가 있었다. 당신은 아마 true에 올바른 설정하여 while 루프의 탈옥 할 수있는 방법이 필요합니다,

import java.util.Scanner; 

public class Foothill { 
    public static void main(String args[]){ 
      Scanner scanner = new Scanner(System.in); 
      int numPurchases, totalPurchased; 
      boolean correct; 
      String menu; 
      numPurchases = 0; 
      totalPurchased = 0; 
      correct = false; 
      while(!correct){ 
       System.out.println("Menu:"); 
       System.out.println(" P (Process Purchase)"); 
       System.out.println(" S (Shut down)"); 
       menu = scanner.next(); 
       if (menu.charAt(0)=='S' || menu.charAt(0)=='s'){ 
       System.exit(0); 
       } 
       else if (menu.charAt(0)=='P' || menu.charAt(0)=='p'){ 
        System.out.println("Your choice: " + menu.charAt(0)); 
        System.out.println("How many yougurts would you like to buy?"); 
        numPurchases = scanner.nextInt(); 
        totalPurchased += numPurchases; 
       } 

       if (totalPurchased > 0 && totalPurchased < 10){ 
       System.out.println("you have purchased " + totalPurchased + " yogurts"); 
       } 
       else if (totalPurchased >= 10){ 
       System.out.println("Congradulations you have recieve a free Yogurt"); 
       System.out.println("Remainding yogurt credits: " + (totalPurchased-10)); 

       } 
      } 
      scanner.close(); 
     } 
    } 

처럼 위에서 언급 한 : 다음은 솔루션입니다.

+0

아, 자원 누출을 막기 위해 스캐너를 닫아야합니다. 또 다른 요점은, 당신의 코드가 잘못된 입력을 검사하지 않는다는 것입니다 ... –

0

user2357112은 의견에 언급 한 바와 같이 어떤 숫자에 대해서도 해당 조건이 적용되므로 숫자가 주어진 범위에있는 경우 테스트에 적합하지 않습니다.

대신 &&을 사용하도록 조건을 변경할 수는 있지만 특정 조건에서만 메시지를 표시하는 이유가 무엇인지 알 수 없습니다. 각 구매가 끝날 때이를 인쇄 한 다음 사용자가 공짜 물건을받은 경우 여분의 메시지를 인쇄 할 수 있습니다.

System.out.println("you have purchased " + totalPurchased + " yogurts"); 

if (totalPurchased >= 10){ 
    System.out.println("Congradulations you have recieve a free Yogurt"); 
    System.out.println("Remainding yogurt credits: " + (totalPurchased-10)); 
} 

당신은 알 필요가 사용자의 입력에서 Scanner#nextInt()does NOT consume the trailing new-line character 그. 그러나 Scanner#nextLine()은이 문자를 읽기 입력에서 잘라냅니다. 결과적으로 메뉴에서 사용자가 선택한 Scanner#nextLine()을 읽으면 후행 줄 바꿈 문자를 먹어 버리고 프로그램은 빈 줄의 첫 번째 문자를 가져 오려고하기 때문에 구입 후 StringIndexOutOfBoundsException을 얻게됩니다. 링크 된 스레드에 명시된 바와 같이

당신과 같이 버퍼에서 개행 문자를 제거하는 정수 입력을 읽은 후 다시 Scanner#nextLine()를 호출하여이 문제를 해결할 수 있습니다 게시물의

numPurchases = scanner.nextInt(); 
scanner.nextLine(); 
+0

정말 도움을 주셔서 감사합니다. – mwaymouth

관련 문제