목적은 한 버전에서는 작동하고 다른 버전에서는 작동하는 호환성 변경, 부작용, 버그 및 / 또는 정의되지 않은 동작에 의존하는 JVM 버전을 감지하는 Java 코드를 작성하는 것입니다. 또한 공백과 읽기 쉬운 변수 이름을 희생하지 않고도 코드를 읽을 수 있어야합니다.
이러한 목표를 보장하기 위해 정확한 공식 규칙은 다음과 같습니다.
코드는 java로 작성해야하며 실행중인 JRE 버전을 출력해야합니다.
코드는 Java 버전을 감지하기 위해 특별히 제공되거나 JDK 또는 JRE 버전을 무료로 제공하는 JDK 또는 JRE API를 사용해서는 안됩니다.
코드는 리플렉션을 사용해서는 안됩니다.
이 코드는 핫스팟 Java SE 5, 6 및 7에서만 작동하지만 다른 JVM에서는 작동 할 수 있습니다.
코드는 클래스 경로에서 타사 라이브러리를 사용해서는 안됩니다.
코드는 다른 프로세스를 시작해서는 안됩니다 (java).
코드는 환경 변수를 사용해서는 안됩니다.
코드는 기존 파일이나 폴더를 찾기 위해 파일 시스템을 검색해서는 안됩니다.
코드는 하나의 파일에 포함되어야하며,를 통해 호출 할 수
public static void main(String[] args)
또는public static void main(String... args)
.코드는 JRE에 존재하는 비공개 API를 사용해서는 안됩니다.
코드는 실행 중에 NoClassDefFoundError, NoSuchMethodError, ClassNotFoundException 또는 NoSuchMethodException을 생성하지 않아야합니다.
코드는 인터넷 또는 로컬 네트워크와 연결이 끊어진 시스템에서 실행해야합니다.
버전에서 다른 방식으로 작동하는 이유에 대한 설명을 제공해야합니다.
채점
최상의 솔루션을 측정하는 데 사용되는 방법은 max (n / s)입니다. 여기서 n은 이러한 규칙 (최소한 버전 5, 6 및 7)을 위반하지 않고 감지 된 여러 Java 버전 수이고 s는 어휘 토큰 수입니다. 솔루션에서.