2016-04-27 50 views
1

这是我的代码。我必须计算我的文本中字母的频率。 我得到的输出: b 28(应为7) C 34(应为6)如何在循环结束时退出for循环,并输入新的数据而不用付款

我想我的问题是,它使之,我不想它。

int[] alphabetArray = new int[26];  
    // char varA = 'a';  
    alphabetArray[0] = A;`` 

    int count = 0; 
    for (int i = 0; i < text.length; i++) { 
     if (text[i] == A) { 
      count++; 
     } 
    } 
    System.out.println((char) alphabetArray[0] + " kommt " + count + " Mal"); 

    alphabetArray[1] = B; 

    for (int i = 0; i < text.length; i++) { 
     if (text[i] == B) { 
      count++; 
     } 
    } 
    System.out.println((char) alphabetArray[1] + " kommt " + count + " Mal"); 
    alphabetArray[2] = C; 
    for (int i = 0; i < text.length; i++) { 
     if (text[i] == C) { 
      count++;  
     } 
    } 
    System.out.println((char) alphabetArray[2] + " kommt " + count + " Mal"); 

    return null; 
+1

您应该在每个打印语句后将'count'设置为'0'。 – Titus

+0

所以你不介意我必须在每个循环中声明计数? – sitm

回答

0

虽然可以通过清空打印后count解决您的问题,你的程序将与循环本身重复三次不太理想。当你看到这样的模式时,这表示你需要另一个循环。

制作一个循环外部您的当前循环要处理从'A''Z'的字母。

for (char letter = 'A' ; letter <= 'Z' ; letter++) { 
    int letterIndex = letter - 'A'; 
    for (int i = 0; i < text.length; i++) { 
     if (text[i] == letter) { 
      alphabetArray[letterIndex]++; 
     } 
    } 
} 

注意,因为你正在积累计数所有字母,你并不需要一个单独的count变量:由于在Unicode字母码点是连续的,你可以从中减去'A'找到一个字母的指数,因为alphabetArray[letterIndex]取而代之。如果要随时打印字母频率,请在嵌套循环后打印alphabetArray[letterIndex]

+0

这就是trur dasblinkenlight .. –

+0

只是一个问题:为什么letterIndex = letter - 'A'?我在这里不明白 – sitm

+0

@sitm变量'letter'表示一个字母的数字UNICODE代码点。字母“A”到“Z”的数字代码点是连续的数字。这意味着您可以从'letter'中减去具有最低代码点的字母的数字,以查找该字母距'A'多远。对于'B'你会得到''B' - 'A'== 1',对于'C'你会得到''C' - 'A'== 2',等等。 – dasblinkenlight

0

您初始化计数= 0一次,你都无需重新initalizing它增加为0。

int[] alphabetArray = new int[26];  
// char varA = 'a';  
alphabetArray[0] = A;`` 

int count = 0; 
for (int i = 0; i < text.length; i++) { 
    if (text[i] == A) { 
     count++; 
    } 
} 
System.out.println((char) alphabetArray[0] + " kommt " + count + " Mal"); 

alphabetArray[1] = B; 
count=0; 
for (int i = 0; i < text.length; i++) { 
    if (text[i] == B) { 
     count++; 
    } 
} 
System.out.println((char) alphabetArray[1] + " kommt " + count + " Mal"); 
alphabetArray[2] = C; 
count=0; 
for (int i = 0; i < text.length; i++) { 
    if (text[i] == C) { 
     count++;  
    } 
} 
System.out.println((char) alphabetArray[2] + " kommt " + count + " Mal"); 

return null; 
+0

非常感谢你现在的作品!任何提示,如果我想切换而不是?因为它可以很长,直到字母Z! – sitm

+0

你只需要计算特定字符串中字符的出现次数。一种方法是创建一个大小为26的int数组,并且每当您发现该角色增加它时,最终您将获得每个角色的出现次数。但是,如果你想要一个特定的字符串,那么使用字符串hashmap作为key和integer作为值,所以每当你发现它只是放入它,如果它存在只是增加计数。如果这有助于将其标记为答案,以便其他人可以轻松地引用它。 –

+0

使用hasmap是一个好主意,我只想在不使用它的情况下做,但我想我会做,如果我没有任何其他解决方案:) – sitm