1

私はこのJavaの問題に数日間苦労してきましたが、今はあきらめなければなりません. 私は 5 5 3 3 であるはずの答えを教えられましたが、どのようにしてその結果を得ることができるのか、まったくわかりません。

次の Java メソッドがあるとします。

public int[] methodName(int[] nums)
{
     int largestOdd=0;
     for(int i=nums.length-2;i>=0;i--)
     {
          if (nums[i+1] % 2 != 0 && nums[i+1] > largestOdd)
               largestOdd = nums[i+1];

          if (nums[i] == 0)
               nums[i] = largestOdd;
     }
     return(nums);
}

次の Java ステートメントが実行されると、何が出力されますか?

int[] nums = {0,5,0,3};
nums = methodName(nums)
for (int i = 0; i<nums.length;i++)
    System.out.print(nums[i] + "");
System.out.println();

まず最初に「5」の出力を開始することは、私には意味がありません。私の意見では、nums[2+1] = 3 (最後のインデックス要素) であるため、「3」にする必要があります。

次に、メソッドのループが -1 に達するまで 3 回だけループするのに、なぜ 4 つの数値を出力するのでしょうか。

誰かが結果を理解できる方法で説明できるなら、私はとても幸せです.

前もって感謝します

4

4 に答える 4

2

methodName配列を逆方向に実行し、数値のすべてのペアを調べます。この場合、検査される最初のペアは (0,3) になります。

ペアを実行する際に、検出されmethodNameた最大の奇数を追跡します (これについては、各ペアの2 番目の数字を調べます)。

最初の数値がゼロの場合は常に、これまでに見た最大の奇数に設定します。

したがって、この場合は次のようになります。

  1. (0,3) を見てください。
  2. 3は奇数ですか?はい。これまでに見られた最大の奇数ですか?はい。ということで、3を守ってください。
  3. 0はゼロですか?はい。3 に設定します。これで、配列は {0, 5, 3, 3} になります。
  4. インデックスを 1 戻して (5, 3) を見てください。
  5. 3は奇数ですか?はい。これまでに見られた最大の奇数ですか?いいえ。
  6. 5はゼロですか?いいえ。
  7. インデックスを 1 戻して (0, 5) を見てください。
  8. 5は奇数ですか?はい。これまでに見られた最大の奇数ですか?はい。ということで、5を守ってください。
  9. 0はゼロですか?はい。5 に設定します。配列は {5, 5, 3, 3} です。
  10. すでに配列の先頭にいるので、それ以上戻ることはできません。
  11. メイン メソッドに戻り、配列の内容を出力します。
于 2013-11-13T06:16:23.480 に答える
0
Loop 1 start i=2,nums=[0,5,0,3],largestOdd=0
because:(nums[2+1]=3)/2 !=0 && (nums[2+1]=3)>(largestOdd=0)
so:largestOdd=(nums[2+1]=3)=3
beacuse:(nums[2]=0) ==0
so:nums[2]=(largestOdd=3)=3
Loop 1 end   i=2,nums=[0,5,3,3],largestOdd=3

Loop 2 start i=1,nums=[0,5,3,3],largestOdd=3
because:(nums[1+1]=3)/2 !=0 && (nums[1+1]=3)>(largestOdd=3)
so:next
beacuse:(nums[1]=5) !=0
so:next
Loop 2 end   i=1,nums=[0,5,3,3],largestOdd=3

Loop 3 start i=0,nums=[0,5,3,3],largestOdd=3
because:(nums[0+1]=5)/2 !=0 && (nums[0+1]=5)>(largestOdd=3)
so:largestOdd=(nums[0+1]=5)=5
beacuse:(nums[0]=0) ==0
so:nums[0]=(largestOdd=5)=5
Loop 3 end   i=0,nums=[5,5,3,3],largestOdd=5

END LOOP
于 2013-11-13T06:56:37.400 に答える