Java'da 5 basamaklı int
dizisi oluşturmaya çalışıyorum ve nereden başlayacağımı sorun yaşıyorum. Dizideki sayıların hiçbiri çoğaltılamaz. Bunun için rasgele sayılar üretebiliyorum ama sadece sayıları birbiriyle karşılaştırıp herhangi bir kopyasının nasıl değiştirileceğini anlayamıyorum.Yinelenen öğeler için bir dizi öğeyi karşılaştırın
cevap
Yalnızca benzersiz öğelere sahip olması garantili olduğundan, bir dizi yerine java.util.Set kullanabilirsiniz.
bu deneyin:
int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Random random = new Random();
int[] generateId() {
int[] clone = digits.clone();
int[] id = new int[5];
for (int i = 0; i < 5; i++) {
int candidate;
do {
candidate = random.nextInt(10);
} while (clone[candidate] == -1);
id[i] = clone[candidate];
clone[candidate] = -1;
}
return id;
}
Sen (bu da onları sıralanır) bir TreeSet içine dizi dönüştürerek yinelenenler kurtulabilirsiniz: Ben doğru anlamak
int numbers[] { 4 5 7 6 5 7 5 89 847 7 94 093 02 10 11 10 11 };
TreeSet set new TreeSet(Arrays.asList(numbers));
for (int no : set)
System.out.println(no);
, sen Herhangi bir basamak tekrar edilmeden rastgele 5 basamaklı bir sayı mı istiyorsunuz?
Eğer öyleyse, bir yol 0-9 arasındaki basamakların bir listesini karıştırmak, ardından ilk 5 öğeyi seçmek.
DÜZENLEME
Integer[] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Random random = new Random();
public Integer[] generateId() {
List<Integer> id = Arrays.asList(digits);
Collections.shuffle(id, random);
return id.subList(0, 5).toArray(new Integer[0]);
}
bu O'da (basamak sayısını), hiçbir iç döngüler, hiçbir üreticimizin < bunu üretir - seçeneklerinin sayısı gerçekten büyük alırsa bu pahalı olabilir
int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Random random = new Random();
int[] generateId() {
int[] choices = digits.clone();
int[] id = new int[5];
for (int i = 0; i < 5; i++) {
// one less choice to choose from each time
int index = random.nextInt(choices.length - i);
id[i] = choices[index];
// "remove" used item by replacing it with item at end of range
// because that index at the end won't be considered in next round
choices[index] = choices[choices.length - i - 1];
}
return id;
}
Alternatif olarak, diziyi sıralayın ve yineleyin.
List<int> myList = new List<int>() { 1, 1, 2, 3, 4, 5, 5, 7 , 1, 7};
myList.Sort();
for (int i = myList.Count - 1; i > 0; i--)
{
if (myList[i] == myList[i - 1])
myList.RemoveAt(i);
}
Ama elbette başlamak için herhangi bir kopya almamak en iyisidir.
Her şeyden ötürü yardım ettiğin için teşekkür etmek istiyorum.
İstediğim şekilde çalışmak için bu programı aldım ama daha kolay bir yol olmalı gibi görünüyor. İşte yaptım. Daha fazla yorum harika olurdu.
do
{
for (int i = 0; i < 5; i++)
{
iNumber = generator.nextInt(9) + 1;
numbers[i] = iNumber;
}
}
while(numbers[0] == numbers[1] || numbers[0] == numbers[2] || numbers[0] == numbers[3] || numbers[0] == numbers[4] || numbers[1] == numbers[2] || numbers[1] == numbers[3] || numbers[1] == numbers[4] || numbers[2] == numbers[3] || numbers[2] == numbers[4] || numbers[3] == numbers[4]);
Bak, rastgele sayıları oluştur ve onları boyutu 5'e eşit veya 5'e eşit olan bir Set
@sandman: Bunun iyi bir fikir olup olmadığını bilmiyorum, çünkü Set AFAIK elementlerini döndürdüğü sipariş hakkında hiçbir garanti vermez. @John: Bu iş parçacığında önerilen en az iki temizleyici çözüm var mı? –
@sventek: Sayıların sipariş edilmesi gerektiğini farketmedim mi? Bu durumda SortedSet kullanmayı öneriyorum. Bu ekler daha pahalı hale getirir, ama yine de bunun oldukça iyi bir çözüm olduğuna inanıyorum. – Sandman
/**
* findDuplicate method return map where key is unique no and value as the
* repitation
*
* @param a
* : arrays of Objects
* @return map
*/
public Map findDuplicate(T[] a) {
Map<T, Integer> map = new HashMap<T, Integer>();
Set<T> unique = new HashSet<T>(Arrays.asList(a));
int count = 0;
for (T integer : unique) {
for (T integer1 : a) {
if (integer == integer1) {
++count;
}
}
map.put(integer, count);
count = 0;
}
return map;
}
- 1. numpy yinelenen öğeler
- 2. WPF yinelenen öğeler
- 3. "order_by" ifadesinin ardından yinelenen öğeler,
- 4. Bir dizi yinelenen olayları kaldır
- 5. Kontrol sözlükleri bir dizi değeri dizisi Bir dizi (öğeler) sahip
- 6. Bootstrap Carousel Çoklu Öğeler Bir Öğeyi bir kerede taşıyın
- 7. Öğeyi seçmek için seçenekler olarak nasıl bir dizi verebilirim?
- 8. Yinelenen koleksiyondaki öğeyi değiştirme ile ilgili kavramlar?
- 9. karşılaştırın iki ArrayList İki Dizi Listeleri var
- 10. Yinelenen öğeler listesi nasıl engellenir C#
- 11. LINQ kullanarak bir listede yinelenen öğeler nasıl oluşturulur?
- 12. Cycle.js ile dinamik, yinelenen öğeler listesini nasıl oluştururum?
- 13. Bir Wiki için TinyMCE ve CKeditor'u karşılaştırın
- 14. Bir dizi nasıl karıştırılır, böylece tüm öğeler yerlerini değiştirir?
- 15. Farklı Öğeler için UITableView durumu nasıl kaydedilir?
- 16. İç içe geçmiş her bir döngü iç içe geçmiş bir dizideki yinelenen öğeyi bulun
- 17. Farklılıkları bulmak için matrisler karşılaştırın
- 18. ReactJS, Redux: STATE'deki bir dizi öğeyi nasıl iade ederim?
- 19. Meteor blaze dizi dizini tarafından belirli bir öğeyi seç
- 20. Yinelenen öğeler kaldırılırken Access'te iki tablo nasıl birleştirilir?
- 21. Yinelenen bir dizi içinde her dizinin durumunu nasıl yönetirim REACT
- 22. Yinelenen kaldırma vba içinde bir dizi kullanarak kaldırma
- 23. ConvertTo-JSON bir dizi ile bir dizi
- 24. 3B dizisinde belirli öğeler için nesne oluşturma
- 25. Sık kullanılan öğeleri aramak için iki listeyi karşılaştırın
- 26. Tabloları verimli bir şekilde karşılaştırın
- 27. iki boyutlu bir dizinin değerlerini karşılaştırın ve
- 28. Python struct.pack() bir listedeki tek tek öğeler için mi?
- 29. Yinelenen öğeleri bir listede yineleyin
- 30. Öğeyi almak için bir dizin kullanmak, Python
sen '5 haneli int dizisi' ne demek istiyorsunuz? –