Mirage Mesaj tarihi: Nisan 23, 2009 Paylaş Mesaj tarihi: Nisan 23, 2009 Anlamadım valla. İlk tavsiyem: KISS principle Yapabildiğin kadar basit yapmaya çalış. İç içe döngülerden kaçın, genelde o kadar döngüye gerek olmaz. content String türünden olsa mesela şu şekilde çok rahat yapabilirsin: private String content; public Set(String input) { content = ""; input'ta bulduğun her char ch için { if (!content.contains("" + ch)) { content = content + ch; } } } "" + ch tuhaf gelmiş olabilir. contains metodu String istediği için ch char'ını String'e çevirip vermiş oluyorsun. content'i String yerine char array ile yapmak istersen kendin bir contains metodu yazabilirsin. Böylece iç içe döngü kullanımını gizlemiş olursun. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
kgns Mesaj tarihi: Nisan 23, 2009 Paylaş Mesaj tarihi: Nisan 23, 2009 Mirage said: "" + ch tuhaf gelmiş olabilir. contains metodu String istediği için ch char'ını String'e çevirip vermiş oluyorsun. bu yöntem de hayatımda gördüğüm en ilerisi düşünülmeden verilmiş tavsiye olabilir :) Character.toString(ch) kullan abi sen inanma bu adamın dediğine :P Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Nisan 24, 2009 Paylaş Mesaj tarihi: Nisan 24, 2009 Evet o çok daha şıkmış. Her gün yeni bi şeyler öğreniyoruz napalım. :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ractamainus Mesaj tarihi: Nisan 24, 2009 Paylaş Mesaj tarihi: Nisan 24, 2009 kgns said: Mirage said: "" + ch tuhaf gelmiş olabilir. contains metodu String istediği için ch char'ını String'e çevirip vermiş oluyorsun. bu yöntem de hayatımda gördüğüm en ilerisi düşünülmeden verilmiş tavsiye olabilir :) Character.toString(ch) kullan abi sen inanma bu adamın dediğine :P eheh ben bu yöntemi excel formüllerinde çok kullanıyorum =P Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 24, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 24, 2009 Mirage in yaptigi cidden cok akillica geldi onu kullanicam o yuzden :P ciddiyim lan onu kullanicam digeri de aklimin bi kosesinde dursun ama dsf bu aksam su nesne ve class lara tekrar calisip (Mirage dedigin gibi oturmamis anlamamisim tam) butun metodlari doldurup koyucam. bu arada online tavsiye ettiginiz (turkce, ingilizce, almanca farketmez) class, nesne vs. cok iyi anlatan bir kaynak var mi? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Nisan 24, 2009 Paylaş Mesaj tarihi: Nisan 24, 2009 Almanca şunu biliyorum: http://openbook.galileocomputing.de/javainsel8/ Zamanında öğrenirken bunu kullanmıştım yer yer. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 24, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 24, 2009 Mirage yazdigin Set unionSet = new Set(); kisminda hata aliyorum. cannot find symbol symbol: constructer Set() location: class Set Set unionSet = new Set(); ^ nedenini anlayamadim bunun. bir de toString() metoduna ihtiyac var mi? Mirage said: Constructor boşluklarla ayrılmış bir string beklediği için o boşlukları eklemen lazım. demistin o kismi zaten union metodu yapicak. yapmaya calistim asagida olmustur umarim. bu yeni uretilen kumeyle konstruktoru cagirip geri verince zaten birlesimi verilicek. toString() hala gerekli mi bilemedim. bu hatayi alinca da diger kisimlari kontrol edemedim dogru mu diye. sadece bu hatayi veriyor cunku. public class Set { private String content; public Set(String input) { content = ""; for (char ch : input.toCharArray()) { if (!content.contains("" + ch)) { content += ch; } } } public int cardinality() { return content.length(); } public String getContent() { return content; } public Set union(Set target) { Set unionSet = new Set(); String targetContent = target.getContent(); String unionSetInput = unionSet + "" + targetContent; for (char ch : unionSetInput.toCharArray()) { unionSetInput = ch + " "; } return new Set(unionSetInput); } /* public String toString() { String str = ""; for (int i=0; i<content.length(); i++) { if (Character.isLetter(content.charAt(i))) { str += content.charAt(i) + " "; } } return str; } */ public static void main(String[] args) { Set testSet1 = new Set("a b c d" ); Set testSet2 = new Set("b c f g" ); Set unionSet = testSet1.union(testSet2); System.out.println(unionSet); } } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Nisan 24, 2009 Paylaş Mesaj tarihi: Nisan 24, 2009 Yine bir çok şeyi karıştırmışsın galiba. Set unionSet = new Set(); diye bir satır yazmadım ki ben? Yanlış çünkü. X bir class olsun. 'new X(...)' diyerek X class'ının constructor'unu çağırıp, X türünden bir nesne üretirsin. Yani 'new Set()' deyince parametresi olmayan bir constructor çağırıyorsun, ama öyle bir constructor tanımlı değil. Tanımlı olan tek constructor argüman olarak String istiyor. O yüzden bir küme üretmek için 'new Set("a b c")' diyerek tanımladığın constructor'u çağırman lazım. Constructor hakkında ek bilgi Bir class içinde aynı isimde, ama farklı parametreleri olan metodlar tanımlaman mümkün. Buna overloading deniyor. Aynı şekilde bir class içinde birden fazla (farklı parametreleri olan) constructor'lar tanımlaman mümkün. Hiç constructor tanımlamazsan otomatik olarak parametresiz bir constructor tanımlanır. Ama kendin herhangi bir constructor tanımladığın anda bu parametresiz constructor otomatik olarak tanımlamaz. Dolayısıyla senin durumunda parametresiz constructor yok. Bu yüzden 'new Set()' hata veriyor. said: public Set union(Set target) { Set unionSet = new Set(); String targetContent = target.getContent(); String unionSetInput = unionSet + "" + targetContent; for (char ch : unionSetInput.toCharArray()) { unionSetInput = ch + " "; } return new Set(unionSetInput); } Burda her şey birbirine girmiş. İlk satırda boş bir küme tanımlamaya çalışmışsın. Ama küme üretmek için ilk önce içindeki harfleri string olarak hazırlaman lazım (mesela "a b c" diye) ki 'new Set("a b c")' diyerek kümeyi üretebilesin. Boş küme üretmenin bir anlamı yok yani. Üçüncü satırda küme türünden bir değişkeni (unionSet) string türünden bir değişkenle (targetContent) toplamaya çalışıyorsun. Ne yapmaya çalıştığını anlamadım. Tekrar netleştirmeyi deniyeyim. Elinde Set türünden iki tane nesne var diyelim: Set a = new Set("a b"); Set b = new Set("b c"); Sonra diyelim kalkıp şunu yazdın: Set c = a.union(b); a nesnesi üzerinde union metodunu çağırıyorsun ve argüman olarak b kümesini veriyorsun. Metodu girdiğinde elinde iki tane küme var: this (yani a kümesi) target (yani argüman olarak verilen b kümesi) Bu iki kümede de elemanlarını belirten (String türünden) content değişkeni var: this.content (değeri "ab") target.content (değeri "bc") Amacın bu iki string'i kullanarak "a b c" diye bir string üretmek. Sonra bu string'i kullanarak yeni bir küme üretip geri vermek. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 24, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 24, 2009 evet yazmamisin oyle birsey simdi baktim yine. ordakileri kopyaladigimi hatirliyorum ama iyice aptallastim heralde. saol halletmeye calisiyim tekrar. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 24, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 24, 2009 public Set union(Set target) { String unionSetInput; String targetContent = target.getContent(); unionSetInput = this.content + targetContent; //bunlar elimizde olan 2 string. birlestirmek amacli "+" koymuyor muyuz? onu da sorar oldum. for (char ch : unionSetInput.toCharArray()) { unionSetInput = ch + " "; } // bu da elimizdeki mesela abcd yi a b c d yapmak icin cunku konstruktor bosluklarla ayrilmis bekliyor return new Set(unionSetInput); //konstruktor da bu birlestirilmis string icin cagrilip donduruluyor. sadece bunu koyunca Set@42e816 diye komik birsey geliyor. bu toString() e gerek var mi demek oluyor? yoksa hala yanlis mi union()? su anda elimde olan yukarda post olarak attigimdaki toString() metodunu koyunca sadece g yi veriyor birlesim kumesi olarak Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Kojiroh Mesaj tarihi: Nisan 24, 2009 Paylaş Mesaj tarihi: Nisan 24, 2009 Konu uzamış gitmiş, işin ucunu kaçırdım ama yanlış bilmiyosam orda print ettiğin, nesnenin ait olduğu sınıfın ve nesnenin bulunduğu bellek bloğunun adresi. Set sınıfında toString() metodunu override etmen gerekiyo gibime geldi. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 24, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 24, 2009 override nedir? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Penthesilea Mesaj tarihi: Nisan 24, 2009 Paylaş Mesaj tarihi: Nisan 24, 2009 override, o class'in extend ettigi bir class'in hali hazirda var olan bir methodunu tekrar yazmaktir. tum classlar Object class'ini extend eder mesela. Object classinin da toString methodu vardir default tekrardan equals, toString falan yazmak override etmek oluyor. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
aquila Mesaj tarihi: Nisan 24, 2009 Paylaş Mesaj tarihi: Nisan 24, 2009 override yapmayin beyler, ayip. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Nisan 25, 2009 Paylaş Mesaj tarihi: Nisan 25, 2009 sigisMoNd said: sadece bunu koyunca Set@42e816 diye komik birsey geliyor. bu toString() e gerek var mi demek oluyor? Aynen öyle. System.out.println ekrana string (ya da primitif tip) yazdırabilir. String olmayan bir nesne verirsen o nesne üzerinde toString metodunu çağırıp o nesnenin string türünden temsil edilişini alıp bastırır. Zaten kafan karışık, şimdilik inheritance/overwriting ile daha da karıştırma bence. Yakın zamanda gelirsiniz oralara da zaten. toString metodunu tanımlaman gerektiğini bil şu an için. Yani şu iki satır eş anlamlı (sayılır :p): System.out.println(unionSet); System.out.println(unionSet.toString()); Aşağıdakine benzer bir toString metodu tanımlayacaksın. Küme içindeki harfler zaten bir string ile tanımlanmış (content). Yani doğrudan content'i vermen bile yeterli. Bu durumda "abc" şeklinde bastırılacak. "abc" yerine süslemek istersen toString içinde yapacaksın bu süslemeleri. Ne bileyim harfler arasına virgül, boşluk falan koyabilirsin. Başına ya da sonuna başka bir string falan koyabilirsin. Nasıl bastırılacağını belirteceksin yani. public String toString() { return content; } union metodunu ise bu sefer çalışacak şekilde yazmışsın ama yapması gerektiği şeyi tam olarak yapmıyor: İki kümedeki ortak harfleri elemiyor. Çünkü iki kümedeki string'leri doğrudan arka arkaya ekliyorsun. unionSetInput = this.content + targetContent; satırını şuna benzer bir kodla değiştirsen cillop olacak: unionSetInput = this.content; for (char ch : targetContent.toCharArray()) { if (!unionSetInput.contains(Character.toString(ch))) { unionSetInput = unionSetInput + ch; } } Yani başlangıçta unionSetInput'a ilk kümedeki bütün elemanları atıyorsun. Sonra ikinci kümedeki elemanlara tek tek bakıyosun, sadece unionSetInput içinde olmayan elemanları unionSetInput'a ekliyorsun. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 25, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 25, 2009 evet uzun ugraslardan sonra bitti sonunda. bir de suslemeye calistim. ama kucuk bir kusuru var. onun disinda duzgun gozukuyor. Yardim eden herkese tesekkur ederim. Mirage sana ayrica cok cok tesekkur ederim. direkt return content; koyunca a bcdfg veriyordu. a'dan sonraki boslugu silmeye calistim ama yapamadim. su anda output olarak {a , b, c, d, f, g} aliyorum. mukemmel olmasa da guzel gozukuyor. cok tesekkur ederim tekrar. edit2: baska sekilde denedim. ilk elemandan sonra kendiliginden bos karakter ekliyor. toString() teki int i yi 0 dan baslatinca {a, , b, c, d, f, g} sonucunu aldim. kafadan bos eleman ekliyor ilginc o_O public class Set { private String content; public Set(String input) { content = ""; for (char ch : input.toCharArray()) { if (!content.contains(Character.toString(ch))) { content += ch; } } } public int cardinality() { return content.length(); } public String getContent() { return content; } public Set union(Set target) { String targetContent = target.getContent(); String unionSetInput = this.content; for (char ch : targetContent.toCharArray()) { if (!unionSetInput.contains(Character.toString(ch))) { unionSetInput += ch; } } return new Set(unionSetInput); } public String toString() { System.out.print("{" ); System.out.print(content.charAt(0)); //content.replace(content.charAt(1) + "", "" ); for (int i=1; i<content.length()-1; i++) { System.out.print(content.charAt(i) + ", " ); } System.out.print(content.charAt(content.length()-1)); System.out.print("}" ); return ""; } public static void main(String[] args) { Set testSet1 = new Set("a b c d" ); Set testSet2 = new Set("b c f g" ); Set unionSet = testSet1.union(testSet2); System.out.println(unionSet); } } yeni hedefim baklava seklinde hali deseni yapmak sdf . . # . . . # . # . # . . . # . # . # . . . # . . Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Nisan 25, 2009 Paylaş Mesaj tarihi: Nisan 25, 2009 said: public Set(String input) { content = ""; for (char ch : input.toCharArray()) { if (!content.contains(Character.toString(ch))) { content += ch; } } } Burda her türlü char'ı (dolayısıyla boşlukları da) kaydediyorsun content içine. Eklerken contains ile kontrol ettiğin için sadece ilk boşluk ekleniyor. O boşluğun çıkmasının sebebi o. ch'yı content'e eklemeden önce ch hakkaten bir harf mi diye bakarak çözebilirsin. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 25, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 25, 2009 bu kez bitti tamamen. mukemmel gozukuyor. intersection() i da ekledim metod olarak. dogru calisiyor o da. public class Set { private String content; public Set(String input) { content = ""; for (char ch : input.toCharArray()) { if (!content.contains(Character.toString(ch))) { if (Character.isLetter(ch)) { content += ch; } } } } public int cardinality() { return content.length(); } public String getContent() { return content; } public Set union(Set target) { String targetContent = target.getContent(); String unionSetInput = this.content; for (char ch : targetContent.toCharArray()) { if (!unionSetInput.contains(Character.toString(ch))) { unionSetInput += ch; } } return new Set(unionSetInput); } public Set intersection(Set target) { String targetContent = target.getContent(); String unionSetInput = this.content; String str = ""; for (char ch : targetContent.toCharArray()) { if (unionSetInput.contains(Character.toString(ch))) { str += ch + ""; } } return new Set(str); } public String toString() { System.out.print("{" ); for (int i=0; i<content.length()-1; i++) { System.out.print(content.charAt(i) + ", "" ); } System.out.print(content.charAt(content.length()-1)); System.out.print("}" ); return ""; } public static void main(String[] args) { Set testSet1 = new Set("a b c d"d" ); Set testSet2 = new Set("b c f g"g" ); Set unionSet1 = testSet1.union(testSet2); System.out.println(unionSet1); System.out.println(); Set unionSet2 = testSet1.intersection(testSet2); System.out.println(unionSet2); } } oh be Mirage: alıntı yapcam diye mesajını editlemişim öhö, eski haline getirdim. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Nisan 25, 2009 Paylaş Mesaj tarihi: Nisan 25, 2009 Gerçekten iyi gözüküyor. İki notum olacak. if (!content.contains(Character.toString(ch))) { if (Character.isLetter(ch)) { content += ch; } } şeklinde iç içe iki if kullanmak yerine if (!content.contains(Character.toString(ch)) && Character.isLetter(ch)) { content += ch; } kullanabilirsin. Eş anlamlı ve okuması daha rahat. Onun dışında değişken isimlerine dikkat et. Mesela intersect'i yaparken union'dan alıntı yaptığın için uyumsuz değişken isimleri var. Cidden kafa karıştırabilir bu tür şeyler: public Set intersection(Set target) { String targetContent = target.getContent(); String unionSetInput = this.content; String str = ""; for (char ch : targetContent.toCharArray()) { if (unionSetInput.contains(Character.toString(ch))) { str += ch + ""; } } return new Set(str); } unionSetInput hem kafa karıştırıyor (çünkü union ile bir işin yok), hem de zaten gereksiz. public Set intersection(Set target) { String targetContent = target.getContent(); String str = ""; for (char ch : targetContent.toCharArray()) { if (this.content.contains(Character.toString(ch))) { str += ch; // burda da "" gereksiz } } return new Set(str); } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 25, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 25, 2009 mukemmel demem fazla iddiali olmus :) en son hali public class Set { private String content; public Set(String input) { content = ""; for (char ch : input.toCharArray()) { if (!content.contains(Character.toString(ch)) && Character.isLetter(ch)) { content += ch; } } } public int cardinality() { return content.length(); } public String getContent() { return content; } public Set union(Set target) { String targetContent = target.getContent(); String unionSetInput = this.content; for (char ch : targetContent.toCharArray()) { if (!unionSetInput.contains(Character.toString(ch))) { unionSetInput += ch; } } return new Set(unionSetInput); } public Set intersection(Set target) { String targetContent = target.getContent(); String str = ""; for (char ch : targetContent.toCharArray()) { if (this.content.contains(Character.toString(ch))) { str += ch; } } return new Set(str); } public String toString() { System.out.print("{" ); for (int i=0; i<content.length()-1; i++) { System.out.print(content.charAt(i) + ", " ); } System.out.print(content.charAt(content.length()-1)); System.out.print("}" ); return ""; } public static void main(String[] args) { Set testSet1 = new Set("a b c d" ); Set testSet2 = new Set("b c f g" ); Set unionSet1 = testSet1.union(testSet2); System.out.println(unionSet1); System.out.println(); Set unionSet2 = testSet1.intersection(testSet2); System.out.println(unionSet2); } } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
kgns Mesaj tarihi: Nisan 26, 2009 Paylaş Mesaj tarihi: Nisan 26, 2009 valla sigimund'un inanışına mirage'ın da yardım sevdasın hayran kaldım sizi yılın couple'ı ilan ediyorum gençler, itiraz istemem döverim :P Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 27, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 27, 2009 sigisMoNd said: public String toString() { System.out.print("{" ); for (int i=0; i<content.length()-1; i++) { System.out.print(content.charAt(i) + ", "" ); } System.out.print(content.charAt(content.length()-1)); System.out.print("}" ); return ""; } aklima takildi mesela suradaki for (int i=0; i<content.length()-1; i++) yerine yine for (char ch : content.toCharArray()) yapip exception gibi(throw larla yapilanlarla alakasi yok tabi) bi olay yapilabilir mi for-each icinde hani son chari almasin diye? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Nisan 27, 2009 Paylaş Mesaj tarihi: Nisan 27, 2009 Doğrudan yapılamıyor. Index sayarak yapabilirsin ama tavsiye etmem. Bu tür durumlarda for döngüsü daha iyi. Bu arada kodunda content.charAt(content.length() - 1) yazmışsın. content boşsa ("" yani) content.charAt(-1) IndexOutOfBoundsException verir dikkat et. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
sigisMoNd Mesaj tarihi: Nisan 27, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 27, 2009 public String toString() { if (content.length() > 0) { System.out.print("{" ); for (int i=0; i<content.length()-1; i++) { System.out.print(content.charAt(i) + ", " ); } System.out.print(content.charAt(content.length()-1)); System.out.print("}" ); } else { System.out.println("--- leere Menge" ); } return ""; } boyle yapinca sorun cikmiyor :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Nisan 27, 2009 Paylaş Mesaj tarihi: Nisan 27, 2009 Ha bu arada fikir olarak büyük bir yanlış var. İyiki bu soruları sormuşsun yoksa hiç farketmicektim bile. :) toString metodunun amacı nesneyi temsil eden String hazırlayıp döndürmek. Println ile konsola bastırmak toString içinde gerçekleşmemeli. Karışık bir String hazırlamak için + ile birleştirmek yerine StringBuffer kullanmanı tavsiye ederim. Aşağıdakileri test etmedim ufak tefek syntax hataları olabilir: YANLIŞ said: public String toString() { System.out.print("{"); // while for if cart curt System.out.print("hede hodo"); System.out.print("}"); return ""; } DOĞRU said: public String toString() { String str = "{"; // while for if cart curt str = str + "hede hodo" str = str + "}"; return str; } CİLLOP said: public String toString() { StringBuffer buffer = new StringBuffer("{"); // while for if cart curt buffer.append("hede hodo"); buffer.append("}"); return buffer.toString(); } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar