Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我在';我正在检查数组字符串是否为空?_Java_Android_Arrays_String_Nullpointerexception - Fatal编程技术网

Java 为什么我在';我正在检查数组字符串是否为空?

Java 为什么我在';我正在检查数组字符串是否为空?,java,android,arrays,string,nullpointerexception,Java,Android,Arrays,String,Nullpointerexception,为什么我在下面的第二条if语句中出现空指针错误 我正在检查if语句,看看数组字符串scores是否为空,但它总是在说nullpointer exception时崩溃。如果有帮助的话,我还添加了LogCat String[] scores; String times = ""; public void Read() { FileInputStream inputStream = null; try { inputStream = openFileInput("

为什么我在下面的第二条if语句中出现空指针错误

我正在检查if语句,看看数组字符串
scores
是否为空,但它总是在说nullpointer exception时崩溃。如果有帮助的话,我还添加了LogCat

String[] scores;
String times = "";

public void Read() {
    FileInputStream inputStream = null;

    try {

        inputStream = openFileInput("timesfile");

        byte[] reader = new byte[inputStream.available()];

        while (inputStream.read(reader) != -1) {
        }
        times = new String(reader);

    } catch (IOException e) {
        e.printStackTrace();

    } finally {
        if (inputStream != null) {
            try {
                    inputStream.close();
            } catch (IOException e) {
                    e.printStackTrace();
            }

        }

    }

    if (!times.isEmpty() && times != null && times != ""
                    && times.length() != 0) 
    {
        scores = new String(times).split(",");
        Arrays.sort(scores);
    }
    if (scores.length != 0 && scores != null && scores.length >= 4) { //I get a nullpointer exception here!

        better = false;
        if (Integer.parseInt(endTime.split(":")[0]) > Integer
                        .parseInt(scores[0].split(":")[0])) {
            better = true;
        } else if (Integer.parseInt(endTime.split(":")[1]) > Integer
                        .parseInt(scores[0].split(":")[1])) {
            better = true;
        } else if (Integer.parseInt(endTime.split(":")[2]) > Integer
                        .parseInt(scores[0].split(":")[2])) {
            better = true;
        } else {
            better = false;
        }

    }

}
日志:

11-16 22:32:21.195: E/AndroidRuntime(28584): FATAL EXCEPTION: Thread-2278
11-16 22:32:21.195: E/AndroidRuntime(28584): java.lang.NullPointerException
11-16 22:32:21.195: E/AndroidRuntime(28584):    at com.example.app.TestActivity$TestView.scoreRead(TestActivity.java:426)
11-16 22:32:21.195: E/AndroidRuntime(28584):    at com.example.app.TestActivity$TestView.over(TestActivity.java:303)
11-16 22:32:21.195: E/AndroidRuntime(28584):    at com.example.app.TestActivity$TestView.run(TestActivity.java:267)
11-16 22:32:21.195: E/AndroidRuntime(28584):    at java.lang.Thread.run(Thread.java:856)
如果(times!=null)首先执行

然后嵌套在那做
!times.isEmpty()

isEmpty()检查字符串的长度是否为零。不管它是否为null,都不会。0的长度为“
,不为空

如果它是另一个正在检查的字符串,那么同样的原则也适用于该字符串

然后嵌套在那做
!times.isEmpty()

isEmpty()检查字符串的长度是否为零。不管它是否为null,都不会。0的长度为“
,不为空


如果正在检查的是另一个字符串,同样的原则也适用

您可以尝试保持
时间吗!=最左侧为null
。操作顺序是从左到右

if(times!=null&&!times.isEmpty()&×!=“&×.length()!=0)

编辑: 是的,西蒙是对的<代码>次数!=“应该是
!倍。相等(“”)

但无论如何,您已经在检查
!times.isEmpty()
所以你根本不需要那一块

这应该做到:

if(times!=null&&!times.isEmpty())


你能试着保持
时间吗!=最左侧为null
。操作顺序是从左到右

if(times!=null&&!times.isEmpty()&×!=“&×.length()!=0)

编辑: 是的,西蒙是对的<代码>次数!=“应该是
!倍。相等(“”)

但无论如何,您已经在检查
!times.isEmpty()
所以你根本不需要那一块

这应该做到:

if(times!=null&&!times.isEmpty())


这不是一张安全支票

times != ""
字符串的相等运算符测试两个字符串是否为同一对象。相反,使用

!times.equal("")

=有时可能会起作用,因为Java“实习生”字符串可能是同一个对象,但您不应该依赖于它。

这不是一个安全检查

times != ""
字符串的相等运算符测试两个字符串是否为同一对象。相反,使用

!times.equal("")

=有时可能有效是“”,因为Java“实习生”字符串可能是同一个对象,但您不应该依赖于它。

您的问题和您的注释不匹配,但是,无论您是检查
分数
还是检查
次数
,您都必须首先检查它们是否为
null
。(否则,您将看到NPE。)

使用:

以及:


为什么我在下面的第二条if语句中出现空指针错误


当您尝试对
null
的变量调用方法时,会发生NullPointerException。因此,如果
scores
null
,则此代码
scores.length
正在尝试调用
null.doSomething()
。你不能要求什么都不做。

你的问题和你的评论不匹配,但不管你是在检查
分数
还是
次数
,你必须先检查它们是否为
空。(否则,您将看到NPE。)

使用:

以及:


为什么我在下面的第二条if语句中出现空指针错误


当您尝试对
null
的变量调用方法时,会发生NullPointerException。因此,如果
scores
null
,则此代码
scores.length
正在尝试调用
null.doSomething()
。你不能要求什么都不做。

实际上,只有当

!!times.isEmpty()&×!=空(&&次!=“”&×.length()!=0

这是真的。事情的发生是因为它不是真的:)。并且,在时间上调用方法并比较它是否为null是没有意义的。但是这里没有NPE,所以我们忽略它

!!times.isEmpty与times.legth相同0;

时代!=“”在使用“new”运算符初始化且未被暂存时始终为true

因此,所有条件都等于(如您所见,时间不是空的)

!!泰晤士报


无论如何,在涉及对选中对象调用方法的其他检查之前,您应该先检查null。

实际上,只有当

!!times.isEmpty()&×!=空(&&次!=“”&×.length()!=0

这是真的。事情的发生是因为它不是真的:)。并且,在时间上调用方法并比较它是否为null是没有意义的。但是这里没有NPE,所以我们忽略它

!!times.isEmpty与times.legth相同0;

时代!=“”在使用“new”运算符初始化且未被暂存时始终为true

因此,所有条件都等于(如您所见,时间不是空的)

!!泰晤士报


无论如何,在涉及对选中对象调用方法的其他检查之前,应该先检查null。

变量times不是null。她不是用空值初始化的,而是空值

可以在TestActivity类的第426行中找到NullPointerException。我认为这是:

if (scores.length != 0 && scores != null && scores.length >= 4) {
因此,如果您更仔细地研究代码,分数变量为空,因为上面的条件是错误的

为此更改您的代码:

if (!times.isEmpty()) 
{
     scores = times.split(",");
     Arrays.sort(scores);
}
if (scores != null && scores.length > 0) {

   ...

}
else {

   System.err.println("There isn't score");
}

变量乘以不为空。她不是用空值初始化的,而是空值

可以在TestActivity类的第426行中找到NullPointerException。我认为这是:

if (scores.length != 0 && scores != null && scores.length >= 4) {
因此,如果您更仔细地研究代码,分数变量为空,因为上面的条件是错误的。
if (scores != null && scores.length >= 4) {
if (!times.isEmpty() && times != null && times != "" && times.length() != 0) 
if (times != null && !times.isEmpty())