我正在尝试编写一段使用数组生成字母频率的代码。我对如何将字符串中的字母与数组中的字母进行比较感到困惑。我的基本伪代码如下。
import java.util.Scanner;
public class test {
public static void main (String[]args){
Scanner sc = new Scanner (System.in);
System.out.print ("Please enter a sentence: ");
String str = sc.nextLine();
String [] let = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Float [] freq = new Float [25];
int x,a = 0,b = 0, strCount = 0;
String str1;
str1 = str.replaceAll(" ", "");
for (x = 0; x < str1.length(); x++)
{
strCount++;
}
System.out.println("The number of Characters in the string is :" + strCount);
System.out.println();
现在我坚持如何将str1与let数组进行比较。我尝试了以下但是比较有问题。
while (b < strCount)
{
while (a < let.length)
{
if (let[a] == str1.charAt(b))
{
freq[a] = freq[a]++ ;
}
if(let[a] != str1.charAt(b))
{
a = a++;
}
}
b = b++;
}
非常感谢任何帮助。
谢谢。
答案 0 :(得分:0)
好吧,我看到了其他一些问题,但你提出的问题很简单。
if (let[a].charAt(0) == str1.charAt(b)) // <-- one letter
{
freq[a]++ ;
}
else
{
a++;
}
此外,strCount = str1.length();
不需要循环。
答案 1 :(得分:0)
您可能希望通过替换while循环来消除永久循环的风险 对于 循环。 也, a = a ++; 是不正确的,而 一个++; 要么 a = a + 1; 是正确的。 解决这两个问题,你就可以解决问题了。
答案 2 :(得分:0)
让我解决一些看似突出的问题。首先,您可能需要放大Float[]
,因为它的大小 25 并且字母表中有 26 字母,这意味着您需要改为Float[] freq = new Float[26]
。此外,您使用str.replaceAll()
,但str.replace()
就足够了 - 它们都会替换字符串中的所有匹配项。
要计算出现次数,您可能需要使用str.charAt(index)
或将其分解为char数组(str.toCharArray()
),以将该字符与存储在数组中的值进行比较。由于它们都是单个字符,因此您可能还希望将值存储为基元char
而不是String
。
两个while
循环完全没必要,因为可以使用一个for
循环完成。另外,使用str.length()
而不是创建自己的变量并使用for
循环来增加strCount
,尤其是当您指定循环str.length()
次时...