2014-10-28 1 views
2

나는 자바에서 루프를 사용하여 연습하고 중복 나는 다른 고객이있는 경우 사용자 입력이왜 내 자바이다에 대한// else 문의 출력은

    경우 지속적으로 요청이있는 경우/다른 루프를 만든 경우
  • "Yes" 고객 요청서를 요구합니다.
  • "No" 나는 그 법안을 작성하려고한다. (아직 그 코드를 작성하지 않았으므로 그 부분을 무시한다.)

문제는 제가 처음 청구서 금액을 입력 한 후 코드에서 다른 고객이 있어야하는지 묻고 나서 청구서 금액을 조기에 묻고 다른 고객에게 두 번째 질문이 있는지 묻습니다. ?

내 주요 질문은, 내가 잘못 했습니까? 루프를 두 번 및/또는 조기에 출력하지 않도록하려면 어떻게해야합니까?

Scanner input = new Scanner(System.in); 
double total; 

System.out.println("Please enter your bill amount."); 
double bill0 = input.nextDouble(); 

for(int c = 0; c > -1; c++) { 
    System.out.println("Is there another customer?"); 
    String customer = input.nextLine(); 

    if (customer.equalsIgnoreCase("Yes")) { 
     System.out.println("Please enter their bill."); 
     double bill = input.nextDouble(); 
    } else { 
     System.out.println("Okay, let's total your bill amount."); 
    } 
} 
+2

루프에서 if-else-statement를 사용하더라도 ** for 루프 **입니다. * if 루프와 같은 것은 없습니다. * – ifloop

+1

@ifLoop : 아픈 참조 형입니다. * @ DJM4 : "while-loop"라고 부름 * –

답변

6
for(int c = 0; c > -1; c++) 

이 루프 (기본적으로) C는 항상 -1보다 큰 것으로 영원히 실행됩니다. (실제로이 루프는 c의 값이 너무 커서이 정수에 할당 된 사용 가능한 저장 공간에 맞지 않을 때까지 실행됩니다. 자세한 내용은 여기를 참조하십시오. http://en.wikipedia.org/wiki/Integer_overflow)

더 깨끗한 구조 다음과 같이하면됩니다 :

String answer = "Yes"; 
while (answer.equals("Yes")) 
{ 
    System.out.println("Please enter your bill amount."); 
    double bill0 = input.nextDouble(); 

    System.out.println("Is there another customer? (Yes or No)"); 
    answer = input.nextLine();  
} 

물론 사용자가 예상치 못한 입력을 입력하면 오류 처리를 추가해야합니다. 또한, 이것은 실제 구현보다 더 많은 의사 코드입니다.

이 후 루프는 금액을 합산하려는 경우입니다. 또한 while 루프에서는 총계를 유지하는 변수가 필요할 수 있습니다. 선 후

total += bill0; 

: 같은 뭔가

double bill0 = input.nextDouble(); 

트릭을 할 수 있습니다.

+0

"이 루프는 항상 -1보다 큰 C로 영원히 돌아갑니다."이 루프가 2,147,483,647 + 2,147,483,647 번 실행되어야한다는 점에 의문의 여지가 있습니다. ? –

+0

문자 그대로 받아들이지 마십시오. Point는 사용자가 의도 한 것이 아니며 사용법에서 무한 루프로 분류 될 수 있습니다. –

+0

그래,하지만 일부 사용자가 실제로 무한 루프로 걸릴 가능성이 있기 때문에 대답을 편집해야합니다. –

0

Matt Jones는 정확합니다. 루프는 (기본적으로) 영원히 계속 실행됩니다. (오버플로는 실제로는 영원히 실행되지 않지만 충분히 가깝습니다.)

사용자가 "아니오"라고 입력하면 루프가 중단되는 것처럼 보입니다. 즉, 얼마나 많은 반복이 필요한지 알지 못하기 때문에 while 루프는 for 루프보다이 작업에 더 적합합니다. 자 이제 while 루프를 사용하여 해보겠습니다. 스캐너 입력이 수행되면

Scanner input = new Scanner(System.in); 
double total; 

System.out.println("Please enter your bill amount."); 
double bill0 = input.nextDouble(); 

//loop until the user enters the phrase "No". 
while(true) { 
    System.out.println("Is there another customer?"); 
    String customer = input.nextLine(); 

    if (customer.equalsIgnoreCase("Yes")) { 
     System.out.println("Please enter their bill."); 
     double bill = input.nextDouble(); 
    } else if(customer.equalsIgnoreCase("No") { 
     System.out.println("Okay, let's total your bill amount."); 
     break; //End the loop 
    } else{ 
     System.out.println("Sorry, unrecognized input. Please enter yes or no."); 
    } 
} 
//Do post-loop totaling and stuff. 
0

나는 "예"더 이상, 그것은 다른

for 루프가 더 무언가를 동일 while을 종료 할 것 아닌 while 루프를

while (scannerInput.equals("yes")) 
     //do your thing 
    } 

을 사용 상태 변경을 기다리는 while 대신 일련의 데이터를 반복 할 수 있습니다.

0
Scanner input = new Scanner(System.in); 
double total; 

System.out.println("Please enter your bill amount."); 
double bill0 = input.nextDouble(); 

System.out.println("Is there another customer?"); 

while((String customer = input.nextLine()).equalsIgnoreCase("Yes")) { 

    System.out.println("Please enter their bill."); 
    double bill = input.nextDouble(); 

} 

System.out.println("Okay, let's total your bill amount."); 
관련 문제