Hatalı Kod:
class Urun {
private String ad = "";
private int fiyat = 0;
public Urun(String ad, int fiyat) {
this.ad = ad;
this.fiyat = fiyat;
}
public int getFiyat() {
return fiyat;
}
public void setFiyat(int fiyat) {
this.fiyat = fiyat;
}
public String getAd() {
return ad;
}
public void setAd(String ad) {
this.ad = ad;
}
}
public class Satis {
private ArrayList<Urun> urunler = new ArrayList<Urun>();
public void yeniUrunEkle(Urun urun) {
urunler.add(urun);
}
public void urunCıkar(String urunAdi) {
Urun silinecekUrun = null;
boolean sil = false;
for (Urun u : urunler) {
if (u.getAd().equals(urunAdi)) {
silinecekUrun = u;
sil = true;
break;
}
}
if (sil) {
urunler.remove(silinecekUrun);
}
}
public int toplamFiyat() {
int toplamFiyat = 0;
for (Urun u : urunler) {
toplamFiyat += u.getFiyat();
}
return toplamFiyat;
}
public static void main(String[] args) {
Satis satis = new Satis();
satis.yeniUrunEkle(new Urun("Harddisk",1000));
System.out.println(satis.toplamFiyat());
satis.yeniUrunEkle(new Urun("Ekran Karti",2000));
System.out.println(satis.toplamFiyat());
satis.yeniUrunEkle(new Urun("Ses Karti",1500));
System.out.println(satis.toplamFiyat());
satis.urunCıkar("Harddisk");
}
}
Şimdi bu kodumuzda neler eksik ve neler hatalı ona bakacağız baya hatalı bir kod olduğunu söylemem gerek.
1-) Burada en dikkat çeken hata toplamFiyat() metodudur. Bu metotda her çağırışta fiyat yeniden toplanmaktadır. Bunun yerine yapılması gereken ise bir global toplam fiyat değişkeni yapıp sınıfı buna göre dizayn etmekten geçer. Bu şekilde her toplam metodu çağırıldığında bütün liste yeniden taranmamış olur. Bu tip hatalar programın gereksiz yere bilgisayar kaynaklarını kullanmasına sebep olur.
public class Satis {
private int toplamFiyat = 0;
private ArrayList<Urun> urunler = new ArrayList<Urun>();
public void yeniUrunEkle(Urun urun) {
urunler.add(urun);
toplamFiyat += urun.getFiyat();
}
public void urunCıkar(String urunAdi) {
Urun silinecekUrun = null;
boolean sil = false;
for (Urun u : urunler) {
if (u.getAd().equals(urunAdi)) {
silinecekUrun = u;
sil = true;
break;
}
}
if (sil) {
urunler.remove(silinecekUrun);
toplamFiyat -= silinecekUrun.getFiyat();
}
}
public int toplamFiyat() {
return toplamFiyat;
}
public static void main(String[] args) {
Satis satis = new Satis();
satis.yeniUrunEkle(new Urun("Harddisk", 1000));
System.out.println(satis.toplamFiyat());
satis.yeniUrunEkle(new Urun("Ekran Karti", 2000));
System.out.println(satis.toplamFiyat());
satis.yeniUrunEkle(new Urun("Ses Karti", 1500));
System.out.println(satis.toplamFiyat());
satis.urunCıkar("Harddisk");
}
}
2-)Bu programdaki diğer bir hata ise urunCikar(String urunAdi) metodunda kullanılan foreach döngüsüdür. Bu şekilde isimle ürün arama işlemlerinde Hashtable yapısı kullanılması program sistem kaynakları açısından çok büyük yararlar kazandırır.
Hashtable veri yapısına göre Satis sınıfımızı düzenlersek.
public class Satis {
private int toplamFiyat = 0;
private Hashtable<String,Urun> urunler = new Hashtable<String,Urun>();
public void yeniUrunEkle(Urun urun) {
urunler.put(urun.getAd(), urun);
toplamFiyat += urun.getFiyat();
}
public void urunCıkar(String urunAdi) {
Urun silinecekUrun = urunler.remove(urunAdi);
if (silinecekUrun != null) {
toplamFiyat -= silinecekUrun.getFiyat();
}
}
public int toplamFiyat() {
return toplamFiyat;
}
public static void main(String[] args) {
Satis satis = new Satis();
satis.yeniUrunEkle(new Urun("Harddisk", 1000));
System.out.println(satis.toplamFiyat());
satis.yeniUrunEkle(new Urun("Ekran Karti", 2000));
System.out.println(satis.toplamFiyat());
satis.yeniUrunEkle(new Urun("Ses Karti", 1500));
System.out.println(satis.toplamFiyat());
satis.urunCıkar("Harddisk");
}
}
Hiç yorum yok:
Yorum Gönder