Kategori arşivi: Java

Java List remove() UnsupportedOperationException Hatası ve Çözümü

Bu hatayı aldığınızda öncelikle listelerde geçerli olan remove(int index) fonksiyonunun referans sayfasına bakalım;

Throws:
UnsupportedOperationException – if the remove method is not supported by this list.

Aslında hata gayet açıklayıcıydı ama başka tür hatalar aldığınızda da referans sayfasına bakmanızda fayda olduğundan bu aşamayı da yazdım.

Ben bu hatayı Arrays.asList ile liste oluşturduğumda aldım;

        List enumList = Arrays.asList(ApplicationStatus.values());
        enumList.remove(3);

Bu kodun amacı ApplicationStatus sınıfındaki enum degerleri bir listeye atıp ardından bazı elemanları silme işlemi yapmaktı.

Bu şekilde asList ile oluşturulan listeler java.util.Arrays$ArrayList gibi bir liste döndürüyor ve bu tip listeler remove() add() gibi fonksiyonları desteklemiyor. Bu sebepten UnsupportedOperationException hatasını alıyoruz.

Bunun çözümü bir şekilde düzgün bir liste oluşturmak. Ben şöyle yaptım;

        List enumList = Arrays.asList(ApplicationStatus.values());
        List realList = new ArrayList();
        for (int i = 0; i < enumList.size(); i++) {
            realList.add(enumList.get(i));
        }
        realList.remove(3);

Artık realList ile istediğim gibi remove(), add() fonksiyonlarını kullanabiliyorum.

Java BigDecimal.divide() fonksiyonu

Java’da iki BigDecimal değeri divide() fonksiyonu ile bölmek istediğimde şu hatayı aldım;

Non-terminating decimal expansion; no exact representable decimal result.

Hatayı almamın sebebi divide fonksiyonunu yanlış kullanmammış. Şöyle iki değişkenimiz olsun;

BigDecimal sayi1 = BigDecimal.valueOf(100);
BigDecimal sayi2 = BigDecimal.valueOf(50);

Bunları bölmeye çalışalım;

sayi1.divide(sayi2);

İlgili referans sayfasından da görebileceğiniz gibi bu şekilde bir kullanım yanlış. roundingMode parametresini kullanmamız zorunlu. Peki roundingMode kullanmadan bölmek mümkün mü ? Ben böyle yaptım (alttaki kod tek satır));

BigDecimal sonuc = new BigDecimal(sayi1.doubleValue() / sayi2.doubleValue());

Bu kod çalıştı. Bunun daha iyi bir yolu varsa yorum olarak yazarsanız sevinirim.

Java Console’da String Formatlama – Printf()

Bu ara java ile uğraşıyorum.. Gerçekten güzel bir dil. Eğer Eclipse gibi bir editör ile yazarsanız çok kolay bir dil haline geliyor. Henüz tam olarak OOP (Object Oriented Programming (Nesneye Yönelik Programlama)) mantığım çok iyi olmadan yazsam da bir şeyler yazabiliyorum : ) Konsolda çalışıyorum ve konsolda string formatlamayı internette çok aradım, sonunda buldum.. Şöyle oluyormuş… Okumaya devam et

Java’da Değişkeni String’ten Integer veya Double’a Çevirme (String to Int, Double)

Bir değişkeni integer’dan double’a cast ederek çevirmek kolay çünkü ikisi de aynı sınıftan türemişler.. bknz.

int a = 50;
double b = (int) a;

gibi.. Fakat bir string, sayıya aynı sınıftan türemedikleri için cast ederek çevrilemiyor, parse etmek gerekiyor.. Şöyleki;

String numara = 60;
double no = Double.parseDouble(numara);

üstteki kod string’i double’a çeviriyor. Integer’a çevirmek için double gördüğünüz yere Integer yazın :)

Pardus Linux+Eclipse+Java ile MySQL’e Bağlanmak

Pardus 2007.3’e kurduğum Eclipse yazılım geliştirme programında java dili kullanarak MySQL’e bağlanmaya çalışıyordum bir süredir (1-2 gündür). Ama bir türlü bağlanamadım. Bağlanmaya çalıştığımda şu hatayı alıyordum;

Cannot connect to db/user. Check your URL
Communications link failure

Last packet sent to the server 0 ms ago

Sonunda çözümü buldum… Problem mysql’in ilk kurulumuyla gelen ayarların dışarıdan erişime izin vermemesiymiş.. Düzeltmemiz gereken dosya /etc/mysql/my.ini dosyası.. Pardusta düzeltmeyi şu şekilde yapabiliyoruz; Okumaya devam et