24 Nisan 2013 Çarşamba


Merhaba Arkadaşlar, Bu makalemde basit bir asal sayı bulma algoritmasını paylaşmak istiyorum.. Yapmaya çalıştığım şey 3'ten 100'e kadar olan asal sayıları ekrana yansıtmak... Bu sayı aralığını integer büyüklüğü el verdiği müddetçe değiştirebilirsiniz..
1. Versiyon
package asal;
/**
 *
 * @author Hasan Çelik
 */
public class Asal2 {
    public static void asalBul() {
        int a = 3;
        int b = 2;
        int a2 = 100;
        int kalan=0;
        for (int i = a; i <= a2; i++) {
            for (int j = b; j < i; j++) {
                kalan = i % j;
                if (kalan == 0) {
                    break;
                }
            }
            if(kalan!=0){
                System.out.println(i + "-");
            }
        }
    }
  
    public static void main(String[] args) {
        asalBul();
    }
}
2. Versiyon
package asal;
/**
 *
 * @author Hasan Çelik
 */
public class AsalSayi {
    public static void main(String[] args) {
        int a = 3;
        int b = 2;
        int a2 = 100;
        int kalan;
        boolean asalmi = false;
        for (int i = a; i <= a2; i++) {
            asalmi = true;
            for (int j = b; j < i; j++) {
                kalan = i % j;
                if (kalan == 0) {
                    asalmi = false;
                }
            }
            if (asalmi) {
                System.out.println(i + "-");
            }
        }
    }
}
Sonuç
3-5-7-11-13-17-19-23-29-31-37-41-43-47-53-59-61-67-71-73-79-83-89-97-BUILD SUCCESSFUL (total time: 1 second)
3. Versiyon
package asal;
import java.util.Scanner;
/**
 *
 * @author Hasan Çelik
 */
public class Asal {
    public static void asalBul(Integer girilenSayi) {
        if (girilenSayi != null && !girilenSayi.equals("")) {
            if ((girilenSayi % 2) == 0) { //yani sayımız çift ise kalan haliyle sıfır olur...
                System.out.println("Asal Degil..");
                return;
            } else {
                for (int i = 3; i < girilenSayi; i = i + 2) {
                    if ((girilenSayi % i) == 0) {
                        System.out.println("Asal Degil..");
                        return;
                    }
                }
            }
            if ((girilenSayi / 1 == girilenSayi) && (girilenSayi / girilenSayi == 1)) {
                System.out.println("Bu Bir Asal Sayıdır!!!");
                return;
            }
        }
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner klavye = new Scanner(System.in);
        Integer girilenSayi = klavye.nextInt();
        asalBul(girilenSayi);
    }
}
Sonuç
run:
23
Bu Bir Asal Sayıdır!!!
BUILD SUCCESSFUL (total time: 7 seconds)

6 Nisan 2013 Cumartesi


Arkadaşlar merhaba, bu makalede "Non-terminating decimal expansion" istisnası, normal şartlar altında ne sebepten alındığı hakkında kısaca bilgi vermeye çalışacağım..Bigdecimal değerler için illaki tam bölünmeyen sayılarla işlemler yaptığınız olmuştur.. Bu hata mesajı da tam olarak bununla alakalıdır. Bazı sayılar bölme işlemi sonucunda kendini virgülden sonra sonsuz tekrar edebilir...Örnek vermek gerekirse;

BigDecimal a = new BigDecimal("124");BigDecimal b = new BigDecimal("3"); a.divide(b) // results in the following exception.
normal şartlar altında bir sınırlama getirmediğimiz takdirde sonuç : 41.33333333333333333333333.....şeklinde tekrar eder ve sonucunda bu hata mesajını alırız... Tabiki bunu engellemek için java'nın bir yöntemi var. Nasıl mı?

a.divide(b, 2, RoundingMode.HALF_UP)
şimdi sonuç : 41.33 ' tür...


a.divide(b, 3, RoundingMode.HALF_UP)
şimdi ise sonuç :41.333 ' tür

görüldüğü üzere sonuç virgülden sonra belirlediğimiz sayıya göre yuvarlanmıştır...

Aşağıda ise sadece bir BigDecimal değerin virgülden sonraki hane sayısını, yani yuvarlama yapılacak sayıyı belirleme işlemi yer almaktadır.


BigDecimal sayi = new BigDecimal(100); 
BigDecimal yeniSayi= sayi.setScale(2, sayi.ROUND_HALF_DOWN); 

sonuç :100.00


java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1603)
at barcode.TarihHesapla.tarihEkle(TarihHesapla.java:90)
at barcode.CariListe.jXHyperlink7ActionPerformed(CariListe.java:3397)
at barcode.CariListe.access$700(CariListe.java:36)
at barcode.CariListe$8.actionPerformed(CariListe.java:1503)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at org.jdesktop.swingx.JXHyperlink.fireActionPerformed(JXHyperlink.java:225)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

5 Nisan 2013 Cuma



Merhaba arkadaşlar,

Bu makalede mysql kullanıcılarının pek sık karşılaşmadığı bir Exception(istisna)'dan bahsetmek istiyorum... Hatayı biraz daha Türkçe'leştirmek gerekirse productUnit kolonunda belirtilen sınırın aşıldığı anlaşılmaktadır. Yani kolonun veri tipi integer ise integer için belirlenen maximum aralık aşılmıştır... Bazı makalelerde sorunun aşılması için jdbc.Driver değişikliği hatayı kısa vadeli çözse de, asıl çözüm kolon için daha önceden belirlemiş olduğunuz veri tipi ile alakalıdır. Belli ki bu veri tipi bu kolona girilmek istenen değer için yeterli değildir.. Bunun için daha büyük veri saklayabilecek veri tipleri kullanmak gerekmektedir. Mesela tinyint yerine int veri tipinin kullanılması gibi örnekler verebilirim.



com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'productUnit' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3564) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2409) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2327) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2312) at barcode.PurchasePart.UrunSatisDatabase(PurchasePart.java:454) at barcode.PurchasePart.UrunSatis(PurchasePart.java:821) at barcode.PurchasePart.BarcodeControl(PurchasePart.java:264) at barcode.PurchasePart.jTextField1ActionPerformed(PurchasePart.java:3123) at barcode.PurchasePart.access$200(PurchasePart.java:61) at barcode.PurchasePart$3.actionPerformed(PurchasePart.java:2246) at javax.swing.JTextField.fireActionPerformed(JTextField.java:492) at javax.swing.JTextField.postActionEvent(JTextField.java:705) at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:820) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1639) at javax.swing.JComponent.processKeyBinding(JComponent.java:2851) at javax.swing.JComponent.processKeyBindings(JComponent.java:2886) at javax.swing.JComponent.processKeyEvent(JComponent.java:2814) at java.awt.Component.processEvent(Component.java:6065) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4651) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4481) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676) at java.awt.Component.dispatchEventImpl(Component.java:4523) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4481) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643) at java.awt.EventQueue.access$000(EventQueue.java:84) at java.awt.EventQueue$1.run(EventQueue.java:602) at java.awt.EventQueue$1.run(EventQueue.java:600) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$2.run(EventQueue.java:616) at java.awt.EventQueue$2.run(EventQueue.java:614) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:613) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)