Java 在我使用for循环填充数组后,数组中出现了很多空值
您好,我正在构建一个Java程序,它接收一个名为wordlist的文件,该文件包含字典中的所有单词,每行一个,我通过扫描仪将其传入,以便稍后我可以使用算法进行搜索: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(
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)