Yazılım Geliştirici Güncesi

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.java-matris

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 &amp;&amp; Kombinasyon2 == max) {
return true;
} else {
return false;
}
}

public static boolean Denetim(ArrayList a, Integer e) {
boolean varmis = false;
for (int i = 0; i &lt; 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() &lt; 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 &gt; 9 || Ekle &lt; 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 &lt;= 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 &gt; 5) {
temp = a.get(KayitSayisi - 6) + a.get(KayitSayisi - 3);
Ekle = max - temp;
if (Ekle &gt; 9 || Ekle &lt; 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 &amp;&amp; !DenetimOrta(a)) {
if (debug == true) {
System.out.println("------");
for (int j = 1; j &lt;= 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 &gt;= MaxDeneme)
// break;
}
if (debug == true)
System.out.println("------");
for (int j = 1; j &lt;= 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
*
*/
Paylaş ve HalayÇek: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Technorati
  • Digg
  • del.icio.us
  • YahooMyWeb
  • Taggly
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists
  • blogmarks
  • IndiaGram
  • Internetmedia
  • Netscape
  • Reddit
  • Scoopeo
  • StumbleUpon


1 Response to java ile 3 e 3 Matris

Avatar

admin

Mart 18th, 2010 at 10:31

& amp; yerine & kullanın wordpress eklentisinden dolayı kodlar o şekilde değişmiş

Comment Form