我正在编写一个非常简单的 Java 命令行程序来测试我对中文书写系统的了解。目标是呈现英文、拼音或汉字,然后强制用户输入未显示的 2。在处理了几个简单的 Array 错误后,我遇到了 NullPointerException。
现在,我明白它是什么,我根本不明白它为什么会发生。
在名为 Master.java 的文件中,我有以下内容:
static final String [] [] Mandarray = {{"You", "Nǐ", "你"}, {"Good", "Hǎo", "好"}};
在我的 Chinese_Mandarin 对象的构造函数中,我将此数组的内容复制到一个新的数组中,即 Chinese_Mandarin 对象的成员之一,如下所示,
public Chinese_Mandarin(char transfer){
if(transfer == 'n' || transfer != 'y')System.exit(0);
for (int i = (Master.Mandarray.length-1); i>0 ;i--){
mandalist [i][0] = Master.Mandarray[i][0];
mandalist [i][1] = Master.Mandarray[i][1];
mandalist [i][2] = Master.Mandarray[i][2];
}
对于询问用户是否希望继续的系统的上述“如果”部分,这并不重要。接下来,我通过查看第一个字符是否为 * 来检查以确保不会再次显示相同的条目,在我的程序中,这表明该条目已被使用。
public void presenter(){
Scanner chinEngl = new Scanner(System.in);
restart: for (int i = mandalist.length; i>0 ;i--){
randInt = random.nextInt(mandalist.length);
randIntSub = random.nextInt(3);
if(mandalist[randInt][randIntSub] == ""){
continue restart;
}
else if (((mandalist[randInt][randIntSub]).charAt(0)) == '*'){
continue restart;
}
在这里,我初始化一个扫描器以供以后使用,创建两个随机整数以供以后使用,并确保元素不为空(如果是,我传递给标签'restart'以继续循环) .
在线上:
else if (((mandalist[randInt][randIntSub]).charAt(0)) == '*'){
我收到 NullPointerException 错误,但无法理解为什么... Master.mandarray 已被转移到 mandalist,我可以假设(但这就是我在这里的原因),因此检索完整条目的第一个字符应该没有问题, 正确的?
是系统检索到一个汉字不知道怎么处理的问题吗?或者是我正在丢失的东西?感谢任何可以帮助我的人。你一定会得到学分!