2013-03-19 127 views
3

我有一個任務,我有兩個類,一個驅動程序類,它使用掃描儀實用程序從鍵盤讀取字符串,然後記錄它的字母頻率。 (每個字母出現在輸入字符串中的次數)。我的程序應該繼續輸入文本行,直到您連續輸入兩個返回。然後代碼應該打印字母頻率,然後是報告,提供最頻繁的信件和它的計數(在最常見的信件的情況下,任何最頻繁的信件會這樣做)。此外,我的代碼忽略字母大小寫 - 所以大寫字母以及小寫字母應該被計數。代碼編譯,但不返回任何

我的驅動類

import java.util.*; 

public class LetterDriver{ 
    public static void main(String[] args){ 
    Scanner s = new Scanner(System.in); 
    String tScan = " "; 
    while(tScan.length() > 0){ 
     tScan = s.nextLine(); 
    } 
    } 
} 

我的實際輪廓類是

public class LetterProfile { 
    int score[] = new int [26]; 

public void countChars (String s) { 
    s.toLowerCase(); 
    char a = 'a'; 
    for (int i = 0; i < s.length(); i++) { 
     int next = (int)s.charAt(i) - (int) a; 
     if (next<26 && next >= 0) 
     score[next]++; 
    } 
} 

    public void scoreLine (String lines) { // prints letter + # of appearance 
     int index = lines.length(); 
     for (int j = 0; j<index; j++) { 
     score[j]++; 
     System.out.println(j + score[j]); 
    } 
} 

    public int largestLength() { // finds most frequent letter 
     int largest = 0; 
     int largestindex = 0; 
     for(int a = 0; a<26; a++) 
     if(score[a]>largest){ 
     largest = score[a]; 
     largestindex = a; 
     } 
     return largestindex; 

    } 


    public void printResults() { 
     largestLength(); 
     System.out.println(largestLength()); 
    } 
    } 

再次我的代碼編譯,當我運行它讓我進入我的文字輸入,但是當我回到兩次都是我得到空白輸出。我認爲這可能與我的配置文件類沒有正確從我的驅動程序類讀取,但無法弄清楚什麼是錯的。

回答

2

你只是在你的主要方法中讀取掃描儀的數據,你沒有在Main方法中實例化你的類LetterProfile,所以它什麼都不做。

1

你沒有在任何地方使用LetterProfile!您只是閱讀輸入內容,但未傳入LetterProfile。在您的驅動程序中實例化LetterProfile類並調用相關方法。

你的驅動程序類可能看起來像:

public class LetterDriver{ 
    public static void main(String[] args){ 
    LetterProfile letterProfile = new LetterProfile(); 
    Scanner s = new Scanner(System.in); 
    String tScan = " "; 
    while(tScan.length() > 0){ 
     tScan = s.nextLine(); 
     letterProfile.countChars(tScan); 
    } 

    // Print the result 
    letterProfile.printResults() 
    } 
} 
+0

請問爲什麼它是letterProfile.countChars(TSCAN);而不是s?是不是我的字符串輸入? – aiuna 2013-03-19 17:33:20

+0

's'是'Scanner'對象。使用掃描儀,您正在讀取變量'tScan'中的字符串,您將使用該字符串。 – Amar 2013-03-19 17:35:37

+0

好的,謝謝,我覺得司機班很好走,但我的個人檔案類時髦,所以它沒有返回我所需的輸出.. – aiuna 2013-03-19 17:38:16

1

你只是從輸入獲得的數據在你的主要方法,你必須初始化你的第二個類名是LetterProfile在靜態的主要方法,所以它什麼都不做。 java開始從讀靜態變量,然後靜態方法,然後其他所有事情..

1

你在哪裏有所謂的LetterProfile的方法在主類?

請參閱下面的代碼: -

import java.util.*; 

public class LetterDriver{ 
    public static void main(String[] args){ 
    Scanner s = new Scanner(System.in); 
    LetterProfile lp=new LetterProfile(); 
    String tScan = " "; 
    while(tScan.length() > 0){ 
     tScan = s.nextLine(); 
    } 
    lp._any_of_letter_profile_class_method(); 
    } 
} 

或者

public class LetterDriver{ 
    public static void main(String[] args){ 
    Scanner s = new Scanner(System.in); 
    LetterProfile lp=new LetterProfile(); 
    String tScan = " "; 
    while(tScan.length() > 0){ 
     tScan = s.nextLine(); 
     lp._any_of_letter_profile_class_method(); 
    } 

    } 
}