1

我正在尝试从控制台读取一个字符串,将其转换为 char 数组,然后计算每个 char
及其出现次数,然后将其放入一个新的 char 数组中。

public static void main(String... args) throws FileNotFoundException {
    File words = new File("words.txt");
    Scanner input = new Scanner(System.in);     
    Scanner fileInput = new Scanner(words);


    System.out.println("Enter a word : ");
    String word = input.nextLine().toLowerCase();

    char[] wordCount = word.toCharArray();
    char[] countedChars = new char[wordCount.length];
    int[] counts = new int[countedChars.length];

    for(int a=0; a<wordCount.length; a++) {
        Character currentValue = wordCount[a];
        int count = 1;

        if(currentValue != null ) {
            for(int j = a+1; j<wordCount.length; j++) {
                if(wordCount[j] == currentValue) {
                    wordCount[j] = 0;
                    count++;
                }
            }               
        }
        if(currentValue != 0) {             
            countedChars[a] = currentValue;
            counts[a] = count;
        }
    }

事情是,当我创建 countedChars 数组时,我使用 wordCount.length 执行此操作,这使我在新数组中留有空白空间,以后我无法在程序中正确比较。如果所有字符只出现一次,就可以了,但如果不止一次我得到空插槽和这个带有单词的特定输出 - 游泳

s - 1
w - 1
i - 2
m - 2
  - 0
  - 0
n - 1
g - 1

我想使用数组,而不是数组列表或其他任何东西。谢谢您的时间!

4

2 回答 2

0

countedChars简单地说,您可以为您的和counts数组使用另一个索引变量。让我们说b。并在 for 循环结束时检查是否b < wordCount.length并分配剩余的字符 NULL 和 0。

或者在 for 循环之后,只需创建一个具有有效字符数长度的新数组,并将有效字符及其计数复制到新数组中。

于 2013-10-22T14:53:55.877 回答
0

要修剪数组,请根据值 > 0 的字符数创建一个新数组

int charsWithValuesCount = 0;
for (int i = 0; i < charsCount.length; i++) {
    if (charsCount[i] > 0) {
        charsWithValuesCount++;
    }
}

char[] newCharArray = new char[charsWithValuesCount];

// next: 
// loop to give array values of your characters
于 2013-10-22T14:51:06.187 回答