0

add()メソッドが4ではなく0を返す理由を誰かに説明してもらえますか?「無効な」文字列番号が指定されている場合(たとえば4つ)にint0を使用しようとしています。文字列引数3,4/3、4 / 3、4 /については正しい結果が得られていますが、3、4についてはそうではありません。

私が間違っていることのヒントを教えてください。ありがとう!

public class Numbers2
{
    public static void main(String[] args) {

        System.out.println(add("d","4"));
    } // main() method

   public static int add(String a, String b)
   {
       int x = 0;
       int y = 0;

      try{ 
          x = Integer.parseInt(a); 
          y = Integer.parseInt(b);

          System.out.println("No exception: " + (x+y));

          return x + y;
      }
      catch (NumberFormatException e){

          if(x != (int) x ){              
              x = 0;
          }
          if(y != (int) x ){
              y = 0;              
          }      
          return x + y;  
      }

   } // add() method
} // class

4

3 に答える 3

1

2番目の引数は「d」であるため、常に例外ケースに分類されます。ここで、x = y=0です。

ここでのIfステートメントは何もしません。xがintの場合は常に(x ==(int)x)であり、(y ==(int)x)は両方とも0であるため、これらのブロックはどちらも実行されません。

したがって、x+yは常に=0になります。

于 2013-01-27T03:48:37.970 に答える
0

問題は、整数ではない最初の引数としてy = Integer.parseInt(b);渡されているため、行が実行される機会がないことです。この行は例外となり、両方とも0のままになります。"d"x = Integer.parseInt(a);xy

両方に別々のtry/catchを使用することで、問題を解決できます。

int x = 0; //x is 0 by default
int y = 0; //y is 0 by default

try { 
    x = Integer.parseInt(a); //x will remain 0 in case of exception  
}
catch (NumberFormatException e) {
    e.printStackTrace();
}

try {  
    y = Integer.parseInt(b); //y will remain 0 in case of exception  
}
catch(NumberFormatException e) {
      e.printStackTrace();
}

return x + y; //return the sum
于 2013-01-27T03:53:15.240 に答える
0

最初の引数として間違った形式の引数を使用すると、ステートメントで例外が発生します

x = Integer.parseInt(a);

この線

y = Integer.parseInt(a);

この場合、は実行されないため、ステートメントごとに異なるtry-catchブロックを使用してください。

于 2013-01-27T04:04:26.423 に答える