Mehmet Ethem SULAN

resime link ekleme
jsp sayfasında javascript kullanarak resime link eklemeye çalıştım.Ayrıca harici javascript dosyasını jsp sayfasında çağırdım.
harici.js

//<%--image tıklaninca ethemsulan.com sitesine gider. Url  Nokta/resimKalsörIsmi/resimIsmi.resimUzantisi--%>
document.write('<a href="http://www.ethemsulan.com"><img src="./images/javaci.png"></a>')

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
    <div align="righ">
<%-- Javascript dosyamizi jsp sayfasinin icinde sr="dosyaIsmi.js" seklinde cagiriyoruz.--%>
        <script language="JavaScript" src="harici.js"/>
    </div>
    </body>
</html>

Amaç A,B,C,D,E,F,G,H,I harflerini 3×3 lük matriste aynı satır ve sütuna aynı harf gelmemek şartıyla kaç farklı şekilde sıralarız?
ilk
Örnek sıralama 2
ikinci
Örnek sıralama 3
uc
Yukardaki şekilde farklı sıralamaya çalışıyorum.
Eğer A seçilirse geriye I, H, F,E den biri gelebilir.Bunu test metodumuzda yazıyorum.
rt
Aynı şekilde eğer E seçilirse I, G, C, A dan biri gelebilir. ayniHarfSatirVeSutundaVarMi() metodun içinde test ediyorum.
esec
Eğer F seçilirse A,C,G,I den biri gelebilir. Yani seçilen harfın satır ve sutununu siliyorum geri kalanlardan biri gelirse true dönderir.Ben bu şekilde düşündüm.
ret
Ilk 6 durumın ekran çıktısı
trye
Son çıktı
tryu
Çözüm: 3×3 luk matriste 9 kutucuk var.
1.kutucuk: 9 sayidan biri gelebilir(0,1,2,3,4,5,6,7,8)
2.kutucuk: 8 sayidan biri gelebilir(0.kutucukta biri kullanildi)
3.kutucuk: 7 sayidan biri gelebilir
4.kutucuk: 6 sayidan biri gelebilir
5.kutucuk: 5 sayidan biri gelebilir
6.kutucuk: 4 sayidan biri gelebilir
7.kutucuk: 3 sayidan biri gelebilir
8.kutucuk: 2 sayidan biri gelebilir
9.kutucuk: 1 sayidan biri gelebilir
Yani toplam 9! (9 faktoryel) farkli sekilde siralama yapilabilir.
9!=362880 farklı durum var.

package ethemsulan.com;

import java.util.ArrayList;

public class HarfSiralama {
		static String[] dizim=new String[9];
		static String[] kulHarfler={"A","B","C","D","E","F","G","H","I"};
		static ArrayList<String> oncekiDurumKiyasla=new ArrayList<String>();
	public static void main(String[] args) {
//Baslangic degerlerini null atadik
		for(int i=0;i<9;i++){
			dizim[i]="";
		}
//Recursive metodumuzu cagiriyor
		HarfSiralama.durumlariBul(0);
	}
	static int sayac=0;
	static int ilkAltiDurum=0;
	private static void durumlariBul(int kutu) {
//Durumlar fazla oldugundan ilk alti durumu consolde gormek icin alt satirdaki(if(ilkAltiDurum==6){System.exit(0);}) yorumu kaldirin.
//Kodu calistirinca ilk durum ABCDEFGHİ  ve son durum(yani 362880. durum) İHGFEDCBA oldugunu gorurusunuz.
//		if(ilkAltiDurum==6){System.exit(0);}
		//Durumlari test et eger istenen deger sagliyorsa ekrana yaz. Biz dizideki degerleri
//yazacagimizdan istenen deger dizi boyutudur.yani 9
		if(kutu==9){
			sayac++;
			ilkAltiDurum++;
			int uc=0;
//Her bulunan degeri topla ve(yani her bir siralamayi oncekilerle kiyasla aynisi varsa exit(0) ile islemi durdur)
			String ayniMi="";
			System.out.println(sayac+" . durum");
			for(int i=0;i<9;i++)
			{
				System.out.print(dizim[i]);
				ayniMi+=dizim[i];
				uc++;
				if(uc==3){
					System.out.println("");
					uc=0;
				}
			}
// onceki durumlarla kiyasla eger ayni iki durum varsa System.exit(0) ile islemi durdur.
			if(oncekiDurumKiyasla.contains(ayniMi)){
				System.out.println(ayniMi+" daha onceden varmis");
				System.exit(0);
			}else{
				oncekiDurumKiyasla.add(ayniMi);
			}
			return;
		}
//Asil islem yeri burasidir. Aranan durum test et  ve tum durumlari gozden gecir
		for (String harf : kulHarfler) {
//Eger bu sayi kullanildiysa ayni satir ve sutunda bir daha kullanilmasin diye geciyoruz.Yani bir sonraki duruma bakiyoruz
			if(buHarfDahaOnceKullanildiMi(harf)==false){
				continue;
			}
//Ayni harf satir ve sutuna gelmemesi lazim.Cunku sartimiz ayni harf satir ve sutuna gelmemek sartiyla kac farkli
//sekilde yerlestirme yapabiliriz.Ornek yerlestirme resimde var.Ayni harf yoksa test dogru
			else if(ayniHarfSatirVeSutundaVarMi(dizim[kutu],harf)){
				dizim[kutu]=harf;
				durumlariBul(kutu+1);
				dizim[kutu]="";
			}
		}
	}
//Eger dizi de hic deger yoksa ilk gelen degeri ekle.Eger deger varsa kontrol et. Eger a gelmisse E, F,H, İ den biri ancak gelebilir
	private static boolean ayniHarfSatirVeSutundaVarMi(String varOlanHarf, String gelOlHarf) {
//ABCDEFGHİ VE İHGFEDCBA durumlarini iki farkli durum olarak yazilmasini saglar.Gercekten de iki farkli durumdur.
		if(varOlanHarf.equals("")){
			return true;
		}
		else if(varOlanHarf.equals("A")&& (gelOlHarf.equals("E") | gelOlHarf.equals("F") | gelOlHarf.equals("H") | gelOlHarf.equals("I")))
		{
			return true;
		}
		else if(varOlanHarf.equals("B")&& (gelOlHarf.equals("D") | gelOlHarf.equals("F") | gelOlHarf.equals("G") | gelOlHarf.equals("I")))
		{
		return true;
		}
		else if(varOlanHarf.equals("C")&& (gelOlHarf.equals("D") | gelOlHarf.equals("E") | gelOlHarf.equals("G") | gelOlHarf.equals("H")))
		{
		return true;
		}
		else if(varOlanHarf.equals("D")&& (gelOlHarf.equals("B") | gelOlHarf.equals("C") | gelOlHarf.equals("H") | gelOlHarf.equals("I")))
		{
		return true;
		}
		else if(varOlanHarf.equals("E")&& (gelOlHarf.equals("A") | gelOlHarf.equals("C") | gelOlHarf.equals("G") | gelOlHarf.equals("I")))
		{
		return true;
		}
		else if(varOlanHarf.equals("F")&& (gelOlHarf.equals("A") | gelOlHarf.equals("B") | gelOlHarf.equals("G") | gelOlHarf.equals("H")))
		{
		return true;
		}
		else if(varOlanHarf.equals("G")&& (gelOlHarf.equals("B") | gelOlHarf.equals("C") | gelOlHarf.equals("E") | gelOlHarf.equals("I")))
		{
		return true;
		}
		else if(varOlanHarf.equals("H")&& (gelOlHarf.equals("A") | gelOlHarf.equals("C") | gelOlHarf.equals("D")| gelOlHarf.equals("F")))
		{
		return true;
		}
		else if(varOlanHarf.equals("I")&& (gelOlHarf.equals("A") | gelOlHarf.equals("B") | gelOlHarf.equals("D") | gelOlHarf.equals("E")))
		{
		return true;
		}
		return false;
	}
//Harf dizide varsa false donder. Yeni bir harf ise yani dizide yoksa true donder.
	private static boolean buHarfDahaOnceKullanildiMi(String harf) {
		for(int i=0;i<9;i++){
			if(dizim[i].equals(harf))
				return false;
		}
		return true;
	}

}

Sayılarla yapılmış örneğe bakmak için tıklayın.Ikisinde de aynı mantık var

Aynı şekilde çözülmüş başka bir örnek. Resimli olarak gösterilmiş.
Şartımız aynı satır ve sütuna aynı sayı gelmeyecek şekilde 0,1,2,3,4,5,6,7,8 sayılarını 3×3 lük matriste kaç farklı şekilde sıralarız?
İlk ve son durum çiktilari:ilk
son

package ethemsulan.com;

import java.util.ArrayList;

public class Puzzle {
	  static int[] dizi=new int[9];
	  static ArrayList<String> kontrol = new ArrayList<String>();
//Durumlar cok fazla(362880 durum) oldugundan hepsini consoleden goremiyoruz.Ilk 5 durumu gostermek
//icin if(ilkBesDurum==5) tek, satirin yorumunu kaldiriniz
	    static int ilkBesDurumuGoster=0;
	    static int sayac=0;
	    public void durumBul(int kutu){
//if(ilkBesDurumuGoster==5){ System.exit(0);}
	        if(kutu==9){
//Kutu 9 oldugunda yani aranan sartlar dizi dolmussa (mesela 0 1 2 3 4 5 6 7 8) durum olarak ekrana yaziyor ve sayac artiyor
	            sayac++;
	            ilkBesDurumuGoster++;
	            System.out.print(sayac+". durum\n");
	            int uc=0;
	            String str = "";
	            for(int i=0;i<9;i++)
	            {
	                System.out.print(dizi[i]);
	                str += dizi[i];
	                uc++;
	                if(uc==3){
	                	System.out.println();
	                	uc=0;
	                }
	            }
//Bulunan durum oncekilerle karsilastiriliyor.Eger ayni durum varsa System.exit(0);ile programi durduruyor
//Ayni durum yoksa else kisminda var olan durumlara ekliyor ki sonra gelenler ile karsilastirilsin.
	            if( kontrol.contains(str) ){
	            	System.out.println(str + " daha onceden varmis");
	            	System.exit(0);
	            } else {
	            	kontrol.add(str);
	            }

	            System.out.println("");
	            return;
	        }
//Bu sayi dizi de kullanildi mi? Cunku bizim sartimiz bir sayi ayni satir ve sutunda 2 sefer kullanilamaz.
	        for(int i=0;i<9;i++){
	        	if(dahaOnceKullanildiMi(i)==false){
	                continue;
	            }
//Test aradigimiz sart saglaniliyor mu?
	            else if(test(kutu,i)){
	                dizi[kutu]=i;
	                durumBul(kutu+1);
	                dizi[kutu]=-1;
	            }
	        }
	    }
	    public boolean dahaOnceKullanildiMi(int sayi){
	        for(int j=0;j<dizi.length;j++){
	            if(dizi[j]==sayi){
	                return false;
	            }
	        }
        return true;
	    }
		public boolean test(int kutu, int b){
//Ornegin ilk calistiginda ve 0 gelince dizi bos oldugundan (dizi[0]==-1) ilk gelen elamani ekle yani true donder.
	    	if(dizi[kutu]==-1){
	    		return true;
	    	}
//Bunlar link verilen benzer ornekte resimli olarak gosterilmistir.Cunku bu sartlarin anlasilmasi lazim.
	        if(kutu==0 &&(b==4 | b==5 | b==7 | b==8)){
	            return true;
	        }else if(kutu==1 && (b==3 | b==5 | b==6 | b==8)){
	            return true;
	        }else if(kutu==2 &&(b==3 | b==4 | b==6 | b==7)){
	            return true;
	        }else if(kutu==3 &&(b==1 | b==2 | b==7 | b==8)){
	            return true;
	        }else if(kutu==4 &&(b==0 | b==2 | b==6 | b==8)){
	            return true;
	        }else if(kutu==5 &&(b==0 | b==1 | b==6 | b==7)){
	            return true;
	        }else if(kutu==6 &&(b==1 | b==2 | b==4 | b==5)){
	            return true;
	        }else if(kutu==7 &&(b==0 | b==2 | b==3 | b==5)){
	            return true;
	        }else if(kutu==8 &&(b==0 | b==1 | b==3 | b==4)){
	            return true;
	        }
	        return false;
	    }

	    public static void main(String[] args) {
	    	Puzzle nesnem=new Puzzle();
	        for(int i=0;i<9;i++){
	            dizi[i]=-1;
	        }
	         nesnem.durumBul(0);

	    }
}

Cengiz TOGAY hoacama teşekkürler. Recursive mantığını iyi bir şekilde bize öğretti.

Sınıf Diagramları Test.java ve Aşağıdaki Kodların Hepsi Için Tıklayın(Ana Sınıf)
Pizza.java

package Pizza;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import ethemsulan.com.Malzeme;
import ethemsulan.com.MalzemeListesi;
public abstract class Pizza
{
	protected static double karOrani=0;
//Malzeme ismi ve fiyati tutan HashMap.
	protected Map<String, Integer> gerekliMalzeme=new HashMap<String, Integer>();
	protected MalzemeListesi ml = null;
	protected int satisFiyati = 0;
	private double kalanMalzeme=0;
	MalzemeListesi enSon_kalan_malzemeler=null;
//Piza olsuturmaya yetecek kadar menu varsa true donderir.
	public boolean pizzaYap()
	{
//pizzaYap() metodu cagrildiginda istenen malzeme miktari mevcutsa o zaman toplamdan dusuruluyor ve
//menu olusturuluyor
		boolean kontrol=malzemeYetiyormu();
		Iterator it=gerekliMalzeme.keySet().iterator();
		double hesaplananOran = 0.0;
//Malzeme yetmiyorsa bir islem gerceklestirilimiyor
		if(kontrol){
		while (it.hasNext())
		{
			Object gecerlimalzeme = it.next();
			int miktar=gerekliMalzeme.get(gecerlimalzeme);
			String isim=gecerlimalzeme.toString();

			Malzeme m = ml.getMalzeme(isim);
			kalanMalzeme=0;
//Ikinci sefer gene malzeme miktari yetip yetmedigi kontrol ediliyor.Bunu yazmazsakta olur
			if( m != null && m.getMiktar() >= miktar){
				m.miktarDusur(miktar);
//Miktar gr oldugundan /1000 diyecez. kg cinsindendir.
				hesaplananOran += (miktar / 1000.0) * m.getFiyat();
				this.kalanMalzeme=hesaplananOran;
			}
		}
		return true;
		}
		return false;

	}
//Istenen menude kullanilan malzeme miktari kontrol ediliyor.
//Eger uretilecek menude yeterince mealzeme varsa true donderir.Bir tane bile eksik malzeme varsa
//false donderiyor
	public boolean malzemeYetiyormu(){
		Iterator it=gerekliMalzeme.keySet().iterator();
		while (it.hasNext())
		{
			Object gecerlimalzeme = it.next();
			int miktar=gerekliMalzeme.get(gecerlimalzeme);
			String isim=gecerlimalzeme.toString();
			Malzeme m = ml.getMalzeme(isim);
			if( m != null && m.getMiktar() < miktar ){
				return false;
			}
		}
		return true;
	}
//O anda hangi menu uretiliyorsa bir ust dugume(syotu olarak) ciktiginda
//son uretilen menuı malzemeleri geri ekleniliyor.Bu geri ekleme sanki bir ust dugume
//cikmis gibi oluyor.
	public void pizzayaGeriEkle(){
		Iterator it=gerekliMalzeme.keySet().iterator();
		while (it.hasNext())
		{
			Object gecerlimalzeme = it.next();
			int miktar=gerekliMalzeme.get(gecerlimalzeme);
			String isim=gecerlimalzeme.toString();

			Malzeme m = ml.getMalzeme(isim);
			m.miktarEkle(miktar);
		}
	}
//Butun menuler uretildikten sonra kalan malzemeler cope gittiginden bunlar zarar olarak hesaplaniliyor.
//Burada bu malzemeler ne kadar tutugunu hesapliyor ve kar orani hesaplanacagi yerde bunu zarar olarak cikartiyoruz.
	public double kalanMalzeme(){
		kalanMalzeme=0;
		Iterator it=gerekliMalzeme.keySet().iterator();
		while (it.hasNext())
		{
			Object gecerlimalzeme = it.next();
			int miktar=gerekliMalzeme.get(gecerlimalzeme);
			String isim=gecerlimalzeme.toString();
			Malzeme m = ml.getMalzeme(isim);
			kalanMalzeme += (m.getMiktar() / 1000.0) * m.getFiyat();
		}
		return kalanMalzeme;
	}

}

Ana Sınıf
Malzeme.java

package ethemsulan.com;

public class Malzeme
{
//Mlazemeismi,miktari ve fiyati.Mesela sogan,100 gr ve 1 ytl kilosu
	private String isim;
	private int miktar=0;
	private int fiyat;
	public Malzeme(String isim, int miktar, int fiyat) {
		this.isim=isim;
		this.miktar=miktar;
		this.fiyat=fiyat;
	}

	public String getIsim()
	{
		return isim;
	}

	public int getMiktar() {
		return miktar;
	}

	public int getFiyat() {
		return fiyat;
	}
//Tek tek miktarlari dusuruyor.Mesela sogan kullanilan miktar kadar toplamdan dusuluyor.
	public void miktarDusur(int miktar)
	{
		this.miktar -=miktar;
	}
	public void miktarEkle(int miktar){
		this.miktar+=miktar;
	}
}

Ana Sınıf
MalzemeListesi.java

package ethemsulan.com;

import java.util.ArrayList;

public class MalzemeListesi {
//Başlangıç malzemeleri bu listeye ekliyoruz.
	public ArrayList<Malzeme> liste = new ArrayList<Malzeme>();
//Malzeme ekliyor
	public void addMalzeme(Malzeme m)
	{
		liste.add(m);
	}
//Gelen malzeme ismi listede varsa donderirir.
	public Malzeme getMalzeme(String isim)
	{
		for (Malzeme m : liste) {
			if( m.getIsim().equals(isim) )
				return m;
		}

		return null;
	}
//O anda kalan malzemeleri yazar.
	public void sonDurumuYazdir()
	{
		for (Malzeme m : liste) {
			System.out.println( m.getIsim() + ": " + m.getMiktar() );
		}
	}

}

Ana Sınıf
MenuUretRecursive.java

package ethemsulan.com;

import Pizza.AciliVejeteryan;
import Pizza.Mantar;
import Pizza.Pizza;
import Pizza.Sucuklu;
import Pizza.Vejeteryan;

public class MenuUretRecursive{
	public static int vejeteryanToplam=0;
	public static int sucukluToplam=0;
	public static int mantarliToplam=0;
	public static int aciliVejeteryanToplam=0;
	static double enKarliDurum=0;
	private static double toplamKarimiz=0;
//Ilk olarak vejeteryan uretiyoruz.
	static int vejeteryanSon=0;
	static int sucukSon=0;
	static int mantarSon=0;
	static int aciSon=0;
	public static double zarar=0;
	private double toplamSatis=0;
	public static double satisFiyati=0;
	public void menuUret(MalzemeListesi ml) {
		Vejeteryan v1=new Vejeteryan(ml);
//Mlazeme yetiyor mu diye kontrol ediyor.Yani kalan malzeme bir tane vejeteryan pizza uretmeye yetiyor mu?
//Eger yetmiyorsa sucukluya geciyor.Yani bir sonraki durumu kontrol ediliyor.Yetiyorsa
		if(v1.malzemeYetiyormu()){
//Pizza yapiyor
//Vejeteryan nesnesi uretildigi anda vejeteryan icin harcanan malzeme miktari toplam
//miktardan dusurulur. Eger vejeteryan uretilebiliyorsa true donderir.
			if(v1.pizzaYap()){
				vejeteryanToplam+=1;
			}
//Pizzaci elindeki malzemelerle kac tane vejeteryanli, kac tane sucuklu ve
//kac tane acili vejeteryan yaparsa en cok kar eder.Eger bu bilgi elinde varsa
//Gelen musteriye size sunnu tavsiye edebiliriz seklinde bir imkani olur.Bazi musteriler
//hangisini tavsiye edersiniz diye sorarlar.
			durumlariKontrolEt(ml, v1);
//Vejeteryan uretildise sayisi bir artiyor
//Recusrive olarak kendi kendini cagirir. Bu tur problemler, butun durumlarin test edilebilmesi
//icin recursive yazilmalilar.Vejeteryan olsuturuluncaya kadar surekli vejeteryan olusturur.Sonra
//Artik kalan malzemeyle yeni bir vejeteryan menusu olusturulamiyorsa diger menuleri test etmeye basliyor.
			menuUret(ml);
//Diyelim 2 tane vejeteryan, 3 tane sucuklu olusturdu ve kalan malzemeden hic bir menu uretilemiyorsa
//en son menude harcanan malzeme geri ekleniyor ve bir sonraki durum test ediliyor.yani 2 vejeteryan ve
//2(once 3 tu) sucukludan sonra eger eklenen malzeme acili yapmaya yetiyorsa acili olusturur.
//Yetmiyorsa bu sefer bir ust node(soyut olarak node) cikar ve o node icin harcanan malzeme geri eklenilir toplam
//malzeme miktarina.Bu sekilde tum durumalr test edilir.
			v1.pizzayaGeriEkle();
//Bir ust node cikarken yukarda 3 taneden 2 ye dusuru yani 1 azaltir sayiyi.
			if(vejeteryanToplam>0){
				vejeteryanToplam-=1;
			}
		}
//Bunlarda ayni Vejeteryan mantigiyla calisiyorlar.Mesela bir test yapabiliriz.Once vejeteryan
//ilk uretmeye baslatin sonra asagidaki sucukluyu vejeteryandan onceye koyun.Eger ikisinin sonucu ayni ise
//demek ki program tum durumlari kontrol ediyor.Yada acilivejeteryani ilk siraya alin.
		Sucuklu s1=new Sucuklu(ml);
		if(s1.malzemeYetiyormu()){
			if(s1.pizzaYap()){
				sucukluToplam+=1;
			}
			durumlariKontrolEt(ml, s1);
			menuUret(ml);
			s1.pizzayaGeriEkle();
			if(sucukluToplam>0){
				sucukluToplam-=1;
				}
		}
		Mantar m1=new Mantar(ml);
		if(m1.malzemeYetiyormu()){
			if(m1.pizzaYap()){
				mantarliToplam+=1;
			}
			durumlariKontrolEt(ml, m1);
			menuUret(ml);
			m1.pizzayaGeriEkle();
			if(mantarliToplam>0){
				mantarliToplam-=1;
			}
		}
		AciliVejeteryan ac1=new AciliVejeteryan(ml);
		if(ac1.malzemeYetiyormu()){
			if(ac1.pizzaYap()){
				aciliVejeteryanToplam+=1;
			}
			durumlariKontrolEt(ml, ac1);
			menuUret(ml);
			ac1.pizzayaGeriEkle();
			if(aciliVejeteryanToplam>0){
				aciliVejeteryanToplam-=1;
			}
		}
	}
	private void durumlariKontrolEt(MalzemeListesi ml, Pizza p) {
//MenuyeOzguFiyat*menuMalzemeIsmi ile toplam satisi hesapliyor
		toplamSatis=vejeteryanToplam*50+sucukluToplam*100+
		        mantarliToplam*90+aciliVejeteryanToplam*75;
//Toplam satis parasindan kalan malzemeleri cikartiyor.Cunku kalan malzemeden yeni menu
//olusturulmadigina gore cope gidiyor artan miktarlar.Yani zarar olarak hesapliyor.
		toplamKarimiz=toplamSatis-p.kalanMalzeme();
//Baslangicta enkarli duruma sifir veriyor.Sonraki bulunnan kar bu degerden buyukse
//yani daha karli ise o durumun degerlerini aliyoruz.Yani simdiye kadarki en karli durumu bulmus oluyoruz.
//Bu sekilde program bittikten sonra tum durumlarin en karlisi bulunur.Gostermek icin de ekrana yaziyorum.
		if(enKarliDurum<toplamKarimiz){
			enKarliDurum=toplamKarimiz;
			vejeteryanSon=vejeteryanToplam;
			sucukSon=sucukluToplam;
			mantarSon=mantarliToplam;
			aciSon=aciliVejeteryanToplam;
			zarar=p.kalanMalzeme();
			satisFiyati=toplamSatis;
//Bulunan en karli durumu yazdiriyorum.Arama sonunda elimizde en karli durum olur.Ilk durum sifir atadim
//sonraki durumlarla karsilastir daha karli ise o ana kadar ki en karli durumu bulmus oluyoruz.
			ml.sonDurumuYazdir();
			System.out.println("Toplam satis--> "+satisFiyati+"\nZarar: "+zarar);
System.out.println("V:"+vejeteryanSon+"\tS:"+sucukSon+"\tM:"+mantarSon+"\tAc:"+aciSon+
		"\tAdetle yapilan kar->"+enKarliDurum+"\n");
		}
//Karli olma ihtimali dusuk degerleri yazdirmiyorum.Cunku yazma islemi icin baya zaman gidiyor
	}
}

Ana Sınıf
Vejeteryan.java

package Pizza;
import ethemsulan.com.MalzemeListesi;
public class Vejeteryan extends Pizza
{
	public Vejeteryan(MalzemeListesi ml)
	{
		this.ml = ml;
//Vejeteryanli icin kullanilan malzeme miktarlari
		gerekliMalzeme.put("Sogan", 350);
		gerekliMalzeme.put("Mantar", 275);
		gerekliMalzeme.put("Biber", 200);
		gerekliMalzeme.put("Aci", 50);

		satisFiyati = 50;
	}
}

Ana Sınıf
Sucuklu.java

package Pizza;
import ethemsulan.com.MalzemeListesi;

public class Sucuklu extends Pizza
{
	public Sucuklu(MalzemeListesi ml)
	{
		this.ml = ml;
//Sucuklu icin kullanilan malzeme miktarlari
		gerekliMalzeme.put("Sogan", 150);
		gerekliMalzeme.put("Biber", 200);
		gerekliMalzeme.put("Aci", 50);
		gerekliMalzeme.put("Sucuk", 250);

		satisFiyati = 100;
	}
}

Ana Sınıf
Mantar.java

package Pizza;
import ethemsulan.com.MalzemeListesi;

public class Mantar extends Pizza
{
	public Mantar(MalzemeListesi ml)
	{
		this.ml = ml;
//Mantarli icin kullanilan malzeme miktarlari
		gerekliMalzeme.put("Sogan", 100);
		gerekliMalzeme.put("Mantar", 300);
		gerekliMalzeme.put("Biber", 300);
		gerekliMalzeme.put("Peynir", 250);

		satisFiyati = 90;
	}
}

Ana Sınıf
AciliVejeteryan.java

package Pizza;
import ethemsulan.com.MalzemeListesi;
public class AciliVejeteryan extends Pizza
{
	public AciliVejeteryan(MalzemeListesi ml)
	{
		this.ml = ml;
//Acili vejeteryan  icin kullanilan malzeme miktarlari
		gerekliMalzeme.put("Sogan", 300);
		gerekliMalzeme.put("Peynir", 250);
		gerekliMalzeme.put("Mantar", 150);
		gerekliMalzeme.put("Biber", 250);
		gerekliMalzeme.put("Aci", 300);
//Bir menu fiyati
		satisFiyati = 75;
	}
}

Ana Sınıf

Sınıf diagramları büyük
uml
Soyut olarak ağaç oluşturma:
caslimamantigi
En son çıktı en karlı durumdur:
ciktisonuc
Test.java

package ethemsulan.com;

public class Test
{

	public static void main(String[] args)
	{
//Baslangic degerleri,fiyat ve malzeme isimleri
		Malzeme sogan = new Malzeme("Sogan", 3000, 5);
		Malzeme peynir = new Malzeme("Peynir", 1000, 15);
		Malzeme mantar = new Malzeme("Mantar", 2000, 20);
		Malzeme biber = new Malzeme("Biber", 3000, 10);
		Malzeme aci = new Malzeme("Aci", 1000, 25);
		Malzeme sucuk = new Malzeme("Sucuk", 1000, 30);
		MalzemeListesi ml = new MalzemeListesi();
		ml.addMalzeme( sogan );
		ml.addMalzeme( peynir );
		ml.addMalzeme( mantar );
		ml.addMalzeme( biber );
		ml.addMalzeme( aci );
		ml.addMalzeme( sucuk );
//Recursive olarak cagri yapiyoruz.Sanki node olusturuyormus gibi
		MenuUretRecursive menuNes=new MenuUretRecursive();
//Baslangic durumda toplam malzemeleri basar.Eger // kaldirisaniz
		menuNes.menuUret(ml);
	}
}

Diğer kodların linkleri aşağıdadır:
Uygulamanın Raporu
MenuUretRecursive.java
MalzemeListesi.java
Malzeme.java
Pizza.java(abstract)
Vejeteryan.java
Sucuklu.java
Mantar.java
AciliVejeteryan.java
Cengiz TOGAY Hocamın, katkılarından dolayı kendisine teşekkür ederim.

Ilk önce umlet jar dosyasını bilgisayarınızda uygun bir klasöre indirin.Uygun derken yolunu yanlışlıkla değiştirmeyeceğiniz bir klasör olsun.Link: UMLet JAR dosyasını indir
1
Resimde görüldüğü gibi JRE system–>Build path–>Configure Build Path seçip
2
Add external jar dan .jar dosyasını indirdiğiniz kalsörün yolunu gösterin ve klasörü seçip oki tıklayın.Daha önce jar dosyası nasıl eklendiğini sadece projeye veya tüm projelere eklemeyi anlatmıştım.Ama önceki kayıtlara bakmayan veya bilmeyen olur diye tekrar resimli gösterdim.
3
Resimde görüldüğü gibi paketlerinizi(hepsini birden seçebilirsiniz) seçip sağ tıklayıp Green UML’den Add New Class’ı seçtim. Isteğe göre diğer seçenekleri seçebilirsiniz.
4
Paketler içindeki classlar, değişken ve metodlar resimdeki gibidir. Eğer bu sınıflar birbiriyle bağlantılı olsaydı bağlantılerı gösteriridi(extends, dependency, implements…).
Son oplarak sağda görülen palette ile yeni class oluşturabilir veya düzenlemeler yapılabilir.

Internette bulduğum java web frameworklerini listelemeye çalıştım. Bulduklarım bunlar. Eksik ya da yanlış yazdıklarım olabilir.

Vaadin
Wicket
Spring
Struts
Google Web Toolkit
SwingWeb
Induction
Echo
Play
JApple
Click
Hamlets
Trimpath
MyFaces
Turbine
WebWork
WingS
JPublish
Cocoon
Rife
Macaw
Jaffa
Stripes
WebOnSwing
Jucas
Sofia
Maverick
Tapestry
Baritus
Dinamica
Xoplon
OXF
Bishop
Shocks
Expresso
Bento
jZonic
Scope
Warfare
JWAA
Chiba
JBanana
Jeenius
JWarp
Genie
Melati
Dovetail
Chameleon
JFormular
Niggle
JATO
Seam
OpenXJava
Mapper
OpenSymphony
Shale
JBoss
uPortal

package ethemsulan.com;
import java.util.Arrays;
public class Array {
  public static void main(String[] args) {
	// ilk önce içinde isimlerin olduğu bir array tanımlayalım
	String [] isimler1={"Murat", "Nazlı", "Mehmet", "Ayşe"};
	// ikinci bir array tanımlayalım boş ve birinci arrayın genişliğinde olsun
	String [] isimler2=new String [isimler1.length ];

	//birinci arrayi ikinci array e kopyalayalım
	System.arraycopy(isimler1, 0, isimler2, 0, isimler1.length);
	//  birinci ve ikinci array birbirne  eşitmi diye kontrol edelim
   if(Arrays.equals(isimler1, isimler2)==true){
   	System.out.println("iki array birbirine eşittir");
   }
   else{
   	System.out.println("iki array birbirine eşit değil");
   	}
   // ilk array i ekrana sırasıyla bastıralım
  for(int i=0;i<isimler1.length;i++){
   	System.out.println(isimler1[i]);
   	}
  }
}

Debug bir programın nasıl çalıştığının kod üzerindeki gösterimidir.Hata tespitinde çok kullanılır.Yani kodunuzda bir yerlerde yanlış işlem yapıyorsanız ve bulamıyorsanız bunu debug ile bulabilirisniz.
1
2
Debug işleminde en önemli ve ilk nokta break point lerin konulmasıdır
Ben break pointlerin classtan sonraki değişken haricindeki ilk satırın başına konulmasını öneriyorum bu şekilde programın tamamının nasıl çalıstıgını kod üzerinde imlec gölgesi yadımıyla görebilirsiniz. Bunun i.in en soldaki mavi şeritin olduğu bölgeye Mouse ile sağ tıklıyıp çıkan pencerede bereak point seçenegini seçiyoruz.
3
4
Minik bir nokta halinde sol şerit üzerinde break pointe görebilirsiniz
1
İsterseniz programın tamamın nasıl çalıştığı değilde kodun sadece bir parçasının nasıl çalıştığını da görebilirsiniz .Ben bunun için for loop u seçtim. Aynı şekilde sadece for loopun başladığı satırın başına break pointe koydum.
2
5
Daha sonra kod üzerinde mousu sağ tıklayıp DebugAs Java Application seçiyoruz
6
Bu pencereye Ok
7
Bir uyarı çıkabilir bunada Yes
8
Artık debug işlemi başladı.
9
Sürekli F6 ya basarak, imlecin sırasıyla gölgelediği satırları takip ederek kodun nasıl çalıştığını görebilirsiniz.
10
Bu ekran çıktığında artık işlemin sonuna geldiniz demektir.
11
Önce sağ en üstten java seçeneğini
12
Sonrada çıkan sayfada kırmızı ile işaretlenmiş thread düymesine basarak işlemi sonlandırıp ilk sayfanıza dönebilirsiniz.
13
Bu işlemlerin kısa yolları da fare ile tıklandığında görünür(mesela sağ tıklayıp debug as üzerine gelince java applicationun sağında Alt+Shift+ D,J )

An error has occurred.See the log file
…\workspace\.metadata\.log.
1
Yukardaki gibi bir hata alırsanız.
2
Start–>MyEclipse–>Run as administrator tıklayıp
3
Default olarak oluşturulan workbeanch urlsini(örneğin: C:\workspaceMyEclipse) değiştirin düzelir.
4

package ethemsulan.com;
public class AsalsayiTopla {

	public static int asalTopla(int n)
	{
//metod kendi kendini cagirdiginda kontrol=0 yap
		int kontrol = 0;
		if(n<1){
			return 0;
		}
//Asal sayi sadece kendisine ve 1 tam bolunebilen sayilardir.
//Sayinin yarisi kadar kontrol ediyor.Bu aralikta sadece 1 e bolunmesi gerekir
//Eger sayi kendisinin yarisina kadar kontrol edip sadece 1 e bolunuyorsa o zaman
//kontrolu 1 arttiriyorum. n/2 dikkat.yarisina kadar kontrol etme yeterli
		for(int i=1;i<=n/2;i++){
			if(n%i==0){
				kontrol++;
			}
		}
//kontrol==1 ise sayimiz asaldir.Asal ise n+metod(bir sonraki sayi)
		if(kontrol==1){
			System.out.println("Asal sayi:"+n);
			return n+asalTopla(n-1);
		}
//Sart saglamiyorsa yani asal degilse bir sonraki sayiyi cagir
		return asalTopla(n-1);
	}
	public static void main(String[] args) {
		System.out.println(1+" den "+30+" kadar olan asal sayilarin toplami-->"+AsalsayiTopla.asalTopla(30));
	}
}

orjinal kod