folder Tahribat.com Forumları
linefolder Android - IOS Programlama
linefolder Android'de Java İle Basit Hesap Makinesi Yapalım



Android'de Java İle Basit Hesap Makinesi Yapalım

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Bu dersimizde temel olarak dört işlemi kapsayan, sayısal değer ve boş girdi kontrollerini yapan basit bir hesap makinesi yapalım.
    İlk olarak bir tane boş activity açalım.
    Proje Oluşturma

     

    Projemizin ayarlamalarını yapalım.
    Proje Ayarları



    Projemiz oluştu. Oluşan bu boş projenin dosyalarına bakalım.
    Boş Proje Yapısı

     

    Oluşturacağımız projenin EditText, TextView gibi elemanlarının biraz daha güzel görünmesi için drawable klasörüne bir tane shape_kenarlik.xml ekleyip renk, kenarlık gibi değerlerini içerisinde belirtelim.
    Drawable Klasörüne Tasarım Nesnesi Ekleyelim

     

    Açılan pencerede şu bilgilerle bir adet shape_kenarlik.xml dosyası oluşturalım.
    shape_kenarlik.xml

     

    shape_kenarlik.xml Betikleri

    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
      <solid android:color="#f2f2f2" />
      <stroke android:width="1dip" android:color="#FF6200EE"/>
    </shape>

     

    shape_kenarlik.xml Görünüm

     

    Ufak tefek hazırlıkları tamamladık. Sıra geldi ekrandaki öğeleri tasarlamaya. Ekran öğelerimiz şu şekilde olacak
    activity_main.xml Betikleri

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="10dp"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:weightSum="5">
                <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:hint="Sayı 1"
                    android:layout_weight="1"
                    android:layout_marginRight="2dp">
                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/etSayi1"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:ems="10"
                        android:inputType="numberDecimal"
                        android:background="@drawable/shape_kenarlik"
                        android:gravity="center"/>
                </com.google.android.material.textfield.TextInputLayout>
                <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:hint="İşlem"
                    android:layout_weight="1"
                    android:layout_marginRight="2dp">
                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/etIslem"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:ems="1"
                        android:inputType="text"
                        android:background="@drawable/shape_kenarlik"
                        android:gravity="center"/>
                </com.google.android.material.textfield.TextInputLayout>
                <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:hint="Sayı 2"
                    android:layout_weight="1"
                    android:layout_marginRight="2dp">
                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/etSayi2"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:ems="10"
                        android:inputType="numberDecimal"
                        android:background="@drawable/shape_kenarlik"
                        android:gravity="center"/>
                </com.google.android.material.textfield.TextInputLayout>
                <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_marginRight="2dp">
                    <com.google.android.material.textfield.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:ems="1"
                        android:inputType="text"
                        android:background="@drawable/shape_kenarlik"
                        android:gravity="center"
                        android:text="="
                        android:enabled="false"/>
                </com.google.android.material.textfield.TextInputLayout>
                <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:hint="Sonuç"
                    android:layout_weight="1">
                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/etSonuc"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:ems="10"
                        android:inputType="text"
                        android:background="@drawable/shape_kenarlik"
                        android:gravity="center"
                        android:enabled="false"/>
                </com.google.android.material.textfield.TextInputLayout>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp">
                <Button
                    android:id="@+id/btnSonuc"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:text="Hesapla"/>
            </LinearLayout>
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>



    Tasarım Önizleme



    Tasarım çalışması bitti. Hesaplamalar için yapılması gereken kodlamaya geçelim. Kodlama kısmındaki işleyiş;

    - EditText, Button gibi tasarım nesnelerini global olarak tanımlayacağız.

    - findViewById metodu sayesinde tasarım nesnelerini xml içerisinde bulacağız.

    - Button setOnClickListener olayı sayesinde btnHesapla adlı butona tıklandığını anlayıp işlemlerimizi başlatacağız.

    - getText() metodu ile EditText nesnelerine girilen değerleri alıp bir değişkene aktaracağız.

    - Regular Expressions (Düzenli İfadeler) sayesinde girilen bir değerin istediğimiz düzende olup olmadığını kontrol edeceğiz. Örnek olarak girilen bir değerin double olup olmadığını kontrol edeceğiz.

    - if koşulu ile gereken şartların sağlanıp sağlanmadığını kontrol edeceğiz. Örnek olarak bir sayının sıfıra bölümünün tanımsız olduğunu bildireceğiz.

    - Toast Mesaj sayesinde kullanıcıya uyarı verdireceğiz.

    - TextUtils.isEmpty() ile bir değerin var olup olmadığını kontrol edeceğiz.

    - switch case yapısı ile çarpma, bölme, çıkarma ve toplama işlemlerinin yapılmasını sağlayacağız.

    - setText() metodu ile çıkan sonucu ilgili EditText'e yazdıracağız.

    Kısaca işleyiş yapısını sizlere aktarmış olduk. Şimdi uygulama açıldığında çalışan activity olan (MainActivity.java) içerisinde kodlarımızı hazırlayalım.

     

    MainActivity.java

    package com.deneme.hesapmakinesi;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        EditText etSayi1, etIslem, etSayi2, etSonuc;
        Button btnSonuc;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            etSayi1 = (EditText) findViewById(R.id.etSayi1);
            etIslem = (EditText) findViewById(R.id.etIslem);
            etSayi2 = (EditText) findViewById(R.id.etSayi2);
            etSonuc = (EditText) findViewById(R.id.etSonuc);
            btnSonuc = (Button) findViewById(R.id.btnSonuc);
    
            btnSonuc.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String strSayi1 = etSayi1.getText().toString();
                    String strSayi2 = etSayi2.getText().toString();
                    String strIslem = etIslem.getText().toString();
                    etSonuc.setText("");
                    boolean blnSayi1 = fnDoubleKontrol(strSayi1);
                    boolean blnSayi2 = fnDoubleKontrol(strSayi2);
                    boolean blnIslem = fnIslemKontrol(strIslem);
                    String strUyari = "";
                    if (!blnSayi1)
                        strUyari = "- Lütfen sayı 1 giriniz.\n";
                    if (!blnSayi2)
                        strUyari += "- Lütfen sayı 2 giriniz.\n";
                    if (!blnIslem)
                        strUyari += "- Lütfen '+', '-', '*' veya '/' işlemi giriniz.\n";
                    else
                    {
                        if (strIslem.equals("/"))
                        {
                            if (strSayi2.contains("0"))
                                strUyari += "- Bir sayının sıfıra bölümü tanımsızdır";
                        }
                    }
    
                    if (!TextUtils.isEmpty(strUyari))
                        Toast.makeText(getApplicationContext(), strUyari, Toast.LENGTH_LONG).show();
                    else
                    {
                        String strSonuc = "";
                        switch(strIslem) {
                            case "+":
                                strSonuc = String.valueOf(Double.parseDouble(strSayi1) + Double.parseDouble(strSayi2));
                                break;
                            case "-":
                                strSonuc = String.valueOf(Double.parseDouble(strSayi1) - Double.parseDouble(strSayi2));
                                break;
                            case "/":
                                strSonuc = String.valueOf(Double.parseDouble(strSayi1) / Double.parseDouble(strSayi2));
                                break;
                            case "*":
                                strSonuc = String.valueOf(Double.parseDouble(strSayi1) * Double.parseDouble(strSayi2));
                                break;
                            default:
                                break;
                        }
                        etSonuc.setText(strSonuc);
                    }
                }
            });
        }
        public boolean fnDoubleKontrol(String strDeger)
        {
            boolean blnSonuc = false;
            if (!TextUtils.isEmpty(strDeger))
                blnSonuc = strDeger.matches("[0-9]{1,13}(\\.[0-9]*)?");
            return blnSonuc;
        }
        public boolean fnIslemKontrol(String strDeger)
        {
            boolean blnSonuc = false;
            if (!TextUtils.isEmpty(strDeger))
            {
                if (strDeger.equals("+") || strDeger.equals("-") || strDeger.equals("*") || strDeger.equals("/"))
                    blnSonuc = true;
            }
            return blnSonuc;
        }
    }


    Örnek 1



    Örnek 2

     

    Bol öğrenmeli günler.

    Kaynak: https://www.ontedi.com/android/androidde-java-ile-basit-hesap-makinesi-yapalim

    ontedi tarafından 04/Oca/21 17:59 tarihinde düzenlenmiştir

    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    zeybekustasi
    zeybekustasi's avatar
    Kayıt Tarihi: 24/Mayıs/2012
    Erkek

    Ellerine sağlık.


    https://www.youtube.com/watch?v=WC3-71NKwPw
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    garga
    garga's avatar
    Kayıt Tarihi: 29/Temmuz/2002
    Erkek
    zeybekustasi bunu yazdı

    Ellerine sağlık.

    +1

    Bravo diyorum.


    anca gidersin...
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Salu3
    Salu3's avatar
    Kayıt Tarihi: 23/Mayıs/2007
    Erkek

    Ellerine sağlık hocam


    Tren odun seçmez hacı abi...
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    eyuperol
    eyuperol's avatar
    Kayıt Tarihi: 13/Şubat/2011
    Erkek

    basitten başlayıp amatörce birşeyler yapıp biraz kendimi geliştirmek istedim. Bi kaç kurs buldum, Youtubeden eğitim videoları indirdim ama derstekinin aynısını yaparken bende bir hata çıkıyor hatayı çözmeye çalışıyorum ya da benzeri şekilde yapmak istiyorum (hatta bir iki konu açmıştım burada sanırım) yapamayınca hata alınca bütün hevesim kaçıyor. (bir ara kotlin kursu da aldım onda da sorun yaşayınca bıraktım) Danışabileceğim bir kaynak olsa devam ederdim belki ama pandemide evdeyken bu fırsatı tepiyorum hissiyatı var şuan. Geçen bir ara python bari öğreneyim dedim basit bir kurs aldım (MEBBİS'ten), BTK akademide  sıfırdan ileri seviyeye python kursuna başladım ama daha devam edemedim. Bunları neden yazdım bilmiyorum :) ama buradan sen ya da senin gibi birileri küçük küçük projeleri açıklamalı paylaşsa takılma durumu olursa yardımcı olabilirseniz hem bana hem de benim gibi düşünenelere yardımcı olursunuz. 

    Paylaşımınız için teşekkürler. Müsait olduğum ilk anda deneyeceğim

    ekleme:
    geçenlerde bir yerde denk geldi bu site> https://www.kodular.io/

    bir kaç video kaydettim bilgisayara bunlardan yardım alıp, basitte olsa bir şey yapayım dedim :)

    eyuperol tarafından 04/Oca/21 20:08 tarihinde düzenlenmiştir

    İnsanları ( küçük-büyük, yaşlı-genç, tanıdık-tanımadık, eşdost-sevgili vs vs ) sevin, saygınızı gösterin ama kesinlikle insanlara acımayın. Çünkü acıdığınız anda acınacak duruma düşüyorsunuz
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    @eyuperol hocam logcat (log kayıtlarının ekranı) kısmında oluşan hata ile ilgili sana mesaj verir. O mesaja göre arama yapar netten bulabilirsin. Yada forumlarda konu aç. Yada facebook ta android gruplarında sorunu dile getir mutlaka çözüme ulaşırsın.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    C_e_Z_a
    C_e_Z_a's avatar
    Kayıt Tarihi: 30/Ağustos/2005
    Erkek

    Üşenmemiş, betiklerine kadar yazmış - görsel koymuş ! yav böyle adamlara bayılıyorum yemin ederim... Ellerine, kollarına sağlık hocam.


    Makaleyaz.Net - Türkiye'nin Makale Alım-Satım Platformu
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek

    Eline, koluna, diline, dusuncene, klavyene saglik hocam.

    Peki dusuk ozellikli bilgisayarlarda android studio'yu verimli olacak sekilde calistirmanin bir yolu var midir? Benim kulusturde guc bela calistirmayi becerdim ama pek uygulama gelistirmeye uygun bir ortam olmadi.

    Aslinda basit sekilde (hobi) uygulama gelistirmek icin app inventor iyi ama online ve gorselliginin kotu olmasi biraz kotu, kodular gorsel olarak bir tik daha iyi ama yine online olmasi can sikici.

    Yine hobi niyetli oyun gelistirme icin tarayici uzerinden construct 3'u kullandim, epey keyifliydi. Tarayici kullanarak calissada sisteme girip sayfayi bir defa yukledikten sonra internet olmadan da calisabiliyordu (konu disi olacak ama web'de devam etmek isteyenler wasm'a baksin derim).

    Yine de gunun sonunda android icin soyle heh diyebilecegim bir seyle henuz karsilasmadim. Sozun ozu tavsiye edebilecegin epey hafif offline gelistirme ortami var mi? Hatta mumkunse atiyorum kotlin sisteme yuklenir, text editorde hiyerarsiye dikkat ederek yazabilirim. Tabi bu surecin de sac bas yolduracak cinsten olmamasi lazim.

    Misal bilgisayar icin olmasada telefon icin (iphone) yapilmis super bir uygulama, pythonista. Sunun android surumu olsa hic dusunmez alirdim.


    vatandaşa kafam girsin!..
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    _PesimisT_
    _PesimisT_'s avatar
    Kayıt Tarihi: 27/Nisan/2008
    Erkek

    Ellerine sağlık.

    Bu tarz mesajlarını görünce 2000li yılların başında webhocam yılları geliyor aklıma :) Klasik ASP li güzel yıllar :)


    Bu dahil; tüm genellemeler yanlıştır! Yolcu; Kendi Yolunda.... Şükür biz Allahtan başka sahibi olmayanlarız!
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    @telekom

    Hocam, bendeki bilgisayar i5 2. Nesil, 8gb Ram, SSD var. Kısmen zorlanıyorum. Android studio yanında VS yada PS açınca "yeter kasma beni diyor.". Açıkcası hafif bir ortam bulamadım Android çalışırken.

    @_PesimisT_

    Ahahah ne günlerdi onlar. ASP ile bir şeyler üretmek gayet güzeldi, scripting bir dildi ama gayet basit aşırı katı kuralları olmayan güzel bir yapıydı. Webhocama da çok takılırdık.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    umit
    umit's avatar
    Kayıt Tarihi: 23/Mayıs/2007
    Erkek

    eline sağlık


    le le le sakine