Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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 在我使用for循环填充数组后,数组中出现了很多空值_Java_Arrays - Fatal编程技术网

Java 在我使用for循环填充数组后,数组中出现了很多空值

Java 在我使用for循环填充数组后,数组中出现了很多空值,java,arrays,Java,Arrays,您好,我正在构建一个Java程序,它接收一个名为wordlist的文件,该文件包含字典中的所有单词,每行一个,我通过扫描仪将其传入,以便稍后我可以使用算法进行搜索: File file = new File("wordlist.txt"); Scanner scanner = new Scanner(file); String [] words = new String[69903]; 没问题。然后我尝试使用for循环填充单词数组: for(

您好,我正在构建一个Java程序,它接收一个名为wordlist的文件,该文件包含字典中的所有单词,每行一个,我通过扫描仪将其传入,以便稍后我可以使用算法进行搜索:

      File file = new File("wordlist.txt");

      Scanner scanner = new Scanner(file);

      String [] words = new String[69903];
没问题。然后我尝试使用for循环填充单词数组:

      for(int i = 0; scanner.hasNextLine(); i++) {
      String input = scanner.nextLine();
      words[i] = input;
      }
这就是问题所在。我尝试在循环的每个迭代中打印输入,它是.txt文件中的一个实际单词。我还尝试在每次迭代的循环过程中打印单词[I],它也起了作用。然而,不知何故,当我在循环之后遍历数组时,它充满了空值,这显然给程序带来了问题。发生了什么以及我如何修复它。多谢各位

顺便说一下,这是整个计划:

    import java.util.Scanner;
    import java.util.Arrays;
    import java.io.File;

    public class BinarySearch {

    public static void main(String[] args) throws Exception {

    File file = new File("wordlist.txt");

    Scanner scanner = new Scanner(file);

    String [] words = new String[69903];

    // Something here not working

    for(int i = 0; scanner.hasNextLine(); i++) {
    String input = scanner.nextLine();
    words[i] = input;
    }

    System.out.println("Done reading input words");

    System.out.println("Done sorting input words");

    Scanner query = new Scanner(System.in);

    String key = query.nextLine();

    if(search(key, words, 0, words.length) < 0) {

    System.out.println(key + " is not in the english dictionary.");

    } else {

    System.out.println(key + " is part of the english dictionary.");

    }

    }

    public static int search(String key, String[] arr, int lo, int 
    hi) {

    if(hi <= lo) {

    return -1;

    }

    int mid = lo + (hi - lo) / 2;

    int compute = arr[mid].compareTo(key);

    if (compute > 0) {

    return search(key, arr, lo, mid);

    }

    if (compute < 0) {

    return search(key, arr, mid + 1, hi);

    }

    else {

    return mid;

    }

    }




    }
import java.util.Scanner;
导入java.util.array;
导入java.io.File;
公共类二进制搜索{
公共静态void main(字符串[]args)引发异常{
File File=新文件(“wordlist.txt”);
扫描仪=新扫描仪(文件);
String[]words=新字符串[69903];
//这里有些东西坏了
对于(int i=0;scanner.hasNextLine();i++){
字符串输入=scanner.nextLine();
字[i]=输入;
}
System.out.println(“完成读取输入字”);
System.out.println(“完成输入字排序”);
扫描仪查询=新扫描仪(System.in);
String key=query.nextLine();
if(搜索(关键字,单词,0,单词.长度)<0){
System.out.println(key+“不在英语词典中”);
}否则{
System.out.println(key+“是英语词典的一部分”);
}
}
公共静态整型搜索(字符串键,字符串[]arr,整型lo,整型
嗨){
如果(hi 0){
返回搜索(键、arr、lo、mid);
}
如果(计算<0){
返回搜索(键、arr、mid+1、hi);
}
否则{
中途返回;
}
}
}
这是我得到的错误:

线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:69903 位于BinarySearch.main(BinarySearch.java:19)

文件中的行数是否超过69903行,还是多了一行空行

if(search(key, words, 0, words.length) < 0) 
if(搜索(关键字,单词,0,单词.长度)<0)
试着用“i”代替“words.length”。否则,您将处理所有数组,包括最后一个单词后的null。
只有当您的文件正好包含69903行时,它才会起作用。

您的代码中有一个未显示的错误,可能您正在隐藏单词数组,但谁知道呢这使得我们很难提供帮助。你需要发布一个有效的帖子才能对此负责。好的,我会发布整个帖子。我没有要求整个帖子,而是(再次)发布一个有效的帖子。请在发布前阅读链接。文件是否包含69903行?如果不是,数组的末尾将有一些空值。或者你的意思是数组中只有空值?另外,你是否在所显示的两个代码片段之间使用了
scanner
?也许你已经把它的内部指针放在了文件的末尾。谢谢。我想出来了。结果只是我的文本文件中有5行空行。
if(search(key, words, 0, words.length) < 0)