goodstudent404:
私は、0〜9の数字の一覧を取り込んで、隣接する繰り返し文字の出現回数を返しますcountRepeatsという名前のメソッドを定義したいです。
例えば、
テストケース1:配列{0、1、2、2、1、2、2、1、3、3、1}を繰り返す桁の三の発生を有します
テストケース2:配列{0、1、1、1、1、2}つの存在を有しています
以下は、私のコードは次のとおりです。
List<Integer> intlist = new ArrayList<Integer>();
int [] array = new int[]{};
while(sc.hasNext()){
intlist.add(sc.nextInt());
array = intlist.stream().mapToInt(i->i).toArray();
}
System.out.println("Number of occurrences: " + countRepeats(array));
public static long countRepeats(int [] array){
return IntStream.range(0, array.length-1)
.filter(n -> array[n] > 0)
.filter(i -> (array[i] == array[i+1]))
.peek(System.out::println)
.count();
}
しかし、私は2誰もが私を啓発することができます私のテストケースのために望ましい結果を取得できませんでしたか?
トムホーティン - tackline:
我々は、我々はボクシングを避けることができる繰り返しペアは、より大きな配列の一部であるかどうかを確認してください(と、配列の末尾を確認してください)場合は、元のポスターのソリューションで構築。
import java.util.*;
import java.util.stream.*;
interface CountRepeats {
static void main(String[] args) {
test(0, 1, 2, 2, 1, 2, 2, 1, 3, 3, 1);
test(0, 1, 1, 1, 1, 2);
}
static void test(int... digits) {
System.err.println(
countRepeats(digits)+": "+Arrays.toString(digits)
);
}
static long countRepeats(int[] array) {
return IntStream.range(0, array.length-1)
.filter(i ->
array[i] == array[i+1] && (
i+2 >= array.length ||
array[i] != array[i+2]
)
)
.count();
}
}
これは本当にストリーム強いポイントではありません。
(この線
i+2 >= array.length ||
本当にする必要があります
i >= array.length-2 ||
原因整数オーバーフローを回避しますArrayOutOfBoundsException
。古い言語とその壊れ整数...)