folder Tahribat.com Forumları
linefolder Java
linefolder Soru Cozum Mantigi(Java)



Soru Cozum Mantigi(Java)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek

    Soruyu java uzerinden yazdigimdan java uzerinden orneklendirerek anlatiyorum. Bir el atin fikir bakimindan Kod yada soru cozumu degil :) Ha ben ugrastim yaptim al bak fikrimin kaynak koduda burda dursun diyen olursa kendi secimidir seve seve incelerim iyi olur.

    Bir komut satiri yorumlayici programi yapmak istiyorum Ornegin.

    Ben length "Tahribat"  die girdigimde  bana tirnak icindeki stringi uznlugunu vericek yada

    upper "tahribat" dedigimde touppercase yapip ekrana o sekilde yazdiricak.

    boyle belli basli komutlar eklenicek programa. Komutlar en az 3 harfli yazilabilir sonrasindaki karakterleri zorunlu degil yani, length i len de yazabilir leng de lengt yada length seklinde hepsini kabul edicek ve gerekli islemleri yapip ekrana yazdiricak. lenxx lentt gibi yazimlar kabul edilmiycek. 

    Sorudaki ornek komutlar = lenght, reverse, upper, lower, quit. seklindedir bunlara uygun gelen methodlar kullanilarak ekran ciktisi alinicaktir.

    Farkli gidis yollarina ve baska kisilerinde sorun cozme yontemlerini gormek adina sizlere soruyorum.

    Su su methodlari su ekilde kullanarak sunu kullanarak vs gibi Java uzerinden orneklemeler ile yapilirsa tadindan yenmez yinede baska dillerlede aciklama yapilirsa mantik ayni ben kendim ceviririm.

    NOT: ders sinav zart zurt sorusu degildir. Soru cozumundan herhangi bir maddi kazanc elde etmiyorum. Tamamen kendi capimdaki yaptigim alistirmalar ornegidir. Lan sen bize odev mi yaptiriosun triplerine girilmeden on yargisiz yaklasalim :D

    Absolut tarafından 24/Ağu/15 21:39 tarihinde düzenlenmiştir

    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rajooonn
    rajooonn's avatar
    Kayıt Tarihi: 16/Haziran/2010
    Erkek

     Hocam switch-case yapısıyla pratik bir şekilde yapılabilir. Tabi if/else kullanılabilir ancak switch-case'de daha derli toplu oldu  gibi. 
    Ben yalnızca uzunluğu aldım bunlara toUpper toLower falan eklersin uzar böyle liste. Program sonlanmasın istersen while döngüsü içine alabilirsin. Takipteyim :d

     

     

     


    Gece! Vampir değilim ama geceyi çok severim. Yalnızsın, oyun oynuyorsun monitörün ışığı ve kendin.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek

    ben case yerine komutu tek satirda alip  length "tahribat" seklinde onlari split edip bir string arraye atayip, komut kisaltmalarinida ayri string arraylerde saklayip denedim. case cok uzun geldi gozume :D 


    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nickalti
    Lightsaber
    Lightsaber's avatar
    Kayıt Tarihi: 29/Ağustos/2012
    Erkek

    daha kompleks komutlar için de düşününce regex kullanılabilir


    İnsan; insan olsaydı,insan olmazdı..
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    Öncelikle java bilmiyorum. Sen javascript biliyorsan javascript üzerinden devam edelim.

     

     

    PcK0 tarafından 24/Ağu/15 23:22 tarihinde düzenlenmiştir

    Sadece bi imza..
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek
    Lightsaber bunu yazdı

    daha kompleks komutlar için de düşününce regex kullanılabilir

    Aslinda soruda komut satiri ve ardindan uygulanacak komut kelimesi gelmeli die basitlestirmisler. ben yinede ordan yola cikarak kompleks verilir die split ettim bosluk tab " falan atip o sekilde dondurdugu her elemani string arraya atip array[0] i da komut olarak kabul edip ordan yola cikarak islem yaptirmaya calistim.

    @PcK0 hocam istediginiz dilde aciklama yazabilirsiniz maksat sorun cozumune gidisat yolu javascript ile yaparsaniz elimizde extra dil kodu olmus olur daha tatli olur. satirlari yorumlayarak javaya cekmeye calisirim.


    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    Olur başlayalım o zaman.

    Kod giriş mantığı hakkında sadece splitlere bağlı kalmamak demişsin ama eval gibi olayları çok geniş noktalara taşıyabilecek eval komutu javada yok :D Yani compile edilen bir dilde eval pek olmaz. Şu an baktım javascript'e bağlı olarak bir eval komut işlemesi falan kullanmakta imiş sanırım oda matematiksel işlemler için. Neyse devam edelim.

    dizi = array

    dizge = string

    Ayrıca bazı yerlerde ilgili dillere göre farklılıklar gösterecektir. Mesela dizi anahtarında dizge kullanmak phpde çok alışıla gelmiş birşeyken javascriptte anahtarı dizge kullanıldığında dizi associative olarak anılıyor. O yüzden daha ortak tarzda yönlendirmeye çalışacağım.

    Ama sormalıyım javada anonim fonksiyonlar hakkında bilgin varmı? Ve bunları dışarıdan çağırabilir misin?

     

    PcK0 tarafından 25/Ağu/15 00:07 tarihinde düzenlenmiştir

    Sadece bi imza..
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    Ben karaladım birşeyler umarım işine yarar.

    Editlemeden önce gördüysen biraz karışık oldu jsfiddle'a attım biraz toparladım. jsfiddle.net/an2a158n/

     

    PcK0 tarafından 25/Ağu/15 01:09 tarihinde düzenlenmiştir

    Sadece bi imza..
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    S2kucuk
    S2kucuk's avatar
    Banlanmış Üye
    Kayıt Tarihi: 06/Haziran/2015
    Erkek

    Kolay bir problem. Mademki kodla çözüm istemiyorsun sana hızlıca anlatıvereyim.

    -input stringini al

    -input stringini regexp e tabi tut. Bu regexp ile komut ve varsa parametre/leri ayırıp bir objenin içine göm. 

    -Switch case ile komutun yapacağı işi tanımlayıp gerçekleştirebilisin. Ama gördüğüm kadarıyla daha yakışıklı ve öğretici bir yöntem istiyorsun. O zaman Observer Pattern i inceliyorsun. https://en.wikipedia.org/wiki/Observer_pattern Bu pattern i kullanarak uygulama içerisinde "length diye bir komut geldi" diye tüm uygulamaya haber veriyorsun ve bu "length" parametresiyle işi olan herkes bu olaydan haberdar oluyor. Sana sadece her komut için listener yazıp attach etmek kalıyor. Ama switch-case çok daha hızlı çalışır ama merkezi bir yapıdadır. Observer ise classların birbirine olan bağımlılığını azaltır. Seçim senin ama kolay proje olmuş.

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek

    Girilen komutun ilk 3 harfini split et.

    Sonrası switch case yapısı :

    len ise şunu yap, upp ise bu falan.

    Switch-Case sevmem dersen @S2buyuk önerisine bak.

    (senin koşuluna göre ilk 3 harf bizi bağlıyor, len de yazsa aynı lengt de length de) 

    ozgunlu tarafından 25/Ağu/15 01:14 tarihinde düzenlenmiştir

    Hello, i am nothing. I come from Neverland.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DuPi
    DuPi's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    Öncelikle gerçekten böyle bir soru için sağol oturup yazayım dedim. bunu incelersen sorularına tek tek çözüm getirmeye çalıştım.

    Not: Kontrolü yaparsın daha iyi yapan mutlaka çıkacaktır. maksat iş görülsün...

     

    .

    import java.util.Scanner;
    
    
    public class KomutSatiri {
     static String[] komutlar = {"length","reverse","upper","lower","quit"};
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner scn = new Scanner(System.in);
       while(true)
       {
        KomutGir(scn.nextLine());
       System.out.println("\n");
       }
    	}
    	
    	public static void KomutGir(String str)
    	{
    		//Length, reverse, upper, lower, quit.
    		String[] komut = str.split(" ");
    		komut[0].toLowerCase();
    	if(komut.length==2)
    	{
    		if(tirnakKontrol(komut[1]))
    		{
    		switch (komut[0].substring(0,3)) {
    		case "len":
    			 System.out.println(komut[1].substring(1,komut[1].length()-1)+" Kelimesi "+(komut[1].length()-2)+" Karakterden Oluşmuştur!");
    			break;
    		case "upp":
    			 System.out.println(komut[1].substring(1,komut[1].length()-1).toUpperCase()+" Şeklinde Yazılır.");
    			break;
    		case "low":
    			 System.out.println(komut[1].substring(1,komut[1].length()-1).toLowerCase()+" Şeklinde Yazılır.");
    			break;
    		case "qui":
    			 //Çıkış komutları
    			System.out.println("Çıkış Yaptınız. Tekrar Görüşmek Üzere");
    			break;
    		case "rev":
    			 //Çıkış komutları
    			System.out.println(komut[1].substring(1,komut[1].length()-1)+" Yazısı, "+yaziyiTersle(komut[1].substring(1,komut[1].length()-1).toString())+" şeklinde ters yazılır...");
    			break;
    		default:
    			System.out.println(komut[0]+" Komutu Bulunamadı!");
    			break;
    		}
    		} else
    		{
    			System.out.println("Hatalı Kullanım Lütfen (komut \"argüment\") şeklinde giriniz..");
    		}
    	 } else
    	 {
    		 System.out.println("Herhangi Bir Argüment Girmediniz...");
    	 }
    	}
    	public static boolean tirnakKontrol(String str)
    	{
    		if (str.substring(0,1).equals("\"") && str.substring(str.length()-1, str.length()).equals("\""))
    		{
    			return true;
    		}
    		return false;
    			
    	}
    	public static boolean komutDogrula(String komut)
    	{
    	 if(komut.length() > 2 && komut.length() < 7)
    	 {
    	  for(int i=0;i<komutlar.length;i++)
    	  {
    		  if(komut.substring(0,komut.length()).equals(komutlar[i].substring(0,komut.length())))
    		  {
    			  return true;
    		  }
    	  }
    	  return false;
    	}
    
    	return false;
       }
    	public static String yaziyiTersle(String str)
    	{
    		if(str.length()==0)
    		{
    			return str;
    		}
    		return yaziyiTersle(str.substring(1))+str.charAt(0);
    	}
    
    	
    }
    

     


    Ne zaman birşey öğrenmek istesem, Birden Vaktim Kalmıyor ?
Toplam Hit: 4619 Toplam Mesaj: 14
java