2012-04-18 5 views
1

재미있는 ICPC 프로그래밍 문제가 있습니다.이 프로그램은 Collatz입니다. 예상 출력에 정확하게 맞는 출력을 얻었습니다. 그러나 나는 원하는대로 -1 -1 입력에 관해서는 프로그램을 끝내는 데 어려움을 겪어왔다.프로그램 종료 -1 -1 입력이 작동하지 않음

샘플 입력

3 100 
34 100 
75 250 
27 2147483647 
101 304 
101 303 
-1 -1 

예상 출력

Case 1: A = 3, limit = 100, number of terms = 8 

Case 2: A = 34, limit = 100, number of terms = 14 

Case 3: A = 75, limit = 250, number of terms = 3 

Case 4: A = 27, limit = 2147483647, number of terms = 112 

Case 5: A = 101, limit = 304, number of terms = 26 

Case 6: A = 101, limit = 303, number of terms = 1 

자바 코드

import java.util.Scanner; 
import java.lang.Integer; 

public class Collatz { 
    private static int caseNumber = 0; 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     while(in.hasNext()) { 
      caseNumber++; 
      int a = in.nextInt(); 
      Integer limit = in.nextInt(); 
      if(a == -1 && limit == -1) 
       break; 
      int numberOfTerms = 0; 
      for(Integer value = a; value != 1; numberOfTerms++){ 
       if(value%2 == 0){ 
        value /= 2; 
       }else{ 
        value = 3 * value + 1; 
       } 
       if(limit < value) 
        break; 
      } 
      numberOfTerms +=1; 
      System.out.println("Case " + caseNumber + ": A = " + a + ", limit = " 
        + limit + ", number of terms = " + numberOfTerms); 
      System.out.println(); 

     } 
    } 
} 
+1

저에게 맞습니다. – Aito

+0

실제 출력물을 게시 할 수 있습니까? 그렇다면 우리는 어디에 갇혀 있을지 짐작할 수 있습니다. – mawia

+0

이것은 실제로 나에게 정확한 출력을주고있다. 문제는 프로그램이 종료되지 않는다는 것이다. – Alex

답변

0

, 그것을 이클립스의 코드 (3.7.2)을 실행하고 콘솔 창에 값을 입력 잘 실행되고 예상대로 종료됩니다. 종료되지 않은 프로그램에 대한

가능한 원인 (즉 '-1'두 번 입력 할 때) :

  1. 스캐너는 시스템의 디폴트 캐릭터 세트에 따라 바이트를 문자로 변환합니다. 시스템 문자 세트가 '-1'을 예상 값이 아닌 다른 것으로 변환되게 할 수 있습니까?

  2. '-1'값을 입력하는 방식으로 입력 스트림에 후행 문자가 추가되어 스캐너가 -1 이외의 값을 읽게 할 수 있습니까?

in.nextInt() 호출 후에 print 문을 추가하여 생성되는 값을 확인하십시오.

관련 문제