2012-09-24 7 views
2

안녕하세요 여러분, 제 CS 클래스에 대해 정말 쉬운 계산 프로그램을 작성하려고 노력하고 있습니다. 그러나 어떤 이유로 든 "다시 입력하십시오. 숫자를 입력하십시오. 0 멈추다) : "프롬프트가 나타나고 while 루프를 완전히 무시한 것처럼 보입니다. while 루프 내부의 조건이 충족되면 0을 입력해도 while 루프가 멈추지 않는 이유는 무엇입니까? 나는 과거에 C#을 해왔지만, Java의주의 사항에 대해서는 잘 알고 있지 않습니다. Java가 나에게 알려주지 않는 이상한 점이 있으면 알려주십시오. 프로그램에 대한 더 자세한 설명은 사용자로부터 음수와 양수를 읽고, 음수와 양수의 합계를 개별적으로 출력 한 다음 평균을 취하기로되어 있습니다. (당연히 아래는 단지 문제가되는 코드 조각 일뿐입니다.)while 루프가 계속되는 동안에도 루프가 계속됩니다

Scanner scanner = new Scanner(System.in); 
    double average; 
    double numPositive=0.0; 
    double numNegative=0.0; 
    double input = 0.0; 
    do 
    { 
     System.out.print("Please enter a number (0 to stop): "); 
      input = scanner.nextDouble(); 
     if (input < 0.0) 
     { 
      numNegative += scanner.nextDouble(); 

     } 
     else if (input > 0.0) 
     { 
      numPositive += scanner.nextDouble(); 

     } 

    } while (Math.abs(input) > 1.0e-6); // make the tolerance whatever you want. 
+4

한 가지 조언 : "프로그램이 논리를 따르지 않거나 논리를 구현하는 데 몇 가지 실수를 저질렀습니다"라고 생각하면 어느 시점에서 보통 후자의 대답이 적합합니다. – SJuan76

+0

우수한 조언, SJuan76. – duffymo

답변

7

처음 할당 후 input을 변경하지 마십시오. 루프는 영원히 계속됩니다. 나는 scanner.nextDouble()에게 다시 전화하는 것을 잊었다 고 생각합니다.

+1

DavisB의 답변이 더 좋습니다. 그가 또 다른'scanner.nextDouble'을 추가하면 홀수 입력 만이 루프의 제어 역할을 할 것이고 심지어 입력이 처리 될 것입니다. 이것은 다소 이상하거나 복잡 할 것입니다. – SJuan76

5

처음 검색 한 후에는 input에 들어갈 수 없습니다.

scanner.nextDouble()numNegativenumPositive에 할당되며 어느 쪽도 while 루프로 확인되지 않습니다.

while (input != 0.0) 
    { 
     System.out.print("Please enter a number (0 to stop): "); 
     input = scanner.nextDouble(); 

     if (input < 0.0) 
     { 
      numNegative += input; 

     } 
     else if (input > 0.0) 
     { 
      numPositive += input; 

     } 

    } 
+1

do/while으로 설정하십시오. – duffymo

+0

@duffymo 가십시오. 내 게시물을 편집 할 수있는 명시적인 권한이 있습니다. –

+0

허가가 필요하지 않습니다. 그것은 나를 도망친 동기입니다. – duffymo

1

루프 내 아무 곳에서나 input에 값을 할당하지 않습니다. 따라서 초기 값은 그대로 유지되고 루프는 종료되지 않습니다.

관련 문제