2014-05-10 74 views
0

我必須使用遞歸編寫程序,該程序會提示輸入一個單詞,然後計算字母a在該單詞中出現的次數。如何打印出現次數

我需要鍵入而不是+ count +才能使其工作?

這是我到目前爲止;

import java.util.Scanner; 

public class test{ 
    public static void main(String[] args) { 
    Scanner input=new Scanner(System.in); 
    System.out.println("Enter String"); 
    String line = input.nextLine(); 
    char p = 'a'; 
    } 

    public static int count (String line, char p){ 
    int len = line.length(); 
    if ((len == 0) || (p == '\0')){ // case for empty string or nil char. 
     return 0;      // recursion ends here 
    } 
    String rest = line.substring(1); 
    if (line.charAt(0) == p) { 
     return count(rest, p) + 1; // recurse on substring 
    } else { 

    } // end of if-else 

    return count(rest, p); // recurse on substring 

    } 

    System.out.println("Character a occurs " + count + " times "); 

} 
+3

Java不是C - java沒有「nul終止字符串」。測試'.isEmpty()'或'== null' – Bohemian

回答

0

在你的代碼底部卸下此:


{ 
    System.out.println("Character a occurs " + count + " times "); 
} 

而且在main方法添加以下行:

System.out.println("Character a occurs " + count(line,p) + " times "); 
+0

工作正常!我該如何改變char p ='a';所以它可以計算大寫字母和小寫字母?我試過char p ='a'或'A';但沒有運氣 – user3623620

+0

使用此if語句:'if(line.charAt(0)== p || line.charAt(0)== Character.toUpperCase(p)){'而不是您當前的。 – james

+0

謝謝!它現在正在全力運作。有幾個人說我不是在調用這個方法,但是這個程序是完全正常運行的。你知道爲什麼嗎? – user3623620

0

你應該CAL的方法計數並顯示結果在主要方法。

public static void main(String[] args) { 
    Scanner input=new Scanner(System.in); 
    System.out.println("Enter String"); 
    String line = input.nextLine(); 
    char p = 'a'; 
    System.out.println("Character a occurs " + count(line, p) + " times "); 
} 
0

你總是要遞歸,它只是你是否增加與否。你應該用代碼來表達它。

只用一隻(可讀)線替換整個方法:

public static int count(String line, char p) { 
    return line.isEmpty() ? 0 : count(line.substring(1), p) + (line.charAt(0) == p ? 1 : 0); 
} 

打印結果的屏幕應該是從你的主要方法。

0

看來u必須不叫烏爾計數方法..

試試這個..

public static void main(String[] args) { 

    Scanner input=new Scanner(System.in); 
    System.out.println("Enter String"); 
    String line = input.nextLine(); 
    char p = 'a'; 

    int count = count(line, p); 

    System.out.println("Character a occurs " + count + " times "); 

    } 
    public static int count (String line, char p) 
    { 
    int len = line.length(); 
    if ((len == 0) || (p == '\0')) // case for empty string or nil char. 
    return 0;      // recursion ends here 

    String rest = line.substring(1); 
    if (line.charAt(0) == p)  
    { 
     return count(rest, p) + 1; // recurse on substring 
    } 
    else { 

    } // end of if-else 
    { 
     return count(rest, p); // recurse on substring 
    } 
    } 
+0

它沒有「int count = count(line,p);」線路,任何想法爲什麼? – user3623620

+0

烏爾代碼不會工作...它有最後一個系統外線任何方法,所以它不會編譯自己...除了你試圖打印計數變量,這是沒有定義... – Nielarshi

+0

你需要調用你的方法somewhr否則它不會得到執行..或者在打印時你可以做count(line,p),否則你可以調用並將返回值存儲在某個int變量中。 – Nielarshi

0

另一種方式可以

import java.util.Scanner; 
public class test{ 
    static int counter=0; 
    public static void main(String[] args) { 
    Scanner input=new Scanner(System.in); 
    System.out.println("Enter String"); 
    String line = input.nextLine(); 
    char p = 'a'; 
    count(line, p); 
    System.out.println("Character a occurs " + counter + " times "); 
    } 

    public static void count (String line, char p){ 
    int len = line.length(); 
    if ((len == 0) || (p == '\0')){ // case for empty string or nil char. 
     return;      // recursion ends here 
    } 
    String rest = line.substring(1); 
    if (line.charAt(0) == p) { 
     counter++; // recurse on substring 
    } else { 

    } // end of if-else 
    count(rest, p); // recurse on substring 
    } 
} 
0

有在你的源犯了很多錯誤碼。您應該在短期內嘗試此操作,並閱讀Deitel的長期Java課程手冊,以提高您的編程技能。

import java.util.Scanner; 

public class test{ 
    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    System.out.println("Enter String"); 

    System.out.println("Character a occurs " + ((Integer)count(input.nextLine(), 'a')).toString() + " times."); 

    input.close(); 
    } 

    public static int count (String line, char p){ 
    if (line.length() == 0) { // base case: no more chars to look at 
     return 0; 
    } 

    if (line.charAt(0) == p) { 
     return count(line.substring(1), p) + 1; // recurse on substring 
    } 
    else { 
     return count(line.substring(1), p); // recurse on substring 
    } 
    } 
}