2016-10-28 3 views
4

나는 그것이 모두이 있는지 확인하려면 사용자의 입력을받을 :다중 입력 유효성 통합 자바

  • 최소 값보다
  • 더는

내가 다음 코드를 쓴 수 이것을 달성하기 위해서는 그것이 있어야하는 것보다 더 복잡하게 보입니다. 질문을 통합 할 수있는 방법은 입력 번호이며 그 숫자는 또는 이와 유사한 두 부분 유효성 검증보다 적은 숫자입니까?

// function prompts user for a double greater than number passed in 
// continues to prompt user until they input a number greater than 
// the minimum number 
public static double getInput(double minimumInput) { 
    Scanner scan = new Scanner(System.in); 
    double userInput; 

    System.out.print("Enter a number greater than " + minimumInput + ": "); 
    while (!scan.hasNextDouble()){ 
     String garbage = scan.next(); 
     System.out.println("\nInvalid input.\n"); 
     System.out.print("Enter a number greater than " + minimumInput + ": "); 
    } // end while 

    userInput = scan.nextDouble(); 

    while (userInput <= minimumInput) { 
     System.out.println("\nInvalid input.\n"); 
     userInput = getInput(minimumInput); 
    } 

    return userInput; 
} // end getInput 

답변

2

간단한 대답 : 없다.

사용자 입력 내용을 볼 수 있습니다. "nextDouble()"메서드를 사용하지 않을 경우 코드에서 문자열을 숫자로 변환해야 할 수도 있습니다. 그러나 자바에서 말하는 방법이 없습니다 :이 것은 double, 입니다. 다른 값보다 작아야합니다.

명시 적으로 제약 조건을 코드에 "넣어야"합니다. 그리고 지금 당장 가지고있는 코드는 그 관점에서 좋습니다. 나는 모든 테스트를 단일 if 조건으로 채우려는 다른 대답 내의 제안보다 낫다고 생각합니다.

좋은 코드를 읽고 쉽게 이해할 수 있습니다. 물론 "적은 코드"를 자주 읽는 것이 더 빠르지 만 때로는 "더 많은"코드가 짧은 버전보다 훨씬 빨리 이해할 수 있습니다!

+0

너무 많이 있기 때문에 제가 답변의 마지막 부분을 제거하는 것이 좋습니다 지식의 수준에있는 사람을위한 정보. – talex

+0

그랬습니까; 그의 질문의 "스타일"측면에 더 집중했다. 유효한 제안, 감사합니다! – GhostCat

+0

의견에 감사드립니다. –

0

|| 짧은 circut OR 연산자는 다음과 같이 모두 검증을 통합하기 :

public static double getInput(double minimumInput) { 
      Scanner scan = new Scanner(System.in); 
      double userInput =0; 
      System.out.print("Enter a number greater than " + minimumInput + ": "); 
      //Combine two vlidations using || operator 
      while (!scan.hasNextDouble() || ((userInput=scan.nextDouble()) < minimumInput)){ 
       System.out.println("\nInvalid input.\n"); 
       System.out.print("Enter a number greater than " + minimumInput + ": "); 
      } // end while 
      return userInput; 
     } // end getInput 

아래 연산자에 대한 자세한 내용은 아래 링크를 참조하시기 바랍니다 : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

+0

이것이 잘못된 방향으로 가고 있다고 생각합니다. 좋은 코딩 스타일은 약 ** 가독성 **입니다. 따라서 : 이해하기 쉬운 * 조건. 놀랍게도, NOT과 OR을 사용하는 if와 메소드 호출은 <이해하기 쉽지 않습니다 ** **. – GhostCat

+0

피드백을 주셔서 감사합니다, 이것은 내가 찾던 _idea_입니다. 그러나 코드에 오류가 있습니다. minimumInput보다 작은 숫자를 입력하면 잘 작동하지만 매개 변수! scan.hasNextDouble이 false로 평가되고 스캐너를 "지우지"않기 때문에 코드를 입력하면 코드가 무한 루프가됩니다. 설명 할 수 있는지 확실하지 않습니다. 그 오른쪽). 그 문제를 해결하는 방법에 대한 아이디어가 있습니까? –