2016-10-08 18 views
0

たとえば、arrayは{1,1,2,1,1,1}のようになり、キーのintは1で、連続する最大の数は1になります3.私は自分のコードを実行して同じ数字を入力すると、4つの連続した数字1を得ています。これを解決するのに役立つビルトインメソッドがありますか?配列内の連続する数字の数を確認する[java]

Scanner kbd = new Scanner (System.in); 
      int count = 1; 
      int largest = 0; 

      System.out.println("Enter number"); 
      int numbers = kbd.nextInt(); 
      int[] numb = new int[numbers]; 
      System.out.println("Now enter "+numbers+" integers:"); 
      for(int i =0; i<numb.length;i++){ 
       numb[i] = kbd.nextInt(); 
      } 
      System.out.println("Now enter the key integer: "); 
      int key = kbd.nextInt(); 

      for (int i = 0; i<numb.length-1; i++) { 
      if (numb[i] == key) { 
       if (numb[i] == numb[i + 1]) { 
        count++; 
        } 
      else { 
        largest = Math.max(largest, count); 
        count = 1; 

        } 
      } 
    } 

      System.out.println("Largest number of consecutive times "+key+" was entered: "+largest); 
+0

私はあなたのコードは、常に任意の数の1を返すと思います。それも間違っています。 – cody123

答えて

0

わずかに異なるアプローチ。

count = 0; 
for (int i : numb){ 
    if (i == key){ 
    count++; 
    } else { 
    count = 0; 
    } 
    if(largest<count) { 
    largest = count; 
    } 
} 
+0

私はそれが好きです、この1つははるかに簡単です。ありがとう! – john

1

それはあなたが第二の内側のループを持つべきであるように、それだけで

for (int i = 0; i + 1<numb.length; i++){ 
    if(numb[i] == numb[i + 1]){ 
     count++; 
    }else{ 
     if(largest<count) { 
     largest = count; 
     count = 1; 
    } 
} 
+0

返信いただきありがとうございます!私は今これをテストしています – john

+0

あなたは再びコードをチェックすることができますか?コードを提供してくれてありがとうございます。1 – john

0

ジャスト(編集前のあなたの最初のコードでは)もし状態で0countを再割り当てする必要があります見ていません。

if(largest<count){ 
    largest = Math.max(largest, count); 
    count = 0; 
} 

Output

そして、現在のコードの条件が最も大きいためループの後にカウントよりも大きいかどうかを確認する場合だけ追加します。

largest = (largest > count) ? largest : count;

または

if (count > largest){ 
    largest = count; 
} 
+0

ありがとうございます!あなたのコードはまだ動作しませんが、私はそれを理解します – john

+0

@john最初のコードのif条件で 'count'を' 0'に再割り当てしましたか(質問を編集する前にコードを意味します)。 – Ravikumar

+0

@john私は自分の答えを一度点検しました。 – Ravikumar

0

これで試してください。

 int numb[] = new int[] { 6, 3, 3, 5,5,5 ,3, 5, 15,15 }; 
     int key = 3; // Can be changed 
     int largest = 0; 
     int currCount = 0; 
     for (int i = 0; i < numb.length; i++) { 
      if (numb[i] == key) { 
       currCount++; 
      } else { 
       if (currCount > largest) { 
        largest = currCount; 
       } 
       currCount = 0; 
      } 
     } 
     if (currCount > largest) { 
      largest = currCount; 
     } 

     System.out.println("Largest number of consecutive times " + key + " was entered: " + largest); 
+0

なぜ15にキーを設定しますか? – Addis

+0

そして、あなたがキーと異なる番号を通過するとき、あなたはカウントをリセットしなければなりません。これはすべてのキーを連続して連続してカウントします。 – Addis

0
for (int i = 0; i<numb.length; i++) { 
    if (numb[i] == key) { 
     if(i == numb.length-1){ 
      count =1; 
     } 
     else if (numb[i] == numb[i+1]) { 
      count++; 
     } 
     if (count > largest) { 
      largest = count; 
     } 
    } 
    else 
     count = 1; 
} 
+0

ダウンした有権者は、改善すべき点を教えてくれますか?ありがとう! – Addis

+0

あなたの出力をkey = 3と入力することができますか?{1,1,2,1,1,1,2,2,1,3}; – cody123

+0

あなたは正しいです!私は訂正をします。 – Addis

関連する問題