0

我在这里粘贴了我的代码。在代码下方,我描述了我正在尝试做的事情

 import java.util.*;
    import java.io.*;

//given a string, gives letters counts etc
public class LetterDatabase{
    private String word;
    private int[] charCounts;
    public static final int TOTAL_LETTERS=26;

    //constructor
    public LetterDatabase(String word) {
        this.word=word;
        int[] charCounts= new int[TOTAL_LETTERS];
        //this function fillup charCounts with no of occurances
        //more below
        fillupcharArray();
    }

    /*Returns a count of letters.  
    public int get(char letter) {
    return charCounts[Character.getNumericValue(letter)-10];        
}

/*Sets the count for the given letter to the given value.  
public void set(char letter,int value) {
    int index=Character.getNumericValue(letter-'a');
    charCounts[index]=value;        
 }


/* converts string to Array of chars containing only alphabets
private char[] convertToArray() {
    String str = word.replaceAll("[^a-zA-Z]+", "");
    char[] charArr=new char[str.length()];
    for (int i = 0; i < str.length(); i++) {
            charArr[i] = str.charAt(i);
        }
    return charArr;
}

private void fillupcharArray(){
    char[] charArr=convertToArray();
    for(int i=0;i<charArr.length;i++) {
       for(int j=0;j<26;j++) {
            if (Character.toLowerCase(charArr[i])==Character.toLowerCase((char)('a'+j))) {
           charCounts[j]+=1;
            }
        }
    }
}

}

我用来测试的客户端代码如下

import java.util.*;
import java.io.*;
public class Testdatabase{
 public static void main(String args[]) {
    String str="my name is Dummy!!!:..,";
    LetterDatabase first= new LetterInventory(str);
    System.out.println(first.get('a'));
    System.out.println(first.set('a'));
    System.out.println(first.get('a'));
    }
 }

说明:我定义了一个 LetterDatabase 类,它计算给定字符串中的字母数量——仅限字母(字符类型)。我有一个 get 方法,它返回特定字母的出现和一个 set 方法,它将字母的值设置为一个设定值。

在我的构造函数中,我正在调用一个填充数组(charCounts)的函数,以便我可以轻松查找给定字符的出现。首先,我的构造函数不起作用。我的类代码编译并且我上面的客户端代码编译。当我运行客户端代码,注释掉 getter 和 setter 调用时,我收到以下错误。

Exception in thread "main" java.lang.NullPointerException
    at LetterDatabase.fillupcharArray(LetterInventory.java:55)
    at LetterDatabase.<init>(LetterInventory.java:17)
    at Testdatabase.main(hw1test.java:7)

我无法弄清楚出了什么问题。当我单独测试 fillupcharArray 时,它似乎工作正常。我不是在这里粘贴。

其次,我get and set在课堂上定义方法的方式不是很好。如果我不必使用就好了Character.getNumericValue

我愿意听取任何其他改进。谢谢你的时间

4

2 回答 2

3

在您的构造函数中,您定义了一个局部变量charCounts

int[] charCounts= new int[TOTAL_LETTERS];

这隐藏了实例变量 charCounts,我认为您打算将其分配给它。

将其分配给实例变量charCounts,如下所示:

charCounts = new int[TOTAL_LETTERS];

这意味着,在您的代码中,实例变量charCounts一直存在null,直到您访问并获得NullPointerException结果。

于 2013-06-28T23:57:22.257 回答
3

charCountsLetterDatabase. 代替

int[] charCounts = new int[TOTAL_LETTERS];

charCounts = new int[TOTAL_LETTERS];

在类方法内部,当局部变量与实例变量同名时,局部变量会隐藏方法块内的实例变量。在这种情况下,局部变量charCounts隐藏了实例变量charCounts

来自维基百科

在计算机编程中,当在某个范围(决策块、方法或内部类)中声明的变量与在外部范围中声明的变量具有相同的名称时,就会发生变量隐藏

于 2013-06-28T23:57:46.460 回答