数组值无理由更改JAVA

数组值无理由更改JAVA,java,arrays,Java,Arrays,arr[]的内容在某种程度上发生了变化,因此当我试图打印从方法返回的数组的内容时,它会显示null。 此方法从用户获取一个文本文件路径,将每个单词放入一个数组中,并将其与字典数组书进行比较,字典中不存在的单词应以dif[]返回 int d = arr.length-compare(book, arr); int l = 0; int bi = 0; String[] dif = new String[d]; if (d >= 1) { for (int i =

arr[]的内容在某种程度上发生了变化,因此当我试图打印从方法返回的数组的内容时,它会显示null。 此方法从用户获取一个文本文件路径,将每个单词放入一个数组中,并将其与字典数组书进行比较,字典中不存在的单词应以dif[]返回

  int d = arr.length-compare(book, arr);
  int l = 0;
  int bi = 0;
  String[] dif = new String[d];
  if (d >= 1) {
    for (int i = 0; i < arr.length; i++) {
      for (int a = 0; a < book.length; a++) {
        if (book[a].equalsIgnoreCase(arr[i])) {
//IF I TRY TO PRINT ARR[I] HERE IT HAS A VALUE
          bi = 1;
        }
      }
      if (bi != 1) {
        dif[l] = arr[i];
//HERE ARR[I] IS NULL
        System.out.println(arr[i]);
        l = l + 1;
      }
    }
    return dif;
  }
  else {
    return null;}
}

您永远不会重置bi的值,因此只要arr中有一个条目等于book中的一个条目,arr中的所有后续值都将被输出,其中可能包括null。

两件事:1我请求您,使用实际的描述性变量名。很难理解你所说的d、arr和dif是什么意思。2您正在显式地为arr赋值。您确定dif不是空的吗?在我看来是这样的。你在你的问题中发布了很多代码,这让我们和未来的读者不清楚问题到底在哪里。请将问题代码减少到10行或更少。请参阅:和。@JoeC:这实际上是确定问题的正确代码量。考虑到OP对它的评论,这是相当明显的。我看不出原因,也无法调试它,因为OP没有提供所有需要的东西。因此,它不是MCVE。IMO发布代码中的arr[i]不可能改变。。。一定有什么东西丢失了,或者空已经在arrI中,我不应该在这个网站上拥有一个帐户
for (int i = 0; i < arr.length; i++) {
  for (int a = 0; a < book.length; a++) {
    if (book[a].equalsIgnoreCase(arr[i])) {
//IF I TRY TO PRINT ARR[I] HERE IT HAS A VALUE
      bi = 1;
    }
  }
  if (bi != 1) {
    dif[l] = arr[i];
//HERE ARR[I] IS NULL
    System.out.println(arr[i]);
    l = l + 1;
  }
}