java.lang.NullPointerException错误如何修复?
有空指针异常的问题,我读了几篇关于这个错误的文章,但仍然不知道问题出在哪里 错误发生在java.lang.NullPointerException错误如何修复?,java,Java,有空指针异常的问题,我读了几篇关于这个错误的文章,但仍然不知道问题出在哪里 错误发生在CompatibleActivity[topIndex]=新活动(aNum、bNum、c) 顺便说一下,topIndex=0 有人能突出我的问题吗 这是我的课 public class Schedulingtest { public static void main (String[] args) throws IOException { Scanner fileScan; fileS
CompatibleActivity[topIndex]=新活动(aNum、bNum、c)代码>
顺便说一下,topIndex=0
有人能突出我的问题吗
这是我的课
public class Schedulingtest {
public static void main (String[] args) throws IOException
{
Scanner fileScan;
fileScan=new Scanner(new File("data.txt"));
Schedule compatibility = new Schedule();
while(fileScan.hasNext())
{String url=fileScan.nextLine();
compatibility.addActivity(url);
}
}
public class Schedule{
import java.util.Scanner;
import java.util.Arrays;
public class Schedule {
Activity[] CompatibleActivity;
int totalTime=0,topIndex=0;
Scanner urlScan;
public Schedule(){
Activity[] CompatibleActivity=new Activity[30];
}
public int getTotalTime()
{return totalTime;
}
public void addActivity(String entry){
urlScan=new Scanner(entry);
urlScan.useDelimiter(" ");
String c=null;
int aNum = 0,bNum=0;
while(urlScan.hasNext())
{String a=urlScan.next();
String b=urlScan.next();
c=urlScan.next();
aNum=Integer.parseInt(a);
bNum=Integer.parseInt(b);
}
CompatibleActivity[topIndex]=new Activity(aNum,bNum,c);
topIndex++;
System.out.println("Activity added: start "+aNum+ " stop "+bNum+" "+c );
}
}
活动课
public class Activity {
private int start,stop,duration;
private String name;
public Activity(int Start,int Stop,String Name)
{
start=Start;
stop=Stop;
name=Name;
duration=Stop-Start;
}
public String getName()
{return name;
}
public int getStart()
{return start;
}
public int getStop()
{return stop;
}
public int getDuration()
{return duration;
}
public boolean compatible(int Start1,int Stop1,int toMatchsideStart,int toMatchsideStop)
{
int Start=Start1;
int Stop=Stop1;
int toMatchStart=toMatchsideStart;
int toMatchStop=toMatchsideStop;
if(toMatchStop<=Start)
{return true;
}
if(toMatchsideStart>=Stop)
{return true;
}
else
{return false;}
}
public String toString()
{return( name+"<"+start+","+stop+">"); }
}
公共课堂活动{
私有整数开始、停止、持续时间;
私有字符串名称;
公共活动(整数开始、整数停止、字符串名称)
{
开始=开始;
停止=停止;
名称=名称;
持续时间=停止-启动;
}
公共字符串getName()
{返回名称;
}
public int getStart()
{返回开始;
}
公共int getStop()
{返回站;
}
public int getDuration()
{返回持续时间;
}
公共布尔兼容(int-Start1、int-Stop1、int-toMatchsideStart、int-toMatchsideStop)
{
int Start=Start1;
int Stop=Stop1;
int-toMatchStart=toMatchsideStart;
int-toMatchStop=toMatchsideStop;
如果(toMatchStop=停止)
{返回true;
}
其他的
{返回false;}
}
公共字符串toString()
{return(name+“”);}
}
如果NullPointerException肯定位于该行,那么它只能由CompatibleActivity为null引起。您需要在代码中找到声明该数组对象的位置,并确保它也被实例化,例如
Activity[] CompatibleActivity = new Activity[size];
如果NullPointerException肯定在该行上,那么它只能由CompatibleActivity为null引起。您需要在代码中找到声明该数组对象的位置,并确保它也被实例化,例如
Activity[] CompatibleActivity = new Activity[size];
在访问数组的某个单元格之前,请检查是否已初始化该数组。你需要一个像这样的表达
CompatibilityActivity = new Activity[1]; // or any other positve number if size is bigger
在访问数组的某个单元格之前,请检查是否已初始化该数组。你需要一个像这样的表达
CompatibilityActivity = new Activity[1]; // or any other positve number if size is bigger
您很可能在类中声明了
CompatibleActivity
private Activity[] CompatibleActivity;
它声明了一个引用,并默认将其初始化为null
。您需要为其分配一个包含足够元素的真实数组(例如,在构造函数中):
您很可能在类中声明了
CompatibleActivity
private Activity[] CompatibleActivity;
它声明了一个引用,并默认将其初始化为null
。您需要为其分配一个包含足够元素的真实数组(例如,在构造函数中):
您在何处声明
CompatibleActivity
以及在何处初始化此数组(使其不为null)?请发布引发的异常的完整堆栈跟踪。您显示的是不感兴趣的代码,而不是唯一重要的代码:声明和初始化CompatibleActivity
。很可能您没有正确初始化它。您在哪里声明CompatibleActivity
,在哪里初始化此数组(使其不为null)?请发布引发的异常的完整堆栈跟踪。您显示的是不感兴趣的代码,而不是唯一重要的代码:声明和初始化CompatibleActivity
。很可能是您没有正确初始化它。代码的另一个问题是您过早地终止了而块,因此只有在扫描完最后一个元素后才能填写兼容活动,不是针对每个扫描的活动。它是真的,我在类的构造函数中添加了兼容性,我更改并将行代码添加到最外层的Schedule全局类中,它就可以工作了。我不明白为什么?你的代码有一个问题就是格式不好。如果您对所有的块都进行了相应的格式化,您就会明白为什么会这样做(除非您不熟悉Java语言。在这种情况下,我建议您好好阅读一下这个主题。请参阅以获取参考)。好的。我会读的。Thx很多。代码的另一个问题是,您过早地终止了而块,因此只有在扫描完最后一个元素后才能填写兼容活动,不是针对每个扫描的活动。它是真的,我在类的构造函数中添加了兼容性,我更改并将行代码添加到最外层的Schedule全局类中,它就可以工作了。我不明白为什么?你的代码有一个问题就是格式不好。如果您对所有的块都进行了相应的格式化,您就会明白为什么会这样做(除非您不熟悉Java语言。在这种情况下,我建议您好好阅读一下这个主题。请参阅以获取参考)。好的。我会读的。Thx很多。我确实用30个空数组槽进行了初始化,所以我读取的文件中的项目将被输入到该槽中。然后,请在使用该数组时仔细检查该数组是否确实已初始化。只需在引起问题的行前面添加一个System.out.println(CompatibilityActivity.length)
。(我猜,NPE然后移动到新行)我确实用30个空数组槽进行了初始化,所以我读取的文件中的项目将被输入到该槽中。然后,请在使用它时仔细检查数组是否真的初始化了。只需在引起问题的行前面添加一个System.out.println(CompatibilityActivity.length)
。(我猜,NPE随后会转移到新的生产线)