Witam mam problem pewnie banalny no ale nie dla mnie :).
Mam tablicę char:
np. char[] tablica={'1','2','3','.','A','1'};
no i chciałbym sprawdzić czy jakakolwiek cyfra występuje więcej niż jeden raz.
No i tu nie wiem jak to zrobić.
Jak by mi mógł ktoś podpowiedzieć.
Możesz np. przeiterować po tablicy i dodawać kolejne elementy do jakiejś kolekcji np. Set. Przy każdej iteracji sprawdzać metodą contains czy taki element już istnieje, jeśli metoda zwróci true to znaczy, że tablica zawiera duplikat.
OK prawie działa tak jak mi podpowiedziałeś ale....... :)
Tylko cyfry nie mogą mi się powtórzyć czyli nie może być char[]tablica={'1'.'2','3','1'};-- tu zwrócona wartość to FALSE i jest OK,
ale może być char[]tablica={'1'.'A','A','5'}; i tu zwrócona wartość powinna być TRUE ale też jest FALSE :)
no i tu główkuję jak zrobić żeby wychwytywało duplikaty tylko i wyłącznie cyfr 1-9.
Jakieś sugestie?? :)
To sprawdzaj czy element tablicy jest liczbą. Możesz użyć metody z biblioteki Aapche Commons: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/math/NumberUtils.html#isCreatable-java.lang.String-
A umiesz sprawdzić, czy cyfra 1 występuje więcej niż jeden raz? Bo jeżeli nie, to proponuję przenieść temat do newbie.
Najprościej jest przejść przez tablicę za pomocą pętli i odkładać sobie w drugiej tablicy informację czy dana cyfra już wystąpiła. Przy czym można zrobić to na kilka sposobów i niekoniecznie będą one sobie równe.
To zadanie, gdyby nie wielkość tablicy, wygląda jakby idealnie skrojone dla streamów.
https://stackoverflow.com/a/30053822
@vpiotr: streamy będą tu miały za duży narzut, a jak chcesz, żeby to było szybkie i ze streamami, to trzeba by napisać własny kolektor do detekcji duplikatów. Przy czym zastanawiam się jak może wyglądać funkcja , która za pomocą operacji na wartościach logicznych była by wstanie wykrywać duplikaty. Wtedy można by było napisać coś naprawdę szybkiego.
ostatnio posiedziałem trochę na codility i wydaje mi się ze takie coś na tablicach będzie wystarczające:
public static boolean solution(char[] A){
int[] checker = new int[9];
int start = 49; // '1' = 49
for(int i=0;i<A.length;i++){
if(((int)A[i]) >= (int)'1' && ((int)A[i]) <= '9'){
checker[A[i]-start] = checker[A[i]-start] + 1;
if(checker[A[i]-start] > 1)
return false;
}
}
return true;
}