Wyszukiwanie w tablicy char[]. JAVA

0

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ć.

0

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.

0

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?? :)

0

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-

0

A umiesz sprawdzić, czy cyfra 1 występuje więcej niż jeden raz? Bo jeżeli nie, to proponuję przenieść temat do newbie.

0

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.

0

To zadanie, gdyby nie wielkość tablicy, wygląda jakby idealnie skrojone dla streamów.
https://stackoverflow.com/a/30053822

0

@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.

0

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;
	}

1 użytkowników online, w tym zalogowanych: 0, gości: 1