2009-07-24 3 views
0

이것은 구형 온라인 판사 palin problem의 해결책입니다. 그것은 Netbeans에서 잘 실행되지만 판사는 RuntimeError를주는 답을 거부합니다. JCreator에서 시도해 보았습니다.왜이 프로그램은 jcreator에서 런타임 오류를 제공하지만 netbeans에서는 그렇지 못합니까?

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
    at java.lang.Integer.parseInt(Integer.java:468) 
    at java.lang.Integer.parseInt(Integer.java:497) 
    at Main.main(Main.java:73) 

구문 분석을 위해 빈 문자열을 전달하지 않습니다. 이유가 무엇입니까?

코드 :

import java.io.*; 
import java.util.*; 



class Main { 

    public static int firstPalinLargerThanNum(int num){ 

     int foundPalin =0; 

     int evalThisNum = ++num; 

     while (true){ 


     if (isPalin(evalThisNum)) 


      break; 

     evalThisNum++; 
     } 

     foundPalin = evalThisNum; 
     return foundPalin; 

    } 

    public static boolean isPalin(int evalThisNum){ 

      boolean isItPalin = false; 

      int dig=0; 
      int rev=0; 


      int n = evalThisNum; 

      while (evalThisNum > 0) 
      { 

      dig = evalThisNum % 10; 
      rev = rev * 10 + dig; 
      evalThisNum = evalThisNum/10; 

      } 

      if (n == rev) { 

       isItPalin=true; 
      } 

      return isItPalin; 

    } 


    public static void main(String args[]) throws java.lang.Exception{ 

     BufferedReader r1 = new BufferedReader(new InputStreamReader(System.in)); 

     /*BufferedReader r1 = new BufferedReader (new FileReader(new File ("C:\\Documents and Settings\\Administrator\\My Documents\\NetBeansProjects\\Sphere\\src\\sphere\\sphere\\PALIN_INPUT.txt")));*/ 

     String read = r1.readLine(); 

     int numberOfTestCases = Integer.parseInt(read); 

     for (int i=0; i<numberOfTestCases;i++){ 

     read = r1.readLine(); 

     if (read!=null){ 

     int num = Integer.parseInt(read); 

     System.out.println(firstPalinLargerThanNum(num)); 

     } 
     } 
    } 


} 

입력 : 73입니다

2 
808 
2133 

라인 : 프로그램이 숫자를 기대 할 때 <Enter>을 치면 int num = Integer.parseInt(read);

+0

입력 내용은 무엇입니까? 그리고 73 행은 무엇입니까? –

+0

입력이 링크에 있으면, 여기에 명확한 설명을 위해 게시하겠습니다. – andandandand

답변

1

당신은 그 오류가 발생합니다.

은 입력

2 
3 
<Enter> 

두 번 반복하는 일상을 말한대로, 당신은 숫자 3을 처리 한 후 표시 한 오류를받을 것입니다 가정하자. 옆으로, 숫자 구문 분석 주위에 오류 처리의 위에, 당신은 또한 readLine() 방법에 trim()를 도입 할 가능성이있는으로

호출 : 이것은 당신이에서 정상적으로 입력을 처리 할 수 ​​

String read = r1.readLine().trim(); 

이벤트는 사용자가 숫자 주위에 공백을 넣을 것입니다.

+0

히트 때 "enter"... 당신은 의미합니까? –

+0

그는 아마도 <을 입력했지만을 입력했으나 (보다 작거나 큰 기호 때문에) HTML처럼 보이기 때문에 Stack Overflow의 입력 유효성 검사기에서 제거되었습니다. –

+0

Validator가 HTML 엔티티를 존중하지 않았습니다. –

0

사용자가 프로그램 사용 방법을 알고 있다고 가정 할 수 없으며 올바른 입력을 제공합니다. 판사는 아마 어떤 번호도 입력하지 않고 입력을 누르십시오. 프로그램에서 요구하는 입력을 어떻게 알 수 있습니까? 프로그램은 정상적으로 실패해야하며 사용자의 얼굴에 어지러운 오류가 날아 가지 않아야합니다.

사용자가 무엇을 알 수 있도록 당신은 다음과 같은 일을해야

:

 
private static function readInt(BufferedReader reader) throws IOException 
{ 
    boolean done = false; 
    int result = -1; 
    while (! done){ 
     System.out.print("Please enter an integer: "); 
     String str = reader.readLine(); 
     try{ 
      result = Integer.parseInt(str); 
      done = true; 
     }catch(NumberFormatException cantconvert){ 
      System.out.println("That isn't an integer. Try again."); 
     } 
    } 
    return result; 
} 

또한, 당신은 즉,하지 (주요 기능 예외 지정을 사용하지 말아야합니다 "main"의 서명에서 "throws"를 사용). 이러한 IOException을 처리하고 사용자가 예외를 수정하거나 사라지게 할 수있는 방법이 없더라도 사용자에게 알기 쉽고 알기 쉬운 메시지를 인쇄해야합니다.

+0

판사는 그/그녀가 아닙니다. 자동 메커니즘입니다. – andandandand

+0

링크를 읽는 것이 좋습니다. – andandandand

0

Eclipse 3.4에서 예제 코드를 오류없이 실행했습니다. ,

6 
56 
87 
[Enter] 

그래서 내가 추가 Enter 어딘가에 발생이 있어야한다는 akf에 동의하는 경향이다 : 나는 단지 내가 테스트 케이스의 특정 번호를 제공하지 않은 경우 유사한 오류를 유도 할 수 있었다 이 오류는 입력 줄이 불충분 할 때 생성됩니다.

+0

내가 얻지 못하는 것은 jcreator에 추가 입력을하지 않는 것입니다. – andandandand

+0

디버거를 사용하여 여러 입력을 단계별로 실행합니다. 어딘가에서 재미있는 사업을해야합니다. 특히 다른 사람들이 문제가없는 경우. 시스템/구성 문제 일 수 있습니까? –

1

야생 추측 : 다른 줄 바꿈 구분 기호에 문제가있을 수 있습니까? 예. 당신의 프로그램은 실제로 2<CR><LF>808<CR><LF>2133<CR><LF>을 얻고, 라인이 <CR>에서 끝나고 라인을 처리한다고 생각합니다.

이제 다음 줄을 처리하려고 시도하면 <LF>이 발견되어 빈 문자열을 읽게됩니다.

관련 문제