java ile 3 e 3 Matris
Mart 17, 2010 | In: Java
bu yazımda , sakarya üniversitesi – teknik eğitim fakültesi ; nesne yönelimli programlama ( java ) ödevi için
ahmet zengin hocamınız verdiği ödevin kaynak kodları olacak.
Ödevin içeriği : java ile 3-3 lük bir matris in içerisinde 1-9 arası rakamları yalnızca bir defa kullanılacak ve yatay dikey ve çaprazlamasına toplamları 15 i verecek şekilde tasarlayan uygulama : )
Kaynak kodlar aşağıda ben kısaca mantığını anlatayım.
ihtiyacımız olan değişkenler
matris elemanları için bir array random sayı için bir int , temp için bir int , ekleme ve devam etme durumları için boolean değişkenler,kod içerisinde lazım olan başka şeylerde olabiliyor döngü değişkenleri vs.
bir while döngüsü ve bu döngü a arrayının eleman sayısı 9 dan küçük olduğu sürece çalışma koşulunda yazılıyor.
daha sonra rastgele bir sayı seçtiriyoruz 3-3 matris olduğundna ilk 2 eleman ı random seçebilir 1-9 aralığında
bu seçim sırasında da sayı daha önce seçilenlerde varmı yok mu diye denetim yaptırmalıyız ve bu deneme bir do -while döngüsü içerisinde olmalı ve eğer daha önce seçilmemişse döngünün çalışması durdurulmalı
neden while değilde ? do while diyecek olursa çünki 1 defa da da o elemanı bulabiliriz 10 defa da da ama 1 defa kesinlikle çalışmasını istiyoruz o döngünün bu sebeple do while kullanmamız daha makûl…
ilk 2 sayıyı bir birinden benzersiz olarak seçtirdik
geldik 3. sayıyı seçmeye biz kendimiz o satırın ilk 2 elemanın değerinin toplamını 15 ten çıkararak buluyoruz,
3. sayı olduğunuda kayitsayisi değişkenimiz mevcut her seferinde +1 olarak artan ,
kayitsayisi % 3 == 2 olduğunda yani kayitsayisinin 3 e göre modu 2 olduğunda biz matrisin o satırının son elemanına geldiğimizi anlıyoruz .
daha sonra burada bir denetim yaptırıyoruz 3. sayı 0 ve dan küçük veya 9 dan büyük olamaz .
eğer öyle ise o satırdaki 2 elemanıda siliyoruz kayitsayısında 2 azaltıyoruz.
eğer 15 ten çıkarıp o satırın son elemanı olacak matris daha önce random olarak tutulmuş ise o tutulan sayıya kadar tüm dizinin içeriğini siliyoruz ve kayıt sayisini ne kadar sildiysek o kadar azaltıyoruz.
bu şekilde gidiyor geliyoruz dikeylemesine 15 i bulmaya , dikine 15 içinde
kayitsayisi > 5 mi denetimi yapıyoruz , eğer 5 ten büyükse son satırdaki elemanları seçiyoruz demektir.
satırdaki son sayıları seçtiğimizden o sayı 0<= mi veya 9 > veya daha önce matrise eklenmiş mi bu denetimleri yaptırıyoruz şartlardan herhangi birisi sağlanıyorsa artık geriye dönmek daha zor tek tek arrayları silip toplattırmak yerine ben while döngüsünden önce bir label-etiket tanımladım sec: adında
eğer bu şartlar sağlanıyorsa kayitsayisini 0 lıyor a arrayının içeriğini boşaltıyor ve sec: label indan program tekrar başlıyor bazen 5 bazen 50 denemede istenen şartı sağlıyor.
Daha optimize daha kısa kodlar yazılabilir miydi tabi ki 20 yoldan da yapabilirsiniz bu uygulamayı ve denetimleri farklı metotlara gönderip daha az kod ile de işlemlerinizi yapabilirsiniz zaten debug satırlarını vs. silincede uygulama kısalacaktır, elimden geldiğince anlatmaya çalıştım soru ve sorunlarınızı olursa yazabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | /** * */ //package tahta;</code> import java.util.ArrayList; /** * @author Saho * */ public class Index { static int max = 15; static boolean debug = false; /** * */ public Index() { // TODO Auto-generated constructor stub } public static boolean DenetimOrta(ArrayList a) { int Kombinasyon1 = 0, Kombinasyon2 = 0, max = Index.max; boolean debug = Index.debug; Kombinasyon1 = a.get(0) + a.get(4) + a.get(8); Kombinasyon2 = a.get(2) + a.get(4) + a.get(6); if (debug == true) { System.out.println(Kombinasyon1); System.out.println(Kombinasyon2); } if (Kombinasyon1 == max && Kombinasyon2 == max) { return true; } else { return false; } } public static boolean Denetim(ArrayList a, Integer e) { boolean varmis = false; for (int i = 0; i < a.size(); i++) { if (a.get(i) == e) { varmis = true; } } return varmis; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int deneme = 1; int max = Index.max; boolean debug = Index.debug; // long MaxDeneme = 1000000000;// 15000; int temp = 0; ArrayList a = new ArrayList(); int Ekle = 0; int r1 = 0; int KayitSayisi = 0; sec: while (a.size() < 9) { boolean devam = true; boolean ekleme = true; if (KayitSayisi % 3 == 2) { do { temp = a.get(KayitSayisi - 2) + a.get(KayitSayisi - 1); Ekle = max - temp; if (Ekle > 9 || Ekle < 1) { a.remove(KayitSayisi - 1); a.remove(KayitSayisi - 2); KayitSayisi = KayitSayisi - 2; devam = false; ekleme = false; if (debug == true) System.out.println(Ekle + " 9 dan büyük 1 den küçük "); } else if (Denetim(a, Ekle)) { int silici = KayitSayisi - 1; int dus = 0; while (Denetim(a, Ekle)) { if (silici <= 0) { break; } a.remove(silici ); // burada -1 de problem çıkıyor silici--; dus++; } KayitSayisi = KayitSayisi - dus; devam = false; ekleme = false; if (debug == true) System.out.println(Ekle + " kayıtlarda var "); } else { devam = false; if (debug == true) System.out.println(Ekle + " ne 9 dan büyük ne kayıtta var "); ekleme = true; } deneme++; } while (devam); } else { if (KayitSayisi > 5) { temp = a.get(KayitSayisi - 6) + a.get(KayitSayisi - 3); Ekle = max - temp; if (Ekle > 9 || Ekle < 1 || Denetim(a, Ekle)) { temp = 0; a = new ArrayList(); Ekle = 0; r1 = 0; KayitSayisi = 0; ekleme = false; continue sec; } } else { while (devam) { r1 = 1 + (int) (Math.random() * 9); devam = Denetim(a, r1); } Ekle = r1; } if (debug == true) System.out.println(Ekle + " ilk 2 kolon "); } if (ekleme == true) { a.add(Ekle); KayitSayisi++; } deneme++; if (a.size() == 9 && !DenetimOrta(a)) { if (debug == true) { System.out.println("------"); for (int j = 1; j <= a.size(); j++) { if (j % 3 == 0) { System.out.println(a.get(j - 1)); } else { System.out.print(a.get(j - 1) + " "); } } } temp = 0; a = new ArrayList(); Ekle = 0; r1 = 0; KayitSayisi = 0; ekleme = false; continue sec; } // if (deneme >= MaxDeneme) // break; } if (debug == true) System.out.println("------"); for (int j = 1; j <= a.size(); j++) { if (j % 3 == 0) { System.out.println(a.get(j - 1)); } else { System.out.print(a.get(j - 1) + " "); } } } } /** * @author Şahabettin Akca * */ |

















1 Response to java ile 3 e 3 Matris
admin
Mart 18th, 2010 at 10:31
& amp; yerine & kullanın wordpress eklentisinden dolayı kodlar o şekilde değişmiş