用于中国研究的简单数组上的 Java NullPointerException

标签 java eclipse exception nullpointerexception

我正在用 Java 编写一个非常简单的命令行程序来测试我对中文书写系统的了解。目标是显示英语、拼音或汉字,然后强制用户输入未显示的 2 个。在解决了一些简单的数组错误后,我遇到了 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];
    }

对于系统询问用户是否希望继续的上述“if”部分,这并不重要。 接下来,我通过查看第一个字符是否为 * 来检查以确保不会再次显示相同的条目,这在我的程序中表明该条目已被使用。

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,我可以假设(但这就是我在这里的原因),因此检索第一个字符应该没有问题完整的条目,对吗?

问题是系统可能检索到一个汉字而不知道如何处理吗? 或者我正在错过什么? 感谢任何可以帮助我的人。您一定会获得学分!

最佳答案

你有很多错误。

错误 1:

使用equals()而不是==来比较字符串。这一行:

if(mandalist[randInt][randIntSub] == ""){

应该是:

if(mandalist[randInt][randIntSub].equals("")){

或更好:

if(mandalist[randInt][randIntSub].isEmpty()){

错误 2:

java 数组是从零开始的;数组的最高索引是 length - 1,而不是 length,最低索引是零,而不是一,所以你的循环:

for (int i = mandalist.length; i>0 ;i--){

应该是:

for (int i = mandalist.length - 1; i >= 0 ;i--){

错误 3(导致您的问题的错误):

与 Bug 2 类似,您的循环在索引零处初始化元素时停止,因此应该是:

for (int i = (Master.Mandarray.length-1); i >= 0 ;i--){ // i >= 0, not i > 0
<小时/>

除非您确实需要循环索引,否则请使用行业标准方法来提升索引:

for (int i = 0; i < Master.Mandarray.length-1; i++){

关于用于中国研究的简单数组上的 Java NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689653/

相关文章:

Java HashMap 与数组列表

Eclipse 类型字体颜色

java - 仅测试 src 文件夹中的 Eclipse Java OpenCV unsatisfiedLinkError

c# - 使用 "using"语法时出现流关闭错误

oracle - 在 PL/SQL 中使用全局异常是一种不好的做法吗?

java - HttpsURLConnection 显示安全警告对话框而不是捕获异常

java - 在 IntelliJ 插件中创建后台任务

java - Spring Data PageImpl 没有返回正确大小的页面?

java - Jenkins headless linux从机连接错误

java - nar-maven-plugin javah 失败,常量池中的字节标记无效 : 18