当前位置: 首页 > 知识库问答 >
问题:

接受

唐永春
2023-03-14

我正试图编写一个程序来搜索二维数组中数字的索引。在运行代码时,我不断遇到以下异常:

线程“main”java中出现异常。lang.NullPointerException:无法存储到int数组,因为“local4/[local5]”为null

代码为:

import java.util.*;

public class indexSearch
{
    public static void main(String[] args) 
    {

        Scanner xyz=new Scanner(System.in);

        int no1,no2;
        System.out.println("Enter the first dimension of 2D array");
        no1=xyz.nextInt();
        int nos[][]=new int[no1][];

        for(int i =0;i<nos.length ;i++)
        {
            System.out.println("Enter the second dimension corresponding to first index "+i);
            int k=xyz.nextInt();
            System.out.println("Enter the values into it now");
            for(int j=0;j<k;j--)
            {
                nos[i][k]=xyz.nextInt();
            }
        }
    
        int posi1=-1;int posi2=-1;
        System.out.println("Enter the no you want to search");
        int l=xyz.nextInt();
        for(int i=0;i<nos.length;i++)
        {
            for(int j = 0; j < nos[i].length;j++)
            {
                if(nos[i][j]==l)
                {
                    i=posi1;
                    j=posi2;
                }   
            }
        }
        if(posi1!=-1&&posi2!=-1)
        {
            System.out.println("The index was"+posi1+" "+posi2);
        }
        else
        {
            System.out.println("The no doesnt exist");
        }
    }    
}   
    

我最近才开始学习数组,2D数组中数字的索引搜索的所有解决方案都是矩形的,这让我认为,对于2D非矩形数组,没有办法从用户输入值,其大小也要从用户那里获取。

共有3个答案

施洛城
2023-03-14

您的代码中有几个错误。首先,在此代码块中为nos[i]赋值并更改nos[i][k]=xyz.nextInt();nos[i][j]=xyz.nextInt();

for(int i =0;i<nos.length ;i++)
{
            System.out.println("Enter the second dimension corresponding to first index "+i);
            int k=xyz.nextInt();
            nos[i] = new int[k];
            System.out.println("Enter the values into it now");
            for(int j=0;j<k;j++)
            {
                nos[i][j]=xyz.nextInt();
            }
            //....

其次,在此处将j--更改为j

 System.out.println("Enter the values into it now");
            for(int j=0;j<k;j++)
            {
                nos[i][j]=xyz.nextInt();
            }

第三,改变这一点:

i=posi1;
j=posi2;

对此:

posi1=i;
posi2=j;

完整工作代码:

import java.util.*;

public class indexSearch
{
    public static void main(String[] args)
    {

        Scanner xyz=new Scanner(System.in);

        int no1,no2;
        System.out.println("Enter the first dimension of 2D array");
        no1=xyz.nextInt();
        int nos[][]=new int[no1][];

        for(int i =0;i<nos.length ;i++)
        {
            System.out.println("Enter the second dimension corresponding to first index "+i);
            int k=xyz.nextInt();
            nos[i] = new int[k];
            System.out.println("Enter the values into it now");
            for(int j=0;j<k;j++)
            {
                nos[i][j]=xyz.nextInt();
            }
        }

        int posi1=-1;int posi2=-1;
        System.out.println("Enter the no you want to search");
        int l=xyz.nextInt();
        for(int i=0;i<nos.length;i++)
        {
            for(int j = 0; j < nos[i].length;j++)
            {
                if(nos[i][j]==l)
                {
                    posi1=i;
                    posi2=j;
                }
            }
        }
        if(posi1!=-1&&posi2!=-1)
        {
            System.out.println("The index was"+posi1+" "+posi2);
        }
        else
        {
            System.out.println("The no doesnt exist");
        }
    }
}

与此问题无关,但请尝试为变量提供有意义的名称并修复代码的缩进,以便其他开发人员更容易理解您的代码并帮助您。

快乐的编码。

赵鸿畴
2023-03-14

当前nos[i]在尝试插入值时为null,在获取值之前,将其初始化为nos[i]=new int[k];

与您的bug无关,我建议为变量提供更多描述性名称,例如扫描器,而不是xyz,因为这使其他开发人员更容易理解您的代码

井誉
2023-03-14

代码中存在几个问题。

  1. nos[i]为空。因此,您可以将其初始化为nos[i]=new int[k];当你得到k的值时
  2. 在for循环中有j,j从0开始。必须是j
  3. 您正在插入导致ArrayIndexOutOfBounds异常的nos[i][k]。应为编号[i][j]=xyz。nextInt()

下面给出了固定算法。

import java.util.*;

public class indexSearch
{
    public static void main(String[] args) 
    {

        Scanner xyz=new Scanner(System.in);

        int no1,no2;
        System.out.println("Enter the first dimension of 2D array");
        no1=xyz.nextInt();
        int nos[][]=new int[no1][];

        for(int i =0;i<nos.length ;i++)
        {
            System.out.println("Enter the second dimension corresponding to first index "+i);
            int k=xyz.nextInt();
            nos[i] = new int[k];
            System.out.println("Enter the values into it now");
            for(int j=0;j<k;j++)
            {
                nos[i][j]=xyz.nextInt();
            }
        }
    
        int posi1=-1;int posi2=-1;
        System.out.println("Enter the no you want to search");
        int l=xyz.nextInt();
        for(int i=0;i<nos.length;i++)
        {
            for(int j = 0; j < nos[i].length;j++)
            {
                if(nos[i][j]==l)
                {
                    i=posi1;
                    j=posi2;
                }   
            }
        }
        if(posi1!=-1&&posi2!=-1)
        {
            System.out.println("The index was"+posi1+" "+posi2);
        }
        else
        {
            System.out.println("The no doesnt exist");
        }
    }    
}
 类似资料:
  • 我正在尝试基于非阻塞NIO消息开发自己的通信库。我已经阅读了1000篇关于它的教程和书中的章节,我认为最后我有了一些可以在几乎没有同时连接的情况下工作的东西。但是当我在服务器端有很多连接共存时,我遇到了一些问题。 我有4个私有方法的典型选择器实现:accept、finishConnect、read和write。我的问题在于前两个:接受和完成连接。 当客户端打开一个新的套接字,并且一个可接受的键唤醒

  • 我在运行使用Netty的服务时遇到了问题。它启动和工作正常,但只有一次。在此之后,不接受任何连接(它们将立即被删除)。 当我第一次使用(示例端口,随便什么)连接到服务器时,一切正常: 客户端会话: 服务器日志: --编辑2-- 只要连接处于活动状态,服务器就可以正常工作--在关闭连接之前,我可以轻松地交换请求/响应。 不要被IP地址迷惑,这是一个转发到Docker的本地端口,应用程序就是在那里启动

  • 问题内容: 我正在使用JBoss AS 7,并尝试使用IP(从Intranet中的计算机)连接到我的应用程序。它不起作用。如果我从具有服务器的计算机上进行测试,则可以通过localhost(http:// localhost:8080 / MySystem ....)看到系统正在运行,但是如果我尝试使用IP(http://: 8080 / MySystem ....)。 有什么帮助吗? 问题答案:

  • 这是我的蓝图代码。 内部消息工作。 外部消息不工作。 我在docker中运行Red Hat AMQ 7和Fuse 7。内部消息队列在服务之间正常工作。 使用AMQ 6,当在activemq中设置时,我能够向61613上的嵌入式代理发送和接收STOMP消息。xml 现在,我正在使用AMQ 7.0的默认设置,它将接受程序设置为0.0.0.0:61616和61613,这两个接受STOMP协议。 但是相同

  • 众所周知,SO_REUSEPORT允许多个套接字侦听相同的IP地址和端口组合,它将每秒的请求增加2-3倍,并减少延迟(~30%)和延迟的标准偏差(8倍):https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/ NGINX release 1.9.1引入了一个新特性,支持使用SO_REUSEPORT套接字选项,该选项在许多操作系

  • 背景介绍 兑吧积分商城是第三方开放平台,兑吧积分商城和开发者服务端的数据交互,需要相应的接口进行数据传输,所以使用兑吧积分商城,需要开发者对接兑吧的相关接口。 接口说明 兑吧积分商城为了丰富用户体验,在开放的接口中是有必选接口和可选接口的区分 一. 必选接口 1.免登录接口 2.扣积分接口 3.兑换结果通知接口 二. 扩展功能和接口 1. 游客用户唤醒登录 2. 自有虚拟商品充值 接口说明 充值接