Ana içeriğe atla

Abone Ol!

Javada 2 Boyutlu Array’i Spiral Formda Ekrana Recursive(Özyineli) Yazdırma

Java Görseli
Java Görseli

Sitemizi takip eden kullanıcılar için içeriğimizin ingilizce açıklamasını da ekliyoruz.
(Print a given Array(Matrix) in spiral form in Java recursively)

Bu örnek de Javada 2 Boyutlu array’i spiral formda ekrana Recursive(Özyineli) yazdırmayı sizlere aktaracağız. Sitemizi takip eden yabancı kullanıcılar için ayrıca açıklamaları ingilizce olarak da aktararak onlara da destek olmaya artık başlıyoruz. Hadi geçelim örneğimize.

Örnek

Aşağıdaki örnek de olduğu gibi verilen 2D Arrayi ekrana spiral formda bastıran recursive kod ;
(Given a 2D array, print it in spiral form. See the following example)

 Array:
        1     2   3    4
        5     6    7    8
        9   10  11  12
        13  14  15  16

 Output(çıktı): 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10

Örnek Görseli
Örnek Görseli

Kod array.java dosyasında program test edilmiştir. 

/***
     * This method prints 2D array on the screen in spiral format recursively.
     * To do this it uses a helper recursive method to Abstract implementation from user.
     * @param array 2D array will be printed.
     */
    public static void printArraySpiral(int[][] array){
        //we have 4 direction these are right,down,left,up;
        //directions numbers: right:1 , down: 2, left: 3, up:4
        //start with right
        int direction = 1;
        //start from [0][0]
        int x =0;
        int y =0;
        //set up boundaries
        int rowMin=0, rowMax =array.length-1, colMin = 0, colMax=array[0].length-1;
        //size start with 0 until all array is done
        int size=0;
        helperPrint (array,x,y,size,rowMin,rowMax,colMin,colMax,direction);
    }

    /***
     * A recursive helper method to print 2D array on the screen in spiral format recursively.
     * It is used to Abstract implementation from user.
     * @param arr 2D array will be printed
     * @param x current x coordinate of array.
     * @param y current y coordinate of array.
     * @param size a size starts from 0 until array size to stop recursion.
     * @param rowMin Minimum number of row in array(0)
     * @param rowMax Maximum number of row in array(row size)
     * @param colMin Minimum number of column in array(0)
     * @param colMax Maximum number of column in array(column size)
     * @param direction a direction when printing array.
     */
    private static void helperPrint(int[][] arr,int x,int y,int size,int rowMin,int rowMax ,int colMin,int colMax,int direction){
        if (size == arr.length*arr[0].length) //stop recursion
            return;
        System.out.print(arr[x][y] +" "); //print current cell with a space
        size++; //increment size
        boolean flag=false; //define a checker(it used to not damage adjusted values).
        //set up index values according to current situation and call function again
        if (direction == 1) { //right
            if (y == colMax) {
                direction = 2; //update to down
                rowMin++;
                x++;
                flag=true; //don't damage adjusted values
            } else {
                y++;
            }
        }

        if (direction == 2 && !flag) { //down
            if (x == rowMax) {
                direction = 3; //update to left
                colMax--;
                y--;
                flag=true; //don't damage adjusted values
            } else {
                x++;
            }
        }

        if (direction == 3 && !flag) { //left
            if (y == colMin) {
                direction = 4; //update to up
                rowMax--;
                x--;
                flag=true; //don't damage adjusted values
            } else {
                y--;
            }
        }

        if (direction == 4 && !flag) { //up
            if (x == rowMin) {
                direction = 1; //update to right
                colMin++;
                y++;
            } else {
                x--;
            }
        }
        helperPrint (arr, x, y, size, rowMin, rowMax, colMin, colMax, direction);
    }

Kod açıklaması

Bu örneği yapmak için bizler 2 ayrı method yazdık. 2 ayrı method yazmamızın sebebi kodu recursive olarak yazdığımız için methodumuza bazı ekstra parameter geçmek zorunda olduğumuz ve bu parametreleri kodu kullanan bir başka programcıdan gizlemek(soyutlamak) için yani methodu kullanan arkada ne olduğunu bilmiyor ve ayrıca bu parametrelerin olması gereken ilk değerlerini vermek(initialize).

Kısacası bizim direk çağırdığımız 1.public method parametrelerimizin ilk değerlerini veriyor(initialize) 2. Method asıl işi recursive olarak yaparak arrayimizi spiral form’da ekrana bastırıyor.

Recursive methodda yaptığımız iş ise kısaca şudur ; Dizinin index değerlerini ve diğer bazı değerleri kullanarak her yinelemeli(recursive) çağrıda, ekranda doğru değeri yazdırıyor. Bunu yapmak için bazı değerleri tutuyoruz ve basit matematik kullanarak bu değerlerle oynayarak ve kontrol ederek, problemi çözüyoruz. Sayıları değiştirdiğimizde, yönleri kontrol ediyoruz. Bu soru için yönler önemlidir.(sağ,sol aşşağı,yukarı)

(Explain of how to get solution)

In each recursive call by using index values of array and some other values it prints correct value on the screen. To do this we keep some values and by playing and checking these values by using observation and simple mathematic we solve the asked problem. When we change the numbers, we are checking the directions. Directions are important for this question.

Akif Kartal
Bilgisayar Mühendisi
Github: https://github.com/akifkartal03
Linkedin: https://www.linkedin.com/in/akif-kartal-03/
Twitter:  https://twitter.com/akifkartal3

Bu blogdaki popüler yayınlar

Scratch'ta Uçan Kuş Uygulaması

Scratch'ta uçan kuş uygulaması için öncelikle programımızı açıyoruz. Gerçekleştireceğimiz uygulama ile aşağıdaki başlıkları kodlayacağız.

Scratch ile Hesap Makinası Yapma

Bu içerikte sizlere internet üzerinde daha önce gerçekleştirilmemiş, orijinal ve güzel bir projeyi aktaracağız. Scratch ile Hesap Makinası Yapma işlem adımlarını sizlerle paylaşacağız.

Bu projeden önce gerçekleştirdiğimiz diğer projeleri aşağıda görebilirsiniz.
1.Scratch'ta İnteraktif Kalem Uygulaması
2.Scratch'ta Uçan Kuş Uygulaması

Gerçekleştireceğimiz Hesap Makinası Uygulaması için aşağıdaki her adımı Scratch üzerinden izleyerek gerçekleştirebilirsiniz. Scratch ile Hesap Makinası Yapma uygulaması toplamda 13 Adım ile tamamlanacaktır.

Adım 1: Öncelikle Scratch'i açalım. Ve kediyi silelim.
Adım 2: Yeni kukla ekleme alanından aşağıdaki alandan gözüken rakamları ekleyelim. Aşağıda iki görsel bulunuyor. Birinci olan yeni kukla eklemeniz için gerekli kısmı gösterecektir. Diğer görsel ise eklemeniz gereken kuklaları göstermektedir. Kutular içerisine alınmış her rakamı tek tek eklemeniz gereklidir.
Yukarıdaki görselde gördüğünüz Harfler sekmesinin içerisinde yer alan 0, 1, 2, 3, 4…

Mbot ile Çizgi İzleyen Robot Yapımı

Makeblock'un en eğlenceli ürünlerinden birisi olan Mbot ile bir çok kaliteli projeler ortaya çıkartabilirsiniz. Bu blog içeriğinde sizlere Mbot ile çizgi izleyen robot nasıl yapılır? hakkında bilgi aktaracağız.

Mbot ile ilgili daha önceden gerçekleştirdiğimiz Mbot ile Programlamaya Giriş blog yazımız için bu linke tıklayabilirsiniz.

Öncelikle Mbot'u bilgisayarımız ile bağlamamız gerekli. Bunun için aşağıdaki adımları takip etmelisiniz.

Adım 1:Bağlan > Seri Port > COM3 ile bağlantıyı sağlayabilirsiniz. Bilgisayarınızdaki porta göre bu COM8 de olabilir. Aşağıdaki görseldeki adımları izlemelisiniz.

Adım 2: Bu işlemi gerçekleştirdikten sonra Robotlar sekmesinden kırmızı noktanın yeşil olup olmadığına bakmalıyız. Eğer kırmızı ize bağlantınızı tekrar kontrol edin.

Adım 3: Eğer yeşil ise artık programlamaya başlayabiliriz. Tüm işlemleri Robotlar sekmesinden ve Kontrol sekmesinden aldığımız kod blokları ile gerçekleştiriyoruz. İlk olarak sadece robotumuzun sürekli ileri hareket etm…

Blogspot Bloglarının Yedeği Nasıl Alınır

Blogspot kullanan arkadaşlar bazen kendi sitelerine verilerini aktarmak veya Wordpress’e verileri taşımakta zorluklar yaşamaktadırlar. Bu konuda sizlere görsel olarak hazırladığım içeriği aktaracağım. Bu şekilde aldığınız yedeği isterseniz Wordpress isterseniz doğrudan kendi sitenizin veri tabanına aktarabilirsiniz. 
Video Özet
Yukarı bu işleri yaptığım bir video var izleyebilirsiniz veya doğrudan aşağıdaki işlem adımlarını izleyerek sizde doğrudan yapabilirsiniz. Adım 1: Blogger.com’a giriş yapmalıyız. Adım 2: Aşağıdaki görseldeki alana geliniz. Bu alandan “İçeriği Yedekle” butonuna tıklayınız. Adım 3: Aşağıdaki pencere açılacaktır. Burada da sadece “Bilgisayarınıza kaydedin” butonuna tıklayacaksınız. Ardından tüm veriler bilgisayarınıza inecektir. Adım 4: Şimdi tüm içeriği yedeklediniz. Bu yedeği eğer farklı bir blogger sitesine aktarmak istiyorsanız Adım 2’deki karşımıza çıkan “İçeriği İçe Aktar” ile aktabilirsiniz. Bunların yanı sıra belirli aralıklar ile içeriklerinizin yedeklerini al…

Alan Adı Transferi Nasıl Yapılır? #1

Alan Adı (Domain) Dünyası oldukça geniş oldukça farklı konuyu içerisinde barındıran bir konudur. Bu yazıda sizlerin alan adı transferi sırasında başınıza gelebilecek olası sonuçlar ile ilgili bir makale kaleme almak istedim. Bir firmadan başka bir firmaya alan adı transferinde kurumlar bazen sorun çıkartmakta bazen de kolaylıklar sağlayabilmektedir. Aslında en önemli konu bizim alan adı ile ilgili bildiklerimizdir.

Eğer daha önceden herhangi bir alan adı transfer etmedi iseniz lütfen karşılaştığınız sorunlarda firma görevlilerini sorumlu tutmayın. Sorunun olası sebepleri ile ilgili araştırma yapın. Problem belki doğrudan sizden kaynaklı olabilir.

Her firmanın alan adı transfer süreci azda olsa farklılık göstermektedir. Bu pazardaki rekabet ile ilgilidir. Bunun yanı sıra bu yazı da sizlere karşılaşma ihtimaliniz yüksek olan durumlar ile ilgili bilgi verilecektir.
Alan Adı Süresi Hiçbir kurum alan adının süresinin bitmesine tam 2 ve ya 3 gün kalmışken transfer süreci başlatmanızı istem…