2010-10-20 14 views
6

Merhaba
Ben zaten str.length() fonksiyonunu orada var olduğunu biliyoruz Java
dize uzunluğunu hesaplayan bir özyinelemeli fonksiyon yazmaya çalışıyorum, ancak sorun deyimi bir özyinelemeli fonksiyonuJava'da dize nasıl sonlanır?

uygulamak istediği C programlama dilinde sonlandırma karakteri '\ 0', sadece dize biterse nasıl bileceğim bilmek istiyorum Java

Program dizimde '\ n' yazdığımda programım iyi biter. Lütfen bana haber ver. Teşekkürler!

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package careercup.google; 

/** 
* 
* @author learner 
*/ 
public class Strlen { 
    private static final String Test = "abcdefg\n"; 
    private static int i =0; 

    public static void main(String args[]){ 
     System.out.println("len : " + strlen(Test)); 
    } 

    private static int strlen(String str){ 
     if(str == null){ 
      return 0; 
     } 
     if(str.charAt(i) == '\n'){ 
      return 0; 
     } 
     i += 1; 
     return 1 + strlen(str); 
    } 
} 

Çıktı:

run: 
len : 7 
BUILD SUCCESSFUL (total time: 0 seconds) 

cevap

2

Lütfen bu kodun çok verimsiz olduğunu unutmayın, ancak bir String'in uzunluğunu yinelemeli olarak hesaplar.

private static int stringLength(String string){ 
     if(string == null){ 
      return 0; 
     } 

     if(string.isEmpty()){ 
      return 0; 
     } 

     return 1 + stringLength(string.substring(1)); 
    } 
+0

+ 1, bu (tamamen contrived) örnek, ben yazılı olurdu, sen beni görevden kurtardınız değil mi:) –

+0

@learner: Bu örnek, C'ye çok fazla erişemediğinden, çıplak belleğe erişiminiz vardır ve kod (optimize edildiğinde) aşağıdaki gibi aynı döngüye derlenir: int count = 0; while (pointerToChar ++! = NULL) {count ++; } ' –

14

Java dizeleri C dizeleri değildir. Dize, uzunluktaki karakter sayısından sonra biter.

+0

Merhaba Ignacio, yani bir dizenin sonlandırılıp sonlandırılmadığını asla bilemeyiz (i == str.length() - 1) ?? – daydreamer

+4

@learner. Evet. Ama tersine, String.length'i arayabilirsin ve termineri bulmak için bütün ipi tekrarlamak zorunda kalmadan uzunluğunu söylersin. Bu iyi birşey. – Thilo

+0

Teşekkürler Thilo !, Ben senin noktası var, ben sadece böyle bir işlevi yazıyor eğer Java yazmak mümkün olduğunu tüm – daydreamer

1

Java dize sayısı ile birlikte bir karakter dizisi tarafından desteklenmektedir beri bu bir özyinelemeli yöntemi uygulamak için sorun almak, neden, çok basit uzunluk alabilirsiniz, iyi bir soru olduğunu sanmıyorum?

+2

Soru," problem bildirimi "ni ve" string.length "in kendisinden söz edilen posteri içerir. Bu nedenle, bunun özyinelemeli fonksiyonlar üzerinde bir çeşit egzersiz olduğunu varsayalım: yinelemeli çağırma + sonlandırma koşulu. “Sentinel” karakteri bulunmadığı için sonlandırma şartının nasıl ifade edileceği sorusu, IMHO. –

İlgili konular