İçeriğe geç

Arraylist kullanımı

   Arraylist ‘in diziden farkı  belli bir boyutunun olması gerekmiyor ve her hangi bi değişken türü tanımlamak gerekmiyor. örnek kod altta:
 
 
  public static void main(String[] args) {
            ArrayList liste=new ArrayList();   //bu şekilde tanımlanıyor
            Object      orn0 = new String(“ahmet”);
            int   orn1 = 72;
            String      orn2 = “hmo”;
            char orn3 = ‘A’;
            double      orn4 = 25.5;
            //array list e ekle şu şekilde yapılır
            liste.add(orn0);  //object türünde bi değişken ekleme
            liste.add(orn1);  //int türünde bi değişken ekleme
            liste.add(orn2);  //string türünde bi değişken ekleme
            liste.add(orn3);  //char türünde bi değişken ekleme
            liste.add(orn4);  //double türünde bi değişken ekleme
 
            //her veri aynı şekilde ekleniyor 
 
            for (int i = 0; i < liste.size(); i++) {
                  System.out.println(liste.get(i));
            }
 
            liste.add(1,”mehmet”); //1 sıraya bu veriyi ekliyoruz
            //bu ekleme sırasında diger veriler alta kayıyor araya bu ekleniyor
            liste.remove(5);   //5 sıradaki veriyi siliyor
 
            System.out.println();
            for (int i = 0; i < liste.size(); i++) {
                  System.out.println(liste.get(i));
            }
      }
Reklamlar

Labirent (Maze) Çözümü

Labirenti okuması kolay olsun diye int dizi şeklinde tanımladım 1 leri yol, 0 lar duvar olarak yaptım diziyi de 12*12 boyutunda yaptım. Main metodunun hemen başında k ve l değişkenleri labirenti nereden çözmeye başlayacağımızı belirtir. Örnekte int k=10,l=8; şeklinde aldım a dizisindeki labirente bakarsanız çıkışın 2 satır 0 sütunda olduğunuzu görürsünüz. Bu örnekte recursive fonksiyon kullandım. Program şu şekilde çalışıyor. Öncelikle sizin vermiş olduğunuz noktadan taramaya başlıyor. Bütün noktaları geziyor her gezdiği noktayı b ye kaydediyor. Bu kaydetmeler b nin içini silip yeniden doldurma şeklinde oluyor. Bilgimiz her seferinde kaybolduğu için dolaşım sırasında eğer çıkış bulunduysa bu bilgi silinmeden b yi c ye yedekliyoruz. Sonra b tekrar silinip diğer yolları bulmaya devam ediyor. Sonuçta da çıkışı bulduğumuz andaki bilgiyi c ye kaydettiğimiz için c yi ekrana yazdırıyoruz ve bu döngü sırasında hangi yollardan geçtiğini bize söylüyor.

Örnek olarak bizim başlangıç bilgimiz k=10,l=8 eğer programı başlatırsak çıktı şu şekilde olacak:

10 8
10 7
10 6
10 5
9 5
9 4
9 3
10 3
10 2
10 1
9 1
8 1
7 1
6 1
5 1
4 1
3 1
2 1
2 0

___________________________________________

static int [][] a={
{0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0,0,0},
{1,1,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,1,1,0,0,0},
{0,1,0,0,0,0,0,0,1,0,1,0},
{0,1,1,1,0,0,0,0,1,1,1,0},
{0,1,0,0,0,1,1,1,1,0,0,0},
{0,1,0,0,0,1,0,0,0,0,0,0},
{0,1,0,1,1,1,0,0,0,0,0,0},
{0,1,1,1,0,1,1,1,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0},};

static int [][] b=new int [56][2];
static int [][] c=new int [56][2];
static boolean sonuc=false;

public static void dolas1(int k,int l,int bsira){

if (k==0 || k==a.length-1 || l==0 || l==a.length-1){

b[bsira][0]=k;

b[bsira][1]=l;

for (int i = 0; i < b.length; i++) {

c[i][0]=b[i][0];

c[i][1]=b[i][1];

}

sonuc=true;

}else{

for (int i = k-1; i <= k+1; i++) {

for (int j = l-1; j <= l+1; j++) {

if ((i!=k)&&(j==l)||(i==k)&&(j!=l))

if (a[i][j]==1){

for (int j2=bsira; j2<b.length; j2++)

{

b[j2][0]=-1;

b[j2][1]=-1;

}

a[k][l]=0;

b[bsira][0]=k;

b[bsira][1]=l;

dolas1(i,j,bsira+1);

}

}

}

}

}

public static void main(String[] args) {

int k=10,l=8;

dolas1(k, l,0);

if (sonuc){

for (int i = 0; i < c.length; i++) {

if (c[i][0]==-1)

break;

else

for (int j = 0; j < c[0].length; j++) {

System.out.print(c[i][j]+” “);

}

System.out.println();

}

}else{

System.out.println(“sonuc yok”);

}

}

javada excel kullanımı.

Öncelikle javada Excel dosyalarını okumak için buradaki jar uzantılı dosyayı projemize eklemeliyiz. Bunun için dosyayı indirdikten sonra projemizin üzerine sağ tıklayıp “Built path>>Configure built path>>add external jars” tıklayıp gelen diyalog penceresinden indirdiğimiz dosyadaki “jxl.jar” dosyasını seciyoruz.

1. ve 2. sayfasındaki bilgiler resimdeki gibi olan masaüstündeki Excel dosyasının bilgileri okuyalım. Excel dosyasını tutabilmek için “workbook”, Excel dosyasının sayfalarını tutabilmek için “sheet”, her hangi hücreye ulaşmak için ise “getcell()” kodlarını kullanıyoruz. Alttaki programın çıktısı şu şekilde olur.

outlook
ahmet
outlook temperature humidity windy play
sunny 85 85 false no
sunny 80 90 true no
overcast 83 86 false yes
rainy 70 96 false yes
rainy 68 80 false yes
rainy 65 70 true no
overcast 64 65 true yes
sunny 72 95 false no
sunny 69 70 false yes
rainy 75 80 false yes
sunny 75 70 true yes
overcast 72 90 true yes
overcast 81 75 false yes
rainy 71 91 true no

Kod:

public static void main(String[] args) {
	try {//try catch kodu olmadan workbook kodu calısmıyor o yuzden kullanmalıyız.
		Workbook Dosya=Workbook.getWorkbook(new File("C:\\Users\\Ahmet\\Desktop\\veri.xls"));
		//Excel dosyasını tutmak bu şekilde yolunu belirtiyoruz. Dosya artık Excel dosyasını i tutuyor.
		Sheet Sayfa1=Dosya.getSheet(0);
		//resimdeki kırmızıyla belirtilen sayfa1 i tutmak icin getsheet(0) ı kulanıyoruz.
		Sheet Sayfa2=Dosya.getSheet(1);
		System.out.println(Sayfa1.getCell(0,0).getContents());
		//sayfa birdeki 0,0 konumundaki bilgiyi okumak icinde getContents() kodu kullanılır.
		System.out.println(Sayfa2.getCell(0,0).getContents());
		for (int i = 0; i < Sayfa1.getRows(); i++) {
			for (int j = 0; j < Sayfa1.getColumns(); j++) {								System.out.print(Sayfa1.getCell(j,i).getContents()+" ");
			}
			System.out.println();
		}
		//burdada tum sayfa1deki veriyi ekrana basıyoruz

		} catch (BiffException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
}

Sinema Salonu Algoritması

public static void main(String[] args) {
int deger;
Scanner aa=new Scanner(System.in);
System.out.println(“koltuk sayısı”);
int Ks=aa.nextInt();
int [][] dizi=new int[Ks][2];
for (int i = 0; i < dizi.length; i++) {
System.out.println(“Sinir seviyesini giriniz:”);
dizi[i][0]=aa.nextInt();
dizi[i][1]=i+1;
}
for (int i = 0; i < dizi.length; i++) {
if (dizi[i][0]>0){
deger=dizi[i][1];
for (int j = 0; j <dizi[i][0]; j++) {
dizi[i-j][1]=dizi[i-j-1][1];
}
dizi[i-dizi[i][0]][1]=deger;
dizi[i-dizi[i][0]][0]=0;
}
}
String sonuc=””;
for (int i = 0; i < dizi.length; i++) {
for (int j = 0; j < dizi.length; j++) {
if(dizi[j][1]==i+1)
sonuc+=j+1;
}
}
System.out.println(sonuc);
}

Odtü Bilgi Yarışması – Sinema Salonu

Sinema Salonu

Alphan’ın koridordan bozma sinema salonunda gösterilen film çok başarılı olduğundan olsa gerek ki salonda hiç boş koltuk kalmamıştır. Fakat müşteriler sinema perdesini iyi göremedikleri için biraz sinirlenmişlerdir. Her müşterinin sinir seviyesi, önünde oturan kendinden uzun insan sayısına eşittir. Alphan seyircilerin boylarını merak etmekte, ama salon karanlık olduğu için görememektedir. Sinirli müşterilerin homurtlularından hangi koltuktaki müşterinin ne kadar sinirli olduğunu söyleyebilmektedir. Sizden istenilen, Alphan’ın verdiği sinir seviyelerinden yola çıkarak her koltuktaki müşterinin boyunu bulmanız.

Varsayımlar

    Sinema salonu 1’erli N sıra koltuktan oluşmaktadır. (1 ≤ N ≤ 500000) Her müşterinin sinir seviyesi en az 0, en fazla N-1 olabilir. Her müşterinin boyu 1 ve N arasında (1 ve N dahil) bir tam sayıdır ve salonda boyu eşit herhangi iki müşteri yoktur.

Girdi (sinema.gir)

    Girdi dosyası sinema.gir’in ilk satırında sinema salonundaki koltuk sayısı olan N tamsayısı bulunacaktır. İkinci satırda N adet müşterinin sinir seviyesi sinema perdesine en yakın koltukta oturan müşteriden başlamak üzere aralarında birer boşlukla verilecektir.

Çıktı (sinema.cik)

    Programınız sinema.cik dosyasının ilk (ve tek) satırına N adet müşterinin boyunu sinema perdesine en yakın koltukta oturan müşteriden başlamak üzere aralarında birer boşluk bırakarak yazacaktır.

Örnek

 

sinema.gir: sinema.cik:
5
0 0 2 3 2
4 5 2 1 3

 

 

Huffman algoritması nedir?

Huffman kodu için tıkla.

Huffman Kodu, Bilgisayar biliminde, veri sıkıştırması için kullanılan, bir entropi kodlama algoritmasıdır. David A. Huffman tarafından 1952 yılında geliştirilmiştir.

Huffman’ın algoritması, her sembol (veya karakter) için özel bir kod üretir. Bu kodlar (ikilik sistemdeki 1 ve 0’lardan oluşan) bit haritası şeklindedir. Veri içerisinde en az kullanılan karakter için en uzun, en çok kullanılan karakter için ise en kısa kodu üretir.

Teknik

Huffman’ın algoritması, veri içerisindeki karakterlerin kullanım sıklığına (frekans) göre bir ağaç oluşturur. Ağacın en tepesinden aşağıya doğru ilerlerken sola ayrılan dal için 0, sağa ayrılan dal için 1 kodu verilir.

         5
       /   \
    0 3     2 1
     / \     \
  0 1   2 1   C
   /     \
  B       A

Yukarıda koyu rakamlar karakter sayısını (kullanım sıklığı-frekans) gösterir, eğik rakamlar ise bit kodlarını gösterir. Bu ağaç “ABC” karakterlerinden oluşan bir veri kümesi için üretilmiştir.

Ağaca göre karakterler için bit haritaları şu şekildedir:

B: 00
A: 01
C: 1

Oluşturulan bit haritaları karakterlerin veri içerisindeki konumlarına göre yerleştirilir. Ortaya çıkan bit haritası sıkıştırılmış veridir.

Örneğin; “BAACC” verisi elde edilen bit haritalarına göre yeniden düzenlenirse:

00 01 01 1 1 = 00010111 = 17h

Yani 1/5 oranında bir sıkıştırma elde edilmiş olur.

Ağacın oluşturulması

İlk önce karakterlerin frekansları (kullanım sıklıkları) hesaplanmalıdır.

Örneğin, elimizdeki veri "BAACC" olsun,

B: 1
A: 2
C: 2

B:1   A:2   C:2

1     2     2
 \     \     \
  B     A     C

En küçük iki frekans toplanır ve frekans tablosu yeniden düzenlenir,

B:1 + A:2   C:2

C:2   BA:3

2      3
 \    / \
  C  1   2
    /     \
   B       A

Tek bir ağaç oluşturulana kadar sürekli en küçük frekanslar toplanır,

C:2 + BA:3

CBA:5

      5
     / \
    3   2
   / \   \
  1   2   C
 /     \
B       A
 

KAYNAK : http://tr.wikipedia.org/wiki/Huffman_kodu 

Huffman kodu için tıkla.

Huffman algoritması

Öncelikle kod tamamen bana aittir. Huffman algoritmasının birkaç yöntemi varmış ama ben tamamen veri yapıları dersindeki öğrendiğim ağaçlar konusu yardımı ile kodladım. Kodu kısaca anlatmam gerekirse, öncelikle programı çalıştırınca ekrana bir şeyler girmemizi istiyor biz mesela “ahmetaha” yazalım ekrana çıktısı şu şekilde:

ahtme : 8

NO 0  1  Agac
0 – x  x  m
1 – x  x  e
2 – x x  t
3 – x  x  h
4 – x  x  a
5 – 0  1  me
6 – 2  5  tme
7 – 3  6  htme
8 – 4  7  ahtme

t : 110
e : 1111
a : 0
m : 1110
h : 10

010111011111100100

ahmetaha

şimdi sırayla anlatmak gerekirse ahtme : 8 burada hangi karakterlerin olduğu ve toplam kelimenin kaç karakterli olduğu gösterir yani ahmetaha da ahtme bu karakterler var ve toplam 8 karakterlidir.

NO 0  1  Agac
0 – x  x  m
1 – x  x  e
2 – x  x  t
3 – x  x  h
4 – x  x  a
5 – 0  1  me
6 – 2  5  tme
7 – 3  6  htme
8 – 4  7  ahtme

Bu kısım ağaç kısmı şu şekilde anlatacağım mesela t harfini bulalım öncelikle en alttan başlıyoruz 8 ci adımdan yani şimdi t yi arayacağız bunun için 0 veya 1 e bakacağız 8.ci satır söyle “8 – 4 7 ahtme” önce 0 kısmına bakalım 0 da 4 var 4. satıra bakınca sadece (4 – x x a) a var demek ki 1 kısmına bakacağız yani 7 ye bakacağız 7. satıra bakınca yine dalları olduğunu görüyoruz 0 kısımda 3 diyor 3. satıra bakarsak h var 1 kısmına bakmalıyız orda 6 var 6 satıra bakalım yine dallanıyor 0 kısmında 2 var 2 ci satıra bakıyoruz ve t yi buluyoruz. Sırayla adımlarımızı yazarsak önce 1 sonra yine 1 en son 0 kısımlarına baktık bu şu demek oluyor t nin kodu 110 dır. Zaten hemen altta çıkan listede karakterlerin kodlarını görüyoruz.

t : 110
e : 1111
a : 0
m : 1110
h : 10

010111011111100100

Burada ise yukarıdaki kodları kullanarak ahmetaha nın kod şeklinde görünüşünü görüyoruz en altta ise bu kodu kullanarak ağaç yardımıyla metni ekrana bastırıyoruz.

public static String[][] SayılarıBelirle(String kelime,String[][] sayılar){
int HarfAdeti = 0;
boolean varmı = true;
int sıra = 0;
int j;
for (int i = 0; i < kelime.length(); i++) {
for (int x = 0; x < i; x++) {
if (kelime.charAt(i) == kelime.charAt(x)) {
HarfAdeti–;
break;
}
}
HarfAdeti++;
}
sayılar = new String[HarfAdeti++][2];
for (int i = 0; i < kelime.length(); i++) {
for (j = 0; j < sayılar.length; j++) {
if (Character.toString(kelime.charAt(i)).equals(sayılar[j][0])) {
varmı = false;
break;
}
}

if (varmı) {
sayılar[sıra][0] = Character.toString(kelime.charAt(i));
sayılar[sıra++][1] = “1”;
} else {
sayılar[j][1]=Integer.toString((Integer.parseInt(sayılar[j][1]))+1);
varmı = true;
}
}
return sayılar;
}
public static void Sırala(String[][] sayılar){
String a1,a2;
for (int i = 0; i < sayılar.length; i++) {
for (int j = 0; j < sayılar.length-1; j++) {
if (sayılar[j+1][1]!=null)
if (Integer.parseInt(sayılar[j][1])>Integer.parseInt(sayılar[j+1][1])){
a1=sayılar[j][1];
a2=sayılar[j][0];
sayılar[j][1]=sayılar[j+1][1];
sayılar[j][0]=sayılar[j+1][0];
sayılar[j+1][1]=a1;
sayılar[j+1][0]=a2;
}
}
}
}
public static void AgacDoldur(String[][] sayılar,String [][]Agac){
for (int i = 0; i < sayılar.length; i++) {
Agac[i][2]=sayılar[i][0];
Agac[i][0]=Agac[i][1]=”x”;
}
for (int z = 0; z < sayılar.length – 1; z++) {
for (int i = Agac.length-1; i >=0 ; i–) {
if (sayılar[0][0].equals(Agac[i][2]))
Agac[sayılar.length+z][0]=i+””;
}
for (int i = Agac.length-1; i >=0 ; i–) {
if (sayılar[1][0].equals(Agac[i][2]))
Agac[sayılar.length+z][1]=i+””;
}
sayılar[0][0] = sayılar[0][0] + sayılar[1][0];
sayılar[0][1] = (Integer.parseInt(sayılar[0][1]) + Integer.parseInt(sayılar[1][1]))+ “”;
Agac[sayılar.length+z][2]=sayılar[0][0];
for (int i = 1; i < sayılar.length – 1; i++) {
sayılar[i][0] = sayılar[i + 1][0];
sayılar[i][1] = sayılar[i + 1][1];
}
sayılar[sayılar.length-1][0]=null;
sayılar[sayılar.length-1][1]=null;
Sırala(sayılar);
}
}
public static String yazdır(String[][] sayılar,String [][]Agac,HashMap<String, String> kod,String kelime){
System.out.println();
System.out.println(sayılar[0][0]+” : “+sayılar[0][1]);
System.out.println();
System.out.println(“NO  0  1  Agac”);
for (int i = 0; i < Agac.length; i++) {
if (i>9)
System.out.println(i+”- “+Agac[i][0]+”  “+Agac[i][1]+”  “+Agac[i][2]);
else
System.out.println(i+” – “+Agac[i][0]+”  “+Agac[i][1]+”  “+Agac[i][2]);
}
System.out.println();
for (String a : kod.keySet()) {
System.out.println(a + ” : ” + kod.get(a));
}
System.out.println();
String a=””;
for (int i = 0; i < kelime.length(); i++) {
a+=kod.get(Character.toString(kelime.charAt(i)));
}
return (a);
}
public static String Degerleri(int deger,String gelen,String sonuc,String [][]Agac){
if ((Agac[deger][0].equals(“x”)) && (Agac[deger][1].equals(“x”))) {
return sonuc;
} else {
for (int i = 0; i < Agac[Integer.parseInt(Agac[deger][0])][2].length(); i++) {
if (Agac[Integer.parseInt(Agac[deger][0])][2].charAt(i) == gelen.charAt(0)) {
sonuc+=”0″+ Degerleri(Integer.parseInt(Agac[deger][0]),gelen, sonuc, Agac);
return sonuc;
}
}

for (int i = 0; i < Agac[Integer.parseInt(Agac[deger][1])][2].length(); i++) {
if (Agac[Integer.parseInt(Agac[deger][1])][2].charAt(i) == gelen.charAt(0)) {
sonuc+=”1″+ Degerleri(Integer.parseInt(Agac[deger][1]),gelen, sonuc, Agac);
return sonuc;
}
}

}
return sonuc;
}
public static void KodlarıYazma(HashMap<String, String> kod,String [][]Agac){
int z=0;
while (Agac[z][0].equals(“x”)){
kod.put(Agac[z][2], Degerleri(Agac.length-1, Agac[z++][2], “”, Agac));
}
}
public static String metin(String [][]Agac,String gelen,int sıra,String metin,int aga){
if (sıra==gelen.length()){
return metin+Agac[aga][2];
}else{
if (Agac[aga][Integer.parseInt(Character.toString(gelen.charAt(sıra)))]==”x”)
return metin+Agac[aga][2]+metin(Agac, gelen, sıra, metin,Agac.length-1);
else{
return metin+metin(Agac, gelen, sıra+1, metin,Integer.parseInt(Agac[aga][Integer.parseInt(Character.toString(gelen.charAt(sıra)))]));
}
}
}
public static void main(String[] args) {
Scanner aa = new Scanner(System.in);
String kelime = aa.nextLine();
String[][] sayılar = null;
String gelen;
HashMap<String, String> kod = new HashMap<String, String>();
sayılar=SayılarıBelirle(kelime, sayılar);
Sırala(sayılar);
String [][]Agac=new String[sayılar.length*2-1][3];
AgacDoldur(sayılar, Agac);
KodlarıYazma(kod, Agac);
gelen=yazdır(sayılar, Agac,kod,kelime);
System.out.println(gelen);
System.out.println();
System.out.println(metin(Agac, gelen, 0,””,Agac.length-1));
}