sınıfları string değil array olarak oluştur. her sınıf ayrı bir array olsun. arrayin ilk elemanı int sınıf sayısı, ikinci elemanı sınıf harfi bu da string olsun ya da char da olabilir tek harf var çünkü. arrayin ilk elemanlarına göre sınıf sayılarını sıralarsın.sonra ikinci elemanlarına göre alfabetik sıralarsın.
sınıfları string değil array olarak oluştur. her sınıf ayrı bir array olsun. arrayin ilk elemanı int sınıf sayısı, ikinci elemanı sınıf harfi bu da string olsun ya da char da olabilir tek harf var çünkü. arrayin ilk elemanlarına göre sınıf sayılarını sıralarsın.sonra ikinci elemanlarına göre alfabetik sıralarsın.
array e attığın zaman zaten birleşmiş olacak.kullanıcıdan sayı istedin.sonra harf istedin.aldığın değerleri array e koydun.Arrayin içinde [9 A] oldu.Bunu da ayrı bir arrayın içine attın.İkili olan şeyi.Tüm sınıfların içindeki arrayin bir elemanı oldu.Daha sonra bunları ekledikten sonra buble sort yapar sıralarsın.Kavraman başta zor gelebilir ancak sıra sıra gidersen zorlanmazsın.ilk arraye x dedik diyelim.x in içinde iki eleman var 9 ve A. Sonraki sınıf y sonraki z olsun.Hepsinin içinde 2 değer var.Bunları sırayla tüm sınıfların olduğu arraye attığını düşün [x y z] diye. Bunları sıralayacağın zaman.x y z nin ilk indislerini(içinde sayı olan) kıyasla sonra ikinci indislere(içinde harf olan) göre alfabetik sırala.aradaki / işaretine takılma onu printlerken araya string olarak eklersin.yoksa arada karıştırır ortalığı gereksiz.
Kullanıcıdan 10/A şeklinde girdi alıyorum senin dediğini yapmak için split kullanmak gerekir ve dediğim hata oluşur. Neden ayrı ayrı isteyeyim ki daha basit hali varken?
Mesajlar otomatik olarak birleştirildi:
Sana yazdığım kodu basitinden bir anlatayım bir saniye.
Mesajlar otomatik olarak birleştirildi:
ListeyiSirala(true);
Dediğimizde sırasıyla olan adımlar;
İlk başta otoKontrol (otoSıralamaKontrol) açık mı diye bakıyor. Eğer açıksa checkBox tiklenmiş mi diye bakıyor.
Eğer ikisinden birisi açık değilse otoKontrol false mı diye bakıyor ve eğer iki şarttan birisine uyuyorsa (bu kısım boş zaten sonrası önemli) şunlar oluyor;
sinifSayiListe adında ListBox'ın Item sayısıyla aynı sayıda Index'i olan bir dizi oluşturuyor.
sinif isimli stringe atanacak şey sırasıyla ListBox'ın tüm itemleri yani sınıflar örneğin 10/B
sinifSayiListe'nin sırasıyla indexlerine atanacak şey ise sinif'ın "/" (slash)'dan önceki kısmı örneğin 10
Yani eğer listBox'daki itemler şu şekildeyse : 10/B - 9/B - 11/B
sinifSayiListe şu şekilde olacak: 10 - 9 - 11
Ardından built-in bir fonksiyon olan Array.Sort fonksiyonuyla listeyi sıralıyoruz.
Neden en başta bunu kullanmadın diyecek olursanız şöyle bir listeyi sıralamaya çalıştığımız zaman : 11/A - 1/B - 2/B - 11/ B - 10/B şöyle bir sorun oluyor; Bu listeye girdiğimiz değerler string değerler olduğu için büyük küçük sıralaması yapamıyor ve ilk haneye bakarak sıralama yapıyor. Bu yüzden çıktı şu şekilde oluyor;
Girdi: 11/A - 1/B - 2/B - 11/ B - 10/B
Çıktı: 1/B 10/B 11/A 11/B 2/B
ve haksızda değil çünkü ilk haneye baktığımızda 2, 1'den büyük.
Ama biz listeyi int'e çevirdiğimiz için büyük küçük sıralaması yapabiliyor.
Her neyse. Ardından listBox'ı temizliyor.
Şimdi burada ki kod neyin nesi diyecek olursanız şu şekilde;
Ben kullanıcıdan sınıfları 10, 9 şeklinde alıyorum. Ve 10/ yazıp sırasıyla A, B, C... şeklinde giriş yapıyorum.
E madem bizim zaten hazırda böyle bir fonksiyonumuz var o zaman bu sınıflara tekrardan şube verelim ve sıralanmış şeklide yeniden listBox'a ekleyelim.
Biraz uzun oldu evet , 20 dakikamı buna ayırdım şimdi işime geri dönüyorum