2017-04-18 3 views
2

Java初心者ここでは、Codingbat haveThreeに配列についての練習をしています。これは疑問です: "intの配列を与えられた場合、値3が配列に正確に3回現れ、3が互いに隣り合っていなければtrueを返します。"私のコードはほとんどの状況で動作しますが、すべてではありません。Codingbat配列に3が3つある場合のカウント方法

マイコード:

public boolean haveThree(int[] nums){ 
    int counter=0; 
    for(int i=0; i<nums.length-2;i++){ 
     if(nums[i]==3){ 
     counter++; 
     } 
     if(counter==3){ 
     return true; 
     } 
    } 
     return false; 
} 

The tester

誰も私を助け、私が間違っていた場所を教えてもらえますか?どうすれば修正できますか?

+1

@KenWhite、しかし、私はテストを投稿しようとしていたが、私はそれは常に私に示さ提出するときに私が投稿することはできませんエラーが発生しています。 –

+0

@KenWhite私はそれが動作している状況の写真を追加しました。あなたが写真をチェックできることを願っています。 –

+0

私は何を得ていません:このテストが真実を返すべき2つの状況を明示します。しかし、あなたのコードは、2つの可能性のうちの1つだけをチェックします。そして、あなたは多くのテストに失敗したことに驚いていますか? – GhostCat

答えて

0

"値の3が 配列に正確に3回現れ、3が互いに隣り合っていない場合、trueの配列が返されます。あなたはほとんどそこにいる

、しかし、いくつかのミスや不完全な実装があります。

  1. 3が(別の値3の隣にあるかどうかをチェックしませんでしたが、その場合には、我々あなたは3sこれ以上はないという結論に配列全体を検索していないにもかかわらず、すぐcount == 3として返すfalse

  2. を返します。

  3. ループ状態の場合i < nums.length-2には、検索内の配列の最後の2つの要素が含まれていません。

ソリューション:そのことについて申し訳ありません

public boolean haveThree(int[] nums){ 
     int counter = 0; 
     for(int i = 0; i < nums.length; i++){ 
      if(nums[i] == 3){ 
       counter++; 
      } 

      if(i + 1 < nums.length) { 
       if (nums[i] == 3 && nums[i + 1] == 3) return false; 
      } 
     } 

     if(counter == 3) return true; 
     return false; 
} 
+0

私はそれを理解していますが、部分が混乱しています。「if(i + 1

+0

@ Zhuangzhuang確かに同じことができます。 –

+0

私の問題はループが 'nums [i] = 3'を見つけたときにループを実行してループを終了して何かを返すときだったので、この配列のすべての要素を正しく調べませんでしたか? @オースメインMahy Diaw –

関連する問題