2013-04-16 2 views
0

나는 아래의 문제에 대한 추가 신용 질문을 이해하지 않습니다. 이미 try-catch 문을 구현했으며 잘 작동하는 것처럼 보입니다.하지만 강사는 변수를 데이터! = 0 대신 루프 조건에서 사용하기를 원합니다. 나는 짐작하고있다 :Java 프로그램이 아닌 대신 부울을 구현하는 (!)

while(data!=0.0) 

그러나 그것은 어떻게 작동 할까? 방금 전 완전히 없애고 이미 만든 boolean을 사용합니까? P.S .: 나는 이것이 매우 간단하고 단지 그것을 보지 않고있을 수도 있다는 것을 깨닫는다.

import java.util.*; 

public class SumInput { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     double data = 1.0; 
     double sum = 0.0; 
     boolean valid = false; 
     while (!valid) { 
      try { 
       while (data != 0.0) { 
        System.out.print("So far, sum = " + sum 
         + "\nEnter a number or 0 to exit: "); 
        data = input.nextDouble(); 
        sum = sum + data; 
        valid = true; 
       } 
      } catch (InputMismatchException e) { 
       System.out.println("Error--please enter a double number"); 
       input.next(); 
      } catch (NoSuchElementException e) { 
       System.out.println("\nGoodbye!"); 
       System.exit(0); 
      } 
     } 
     System.out.println("Ending sum: " + sum); 
    } 
} 

답변

2

강사가 예상 한대로 (data! = 0.0) 대신 부울을 사용하도록 프로그램을 업데이트했습니다. 아래 프로그램을 찾으십시오.

import java.util.*; 

public class SumInput { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     double data = 1.0; 
     double sum = 0.0; 
     boolean valid = false; 
     while (!valid) { 
      try { 
       while (true) { 
        System.out.print("So far, sum = " + sum 
          + "\nEnter a number or 0 to exit: "); 
        data = input.nextDouble(); 
        sum = sum + data; 
        valid = true; 
        if (data == 0.0) { 
         break; 
        } 
       } 
      } catch (InputMismatchException e) { 
       System.out.println("Error--please enter a double number"); 
       input.next(); 
      } catch (NoSuchElementException e) { 
       System.out.println("\nGoodbye!"); 
       System.exit(0); 
      } 
     } 
     System.out.println("Ending sum: " + sum); 
    } 
} 

희망 사항은 귀하의 문제를 해결하기 바랍니다!

+0

감사합니다! break가있는 if 문을 구현할 때 완전히 블랭크됩니다. 완벽한, 다시 한 번 감사드립니다. – user2268839

+0

@ user2268839 환영 ... – Ganesh

+0

물론 이것은 같은 일을하는 더 긴 방법입니다. –

1

나는 그가

So far, sum = 0.0 
Enter 'exit' to exit: 122 
So far, sum = 122.0 
Enter 'exit' to exit: 232.2 
So far, sum = 354.2 
Enter 'exit' to exit: 322 
So far, sum = 676.2 
Enter 'exit' to exit: exit 
Ending sum: 676.2 

이 0.0 마지막 값이 아닌 어디 값을 요약 할 수 있습니다로 깨끗하고 안전합니다 같은

public class SumInput { 
    public static void main(String... ignored) { 
     Scanner input = new Scanner(System.in); 
     double sum = 0.0; 
     while (true) { 
      System.out.println("So far, sum = " + sum); 
      System.out.print("Enter 'exit' to exit: "); 
      if (!input.hasNextDouble()) 
       break; 
      sum += input.nextDouble(); 
     } 
     System.out.println("Ending sum: " + sum); 
    } 
} 

실행을 원하는 상상한다.

이 루프를 사용하면 현재 가지고있는 많은 코드를 제거 할 수 있습니다.

+0

0은 사용자가 통과 한 중지로 사용됩니다. –

0
boolean valid = true; 
while (valid) { 
    if((data =input.nextDouble()) != 0.0) 
     valid = true; 
    else 
     valid = false; 

// perform your calculation. 
} 
0

특히 논리적 (정지) 조건으로 이중을 사용하지 마십시오. 특히 == 또는 !=으로 사용하지 마십시오.

코드에서 한 가지 문제는 특히이 계산을 수행 할 때 두 자리로 표현되는 data == 0.0이 매우 어렵다는 것입니다. 이것은 representation error

을 사용할 때 중지 조건으로 사용자 출력에서 ​​제거하고 루프를 종료하는 유일한 방법은 Enter 키로 남겨 둡니다.

+0

"double"을 초기 종료 조건으로 사용하는 것이 일반적으로 잘못된 것은 아닙니다. 만약 검출 된 동등성이 후속 루프 패스가 이전 것과 동일한 계산을 수행 할 것이라는 것을 암시한다면, "거짓으로"발견 된 불평등이 악영향을 미치지 않는다면 컴퓨터가 피할 수있는 다소 허용 할만한 추가 작업을 수행 할 것을 요구하는 것 이상의 것입니다. – supercat

+0

만약 당신이 바로 다음 예제는 문제가되지 않을거야. http://ideone.com/lKzt2z –

+0

예를 들어 초기 출구 조건보다는 "단독"종료 조건으로 '이중'평등을 사용하는 것처럼 보입니다. 보다 나은 시나리오는'double compute (double init, double param, int reps) {do {double prev = init; init = f (init, param); if (next == init) break; } while (- reps> 0); return init;}'. 'f()'가 부작용이없고 +0.0과 -0.0 사이의 구별을 신경 쓰지 않는다면, 출력과 입력이 한 번 일치하면 반복 호출은 똑같은 결과를 낳을뿐 아니라 건너 뛸 수도 있습니다. 'f()'의 특성에 따라 ... – supercat

관련 문제