Java 拉取子字符串会导致空指针
我被分配了一个项目,在这个项目中,我必须用java创建一个登录系统,使用filein将帐户写入一个数组,并通过确认输入用户名与数组中的用户名相同来使用该数组登录。我的用户名和密码在正在读取的.txt文件中位于同一行,因此我尝试将子字符串从字符串的开头拉到第一个空格,当用户输入处于以下位置时,结果是: 编辑:在尝试隔离时,我不知怎么地修复了它。重新添加内嵌和阵列时,会再次导致错误 编辑:我添加了一个accountCounter,这样当数组值不为null时,它只能循环多次。不幸的是,我仍然遇到了这个错误Java 拉取子字符串会导致空指针,java,string,substring,Java,String,Substring,我被分配了一个项目,在这个项目中,我必须用java创建一个登录系统,使用filein将帐户写入一个数组,并通过确认输入用户名与数组中的用户名相同来使用该数组登录。我的用户名和密码在正在读取的.txt文件中位于同一行,因此我尝试将子字符串从字符串的开头拉到第一个空格,当用户输入处于以下位置时,结果是: 编辑:在尝试隔离时,我不知怎么地修复了它。重新添加内嵌和阵列时,会再次导致错误 编辑:我添加了一个accountCounter,这样当数组值不为null时,它只能循环多次。不幸的是,我仍然遇到了这个
java.lang.NullPointerException
at zamp.main(zamp.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
在所有试图获取子字符串的情况下(打印它,将它委托给一个单独的字符串),都会导致这样的结果
这是我的密码
import java.io.*;
import java.util.Scanner;
//import java.net.*; //handles the network protocols
public class zamp {
public static void main(String[] args) throws IOException {
Scanner yiff = new Scanner(System.in);
BufferedReader infile = new BufferedReader (new FileReader("passwords.txt"));
String searchuser;
int f;
int i;
int accountnumber=0;
String modernPass="i";
String[] accounts = new String[5];
String searchpass;
String line = infile.readLine();
for(i=1; i<11; i++){
if (line!=null) {
accounts[i]=line;
System.out.println(""+accounts[i]);
line=infile.readLine();
accountnumber++;
}
}
System.out.println("Enter your username.");
searchuser=yiff.nextLine();
for (f=0; f<(accountnumber); f++) {
modernPass=(""+(accounts[f].substring(0, ((accounts[f].indexOf(" "))))));
if (searchuser.equals(modernPass)) {
System.out.println("Enter your password.");
searchpass=yiff.nextLine();
}
else {
}
}
}}
我确信解决方案非常简单
再次感谢您的帮助,真诚地感谢一位在3小时内就有最后期限的学生。您已经超出了您的范围 试着重写
for (f=0; f<=(accounts.length); f++)
for(f=0;f您将超出数组边界
试着重写
for (f=0; f<=(accounts.length); f++)
for(f=0;f您将超出数组边界
试着重写
for (f=0; f<=(accounts.length); f++)
for(f=0;f您将超出数组边界
试着重写
for (f=0; f<=(accounts.length); f++)
(f=0;f)的
堆栈跟踪显示您在子字符串中得到的索引超出范围,并且它显示其中一个参数为-1。forindexOf
表示
如果此字符串中没有出现此类字符,则返回-1
堆栈跟踪显示您在子字符串中得到的索引超出范围,并且它显示其中一个参数为-1。forindexOf
表示
如果此字符串中没有出现此类字符,则返回-1
堆栈跟踪显示您在子字符串中得到的索引超出范围,并且它显示其中一个参数为-1。forindexOf
表示
如果此字符串中没有出现此类字符,则返回-1
堆栈跟踪显示您在子字符串中得到的索引超出范围,并且它显示其中一个参数为-1。forindexOf
表示
如果此字符串中没有出现此类字符,则返回-1
(正在退出最近的编辑)
就快到了。唯一的问题是,当您从文件中填充数组时,您将从索引1开始插入。这将使索引0null
这会导致一个问题,因为当您处理数据时,您从索引0开始—一个保证的NullPointerException
从索引0开始读入数据,或者使用空检查(即,if(\uuuuuuuuuuuuuuuu!=null)
)来避免此问题
将来,查看和其他可调整大小的文件将使您的工作变得更加轻松。或者,如果您愿意读取两次文件,您可以始终读取一次以确定有多少项,创建一个具有该大小的数组,然后实际读取数据
此外,数据中的第一次for
循环读取可能作为而循环编写得更好:
while (inFile.hasNextLine()) {
// read in data
}
最后,我还建议学习使用调试器。它是一个非常有价值的工具,可以在程序运行时检查程序,了解它是如何执行的。(退出最近的编辑)
就快到了。唯一的问题是,当您从文件中填充数组时,您将从索引1开始插入。这将使索引0null
这会导致一个问题,因为当您处理数据时,您从索引0开始—一个保证的NullPointerException
从索引0开始读入数据,或者使用空检查(即,if(\uuuuuuuuuuuuuuuu!=null)
)来避免此问题
将来,查看和其他可调整大小的文件将使您的工作变得更加轻松。或者,如果您愿意读取两次文件,您可以始终读取一次以确定有多少项,创建一个具有该大小的数组,然后实际读取数据
此外,数据中的第一次for
循环读取可能作为而循环编写得更好:
while (inFile.hasNextLine()) {
// read in data
}
最后,我还建议学习使用调试器。它是一个非常有价值的工具,可以在程序运行时检查程序,了解它是如何执行的。(退出最近的编辑)
就快到了。唯一的问题是,当您从文件中填充数组时,您将从索引1开始插入。这将使索引0null
这会导致一个问题,因为当您处理数据时,您从索引0开始—一个保证的NullPointerException
从索引0开始读入数据,或者使用空检查(即,if(\uuuuuuuuuuuuuuuu!=null)
)来避免此问题
将来,查看和其他可调整大小的文件将使您的工作变得更加轻松。或者,如果您愿意读取两次文件,您可以始终读取一次以确定有多少项,创建一个具有该大小的数组,然后实际读取数据
此外,数据中的第一次for
循环读取可能作为而循环编写得更好:
while (inFile.hasNextLine()) {
// read in data
}
最后,我还建议学习使用调试器。它是一个非常有价值的工具,可以在程序运行时检查程序,了解它是如何执行的。(退出最近的编辑)
就快到了。唯一的问题是,当您从文件中填充数组时,您将从索引1开始插入。这将使索引0null
这导致了一个问题,因为