gpt4 book ai didi

java - java中的字符串搜索(获取java.lang.nullpointerException)

转载 作者:行者123 更新时间:2023-12-01 07:11:48 25 4
gpt4 key购买 nike

我编写了一个简单的程序,其中有一个包含名称的字符串数组。

该程序在字符串数组中搜索用户给出的名称。如果存在,则显示找到名称,否则未找到

当我给出名称时,即已经存在于字符串中,则程序运行正常,但是当我给出名称时,即不存在于字符串中,它会显示错误。

import java.util.Scanner;

class Work {

Scanner in = new Scanner(System.in);

String e_name;
String name[]=new String [50];

void getname()
{
System.out.println("enter the name");
e_name=in.nextLine();
}

int search()
{
System.out.println("name to be searched"+" "+e_name);
for(int i=0;i<name.length;i++){
if(name[i].equals(e_name))
return i;
}
return -1;
}
}

public class Array {

public static void main(String args[])
{
Work ob1=new Work();
int search_res;
ob1.name[0]="aditya";
ob1.name[1]="ankit";

ob1.getname();

search_res=ob1.search();
System.out.println(search_res);

if(search_res!=-1)
{
System.out.println("name found");
}
else if (search_res==-1)
{
System.out.println("name not found");
}
}
}

错误

   enter the name
manoj
Exception in thread "main" java.lang.NullPointerException
at Work.search(Array.java:24)
at Array.main(Array.java:56)
name to be searched manoj

最佳答案

您正在迭代 name 中的每个值大批。该数组如下所示:

{ "aditya", "ankit", null, null, null, ... }

所以对于前两次迭代,它会很好 - 但之后,当 i 为 2 时,这一行:

name[i].equals(e_name)

将调用equalsnull ,因此异常(exception)。

抛开有关封装、良好设计等的任何问题,解决此特定问题的最干净方法是使用 List<String> :

List<String> names = new ArrayList<String>();

然后这些行:

ob1.name[0]="aditya";
ob1.name[1]="ankit";

会变成:

ob1.names.add("aditya");
ob1.names.add("ankit");

你的循环将变成:

for (int i = 0; i < names.size(); i++) {
if (names.get(i).equals(e_name)) {
return i;
}
}

或者,您可以坚持使用数组,并且只需反转相等性检查:

if(e_name.equals(name[i]))

鉴于e_name永远不会为空(按照你运行它的方式),这永远不会抛出异常。不过,拥有硬编码的名称数量仍然很奇怪 - a List<String>将是一个更好的解决方案。

关于java - java中的字符串搜索(获取java.lang.nullpointerException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com