2014-10-07 3 views
1

* 숙제java.lang.NumberFormatException 수정? 명령 행 명령</p> <blockquote> <p>자바 <em>클래스</em> -add 7 8</p> </blockquote> <p>를 사용하여 정수

에서 문자열은 "-add"후 모든 정수를 추가합니다. 그러나이 프로그램에서 "-add"다음에 오는 것이 정수가 아닌 경우 "인수 유형 불일치"를 인쇄한다고 가정합니다.

문자열을 정수로 검색하는이 방법이 있습니다. 정수가 아닌 다른 값을 찾으면 false를 반환합니다.

public static boolean isInteger(String s) { 
    try { 
     int num = Integer.parseInt(s); 
     return true; 

    } catch (Exception e) {} 
    return false; 
} 

이제이 메서드에서는 isInteger 메서드를 사용하여 첫 번째 for 루프의 String을 봅니다.

private static void add(String[] args) { 
    for (int j = 1; j < args.length; j++) { 
     if (isInteger(args[j]) == false) 
     System.out.println("Argument type mismatch"); 
    } 
    if (args.length == 1) 
     System.out.println("Argument count mismatch"); 
    else { 
     int result = 0; 
     for (int i = 1; i < args.length; i++) { 
      result += Integer.parseInt(args[i]); 
     } 
     System.out.println(result); 
    } 
} 

첫 번째 for 루프를 단독으로 실행하면 "인수 유형 불일치"가 발생합니다. 그러나 나는 명령

자바 클래스 그것이 java.lang.NumberFormatException의 뒤에 "인수 유형 불일치를"생산

-add 고양이 전체 메소드를 실행하고 입력 할 때 : 입력 문자열을 : "cat" 라인의 오류 결과 + = Integer.parseInt (args [i]);

어떻게이 오류를 해결할 수 있습니까?

+0

추가'수익을,''에서 System.out.println ("인수 유형 불일치") 후, '그것을 해결해야한다. – Voicu

+0

-add와 cat 인 두 개의 인수를 클래스에 전달하기 때문입니다. Integer.parseInt가이 에러를 throw합니다. – StackFlowed

답변

4

입력에 문제가 있음을 발견하면 exection을 종료하지 않기 때문에 오류가 발생합니다. 문제가있을 때

코드에가 실행을 return; 문을 추가
for (int j = 1; j < args.length; j++) { 
    if (!isInteger(args[j])) { 
     System.out.println("Argument type mismatch"); 
     return; // Added this line 
    } 
} 

는 또한 if 상태에서 약간의 변화를 확인합니다.

// Oops! An assignment that compiles and executes as "true" 
if (someBooleanVariable = true) 

:이 이런 일을 방지

if (isInteger(args[j]) == false) 

이 코딩 연습이 좋은 이유

if (!isInteger(args[j])) 

에 : 그것은 부울 리터럴과 비교하지 더 나은 코딩 스타일, 즉 변화의 비교 코드를 의미했습니다. :

,

시각적 차이는 미묘하다, 당신이 시각적으로 그것을 선택하지 않는 경우 실망 버그로 이어질 수 있지만,이 문제의 기회가없는 경우 당신 코드 :

if (someBooleanVariable) 
+0

if 조건에 대한 조언 주셔서 감사합니다. 내가 학습 과정에있을 때 이처럼 코딩을 중단하는 것이 더 좋습니다. – Jerry

+0

@Jerry yeah - 좋은 연습이 아니란 이유에 대한 답을 편집하십시오. – Bohemian

+0

실제로 이것을 수행하면 ** java * class * -add 5 4 ** 명령은 9를 인쇄 할 때 더 이상 아무 것도 인쇄하지 않습니다. – Jerry

2

그것은, Argument type mismatch를 인쇄하지만, 당신은 당신의 프로그램을 끝내지 않는다. @Bohemian이 제안한대로 return 문을 추가하거나 아래와 같이 if 구조체를 사용할 수 있습니다. 나는 개인적으로 기능의 중간에 return 성명을 좋아하지 않아. 당신에 맞는 솔루션 :

이런 식으로 뭔가를 시도 선택 :

private static void add(String[] args) 
{ 
    if (args.length <= 1) // Validate number of arguments 
    { 
     System.out.println("Argument count mismatch"); 
    } 
    else // Number of arguments valid 
    { 
     // Validate that we received only numbers 
     boolean allIntegerValid = true; 

     for (int j = 1; j < args.length; j++) 
     { 
      allIntegerValid = allIntegerValid && isInteger(args[j]); 
     } 

     if (allIntegerValid) // We received only numbers 
     { 
      int result = 0; 
      for (int i = 1; i < args.length; i++) 
      { 
       result += Integer.parseInt(args[i]); 
      } 
      System.out.println(result); 
     } 
     else // At least one argument was not a number 
     { 
      System.out.println("Argument type mismatch"); 
     } 
    } 
} 
+0

나는 당신을 +1하지만 코드 답변을주지 않으면 좋을 것이다. :) –