2

我正在做一个作业,我必须编写一个程序来读取用户的字符串并打印出字符串中出现次数的字母。例如“Hello world”,它应该打印出“h=1 e=1 l=3 o=2 ... etc.”,但我的只写“hello world”和字母总数。我不能使用 hashmap 函数,只能使用数组。有人可以给我一两个关于如何从下面的书面代码中获得我喜欢的功能的提示吗?我不完全了解如何将书面输入保存在数组中。

到目前为止,这是我的代码。

public class CountLetters {
    public static void main( String[] args ) {
        String input = JOptionPane.showInputDialog("Write a sentence." );
        int amount = 0;
        String output = "Amount of letters:\n";

        for ( int i = 0; i < input.length(); i++ ) {
            char letter = input.charAt(i);
            amount++;
            output = input;
        }
        output += "\n" + amount;
        JOptionPane.showMessageDialog( null, output,
                             "Letters", JOptionPane.PLAIN_MESSAGE ); 
    }
}
4

5 回答 5

14

您不需要 26switch箱。只需使用简单的代码来计算字母:

    String input = userInput.toLowerCase();// Make your input toLowerCase.
    int[] alphabetArray = new int[26];
    for ( int i = 0; i < input.length(); i++ ) {
         char ch=  input.charAt(i);
         int value = (int) ch;
         if (value >= 97 && value <= 122){
         alphabetArray[ch-'a']++;
        }
    }

完成计数操作后,结果显示为:

 for (int i = 0; i < alphabetArray.length; i++) {
      if(alphabetArray[i]>0){
        char ch = (char) (i+97);
        System.out.println(ch +"  : "+alphabetArray[i]);   //Show the result.
      }         
 }
于 2013-10-03T16:22:53.090 回答
2
  • 创建一个长度为 26 的整数数组。
  • 迭代字符串的每个字符,递增存储在与每个字符关联的数组中的值。
  • 每个字符在数组中的索引由x - 'a'小写字符和x - 'A'大写字符计算,其中x是特定字符。
于 2013-10-03T16:08:03.093 回答
0

您可以创建一个数组,其中第一个元素将代表“a”,第二个“b”等。如果您需要区分大小写,则可以在末尾添加。该数组的所有值在开始时都等于 0。然后你遍历你的句子并在数组上增加所需的值。最后打印所有大于 0 的值。简单吗?

如果您需要更多帮助,请告诉我

于 2013-10-03T16:08:22.020 回答
0

不,您不应该创建一个 26 的数组。如果字符串包含意外字符,这将中断。(ä、ö、ü 有人吗?)正如我指出的那样,我的评论使用地图。这将适用于所有可能的角色。

于 2013-10-03T16:17:10.550 回答
0

导入java.io.*;

公共类 CharCount {

public static void main(String[] args) throws IOException
{
    int i,j=0,repeat=0;
    String output="",input;
    char c=' ';
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("enter name ");
    input=br.readLine();
    System.out.println("entered String ->\""+input+"\"");
    input=input.toLowerCase();

    for(i=0;i<input.length();i++)
    {
        for(j=0;j<output.length();j++)
        {
            if(input.charAt(i)==output.charAt(j) || input.charAt(i)==c)
            {
                repeat=1;
                break;
            }
        }
        if(repeat!=1)
        {
            output=output+input.charAt(i);
        }
        repeat=0;
    }

    System.out.println("non-reepeated chars in name ->\""+output+"\"");

    int count[]=new int[output.length()];
    for(i=0;i<output.length();i++)
    {
        for(j=0;j<input.length();j++)
        {
            if(output.charAt(i)==input.charAt(j))
                count[i]=count[i]+1;
        }
    }
    for(i=0;i<output.length();i++)
        System.out.println(output.charAt(i)+"- "+count[i]);
}

}

于 2014-05-05T12:10:06.310 回答