Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Substring - Fatal编程技术网

Java 拉取子字符串会导致空指针

Java 拉取子字符串会导致空指针,java,string,substring,Java,String,Substring,我被分配了一个项目,在这个项目中,我必须用java创建一个登录系统,使用filein将帐户写入一个数组,并通过确认输入用户名与数组中的用户名相同来使用该数组登录。我的用户名和密码在正在读取的.txt文件中位于同一行,因此我尝试将子字符串从字符串的开头拉到第一个空格,当用户输入处于以下位置时,结果是: 编辑:在尝试隔离时,我不知怎么地修复了它。重新添加内嵌和阵列时,会再次导致错误 编辑:我添加了一个accountCounter,这样当数组值不为null时,它只能循环多次。不幸的是,我仍然遇到了这个

我被分配了一个项目,在这个项目中,我必须用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。for
indexOf
表示

如果此字符串中没有出现此类字符,则返回-1

堆栈跟踪显示您在
子字符串中得到的
索引超出范围,并且它显示其中一个参数为-1。for
indexOf
表示

如果此字符串中没有出现此类字符,则返回-1

堆栈跟踪显示您在
子字符串中得到的
索引超出范围,并且它显示其中一个参数为-1。for
indexOf
表示

如果此字符串中没有出现此类字符,则返回-1

堆栈跟踪显示您在
子字符串中得到的
索引超出范围,并且它显示其中一个参数为-1。for
indexOf
表示

如果此字符串中没有出现此类字符,则返回-1

(正在退出最近的编辑)

就快到了。唯一的问题是,当您从文件中填充数组时,您将从索引1开始插入。这将使索引0
null

这会导致一个问题,因为当您处理数据时,您从索引0开始—一个保证的
NullPointerException

从索引0开始读入数据,或者使用空检查(即,
if(\uuuuuuuuuuuuuuuu!=null)
)来避免此问题


将来,查看和其他可调整大小的文件将使您的工作变得更加轻松。或者,如果您愿意读取两次文件,您可以始终读取一次以确定有多少项,创建一个具有该大小的数组,然后实际读取数据

此外,数据中的第一次
for
循环读取可能作为
循环编写得更好:

while (inFile.hasNextLine()) {
    // read in data
}
最后,我还建议学习使用调试器。它是一个非常有价值的工具,可以在程序运行时检查程序,了解它是如何执行的。

(退出最近的编辑)

就快到了。唯一的问题是,当您从文件中填充数组时,您将从索引1开始插入。这将使索引0
null

这会导致一个问题,因为当您处理数据时,您从索引0开始—一个保证的
NullPointerException

从索引0开始读入数据,或者使用空检查(即,
if(\uuuuuuuuuuuuuuuu!=null)
)来避免此问题


将来,查看和其他可调整大小的文件将使您的工作变得更加轻松。或者,如果您愿意读取两次文件,您可以始终读取一次以确定有多少项,创建一个具有该大小的数组,然后实际读取数据

此外,数据中的第一次
for
循环读取可能作为
循环编写得更好:

while (inFile.hasNextLine()) {
    // read in data
}
最后,我还建议学习使用调试器。它是一个非常有价值的工具,可以在程序运行时检查程序,了解它是如何执行的。

(退出最近的编辑)

就快到了。唯一的问题是,当您从文件中填充数组时,您将从索引1开始插入。这将使索引0
null

这会导致一个问题,因为当您处理数据时,您从索引0开始—一个保证的
NullPointerException

从索引0开始读入数据,或者使用空检查(即,
if(\uuuuuuuuuuuuuuuu!=null)
)来避免此问题


将来,查看和其他可调整大小的文件将使您的工作变得更加轻松。或者,如果您愿意读取两次文件,您可以始终读取一次以确定有多少项,创建一个具有该大小的数组,然后实际读取数据

此外,数据中的第一次
for
循环读取可能作为
循环编写得更好:

while (inFile.hasNextLine()) {
    // read in data
}
最后,我还建议学习使用调试器。它是一个非常有价值的工具,可以在程序运行时检查程序,了解它是如何执行的。

(退出最近的编辑)

就快到了。唯一的问题是,当您从文件中填充数组时,您将从索引1开始插入。这将使索引0
null

这导致了一个问题,因为