Java 编译时未检查或不安全的操作,尝试运行时异常

Java 编译时未检查或不安全的操作,尝试运行时异常,java,arrays,class,methods,arraylist,Java,Arrays,Class,Methods,Arraylist,当我试图编译代码时,会出现以下错误: Note: GoFishEdited.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 当我尝试运行它时,出现以下错误消息: Exception in thread "main" java.lang.NullPointerException at Habitat.stockUp(Habitat.java:20) at Go

当我试图编译代码时,会出现以下错误:

Note: GoFishEdited.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
当我尝试运行它时,出现以下错误消息:

Exception in thread "main" java.lang.NullPointerException
at Habitat.stockUp(Habitat.java:20)
at GoFishEdited.main(GoFishEdited.java:14)
我很确定错误在Stockup方法中,但我不明白它会有什么问题

这是我的密码:

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

  System.out.println("\nProject 1, Stage 3\n");

  int[] fishArray;
  ArrayList<Fish> catchF = new ArrayList<Fish>();

  Habitat h1 = new Habitat();
  Habitat h2 = new Habitat();

  fishArray = h1.stockUp();     

  System.out.println("Start with some weights:");  
  for (int i : fishArray) {
     System.out.print(i + " ");
  }

  System.out.println("\n\nMake fish of those weights.\n");

  Fish[] fishGroup = new Fish[fishArray.length]; // array of Fish

  for (int i=0; i < fishArray.length; i++) {
     fishGroup[i] = new Fish(fishArray[i]);  // make fish 
  }

  System.out.println("Fish are made.  Now put them in a habitat:\n");

  for (Fish f : fishGroup) { 
     h1.addFish(f);
  }

  System.out.println("\nAll in. The habitat displays them:\n");
  h1.printFish();

  System.out.println("\nMove some fish to the second habitat.\n");
  for(Fish f : fishGroup){
     h2.addFish(f);
  }

  System.out.println("\nPrint both habitats:\n");
  h1.printFish();
  h2.printFish();

  System.out.println("\nCatch some fish.\n");
  for(Fish f : fishGroup){
     catchF = h1.catchFish(f);
  }

}
}
public类{
公共静态void main(字符串[]args){
System.out.println(“\n项目1,阶段3\n”);
int[]fishArray;
ArrayList catchF=新的ArrayList();
栖息地h1=新栖息地();
栖息地h2=新栖息地();
fishArray=h1.stockUp();
System.out.println(“从一些权重开始:”);
for(int i:fishArray){
系统输出打印(i+“”);
}
System.out.println(“\n\n根据这些重量制作鱼。\n”);
Fish[]fishGroup=新鱼[fishArray.length];//鱼的数组
对于(int i=0;i
以及:

公共类栖息地{
ArrayList stringer=新的ArrayList();
int[]fishArr;
公共整数最大计数=25;
公共整数minCount=9;
公共整数最大权重=10;
公共整数最小权重=1;
公共整数捕获概率=30;//0.3
public ArrayList catch=new ArrayList();
公共int[]库存(){
int numofF=minCount+(int)(Math.random()*((maxCount-minCount)+1));
for(int i=0;i=cols){
System.out.println(“”);
currentCol=0;
}
否则{
currentCol++;
}
}
}
}

我希望你能给我一个解释,因为我完全糊涂了,我只是想看看它是否能正常工作

问题是您从未在
Habitat
中初始化
fishArr


未检查的操作警告可能来自
公共阵列列表捕鱼(Fish f){
,您应该参数化您的返回类型

您似乎没有初始化
栖息地。fishArr
。不
int[]fishArr;
初始化它?不,这只是定义变量并将其设置为null,也许您可以在中阅读更多内容,不要忘了给我的答案打分:)另外,我个人建议使用List/ArrayList,因为您不必使用它的大小。我如何参数化?
返回fishArr;
我将fishArr改为ArrayList
数组List fishArr=new ArrayList();
但这不是fishArr的参数吗?将
公共ArrayList catchFish(Fish f){
更改为
公共ArrayList catchFish(Fish f){
public class Habitat {

ArrayList<Fish> stringer = new ArrayList<Fish>();
int[] fishArr;
public int maxCount=25; 
public int minCount=9; 
public int maxWeight=10; 
public int minWeight=1; 
public int catchProbability=30; //0.3 
public ArrayList<Fish> catches = new ArrayList<Fish>();

public int[] stockUp(){

  int numofF = minCount + (int)(Math.random() * ((maxCount - minCount) + 1));

  for(int i = 0; i<numofF; i++){
     fishArr[i] = minWeight + (int)(Math.random() * ((maxWeight - minWeight) + 1));


  }

  return fishArr;
}


public Habitat(){

  int[] hab;

}

public void addFish(Fish f) {
  stringer.add(f);
}

 public void removeFish(Fish f){
   stringer.remove(f);
 }

 public void printFish(){
     System.out.println(stringer);
  }

 public ArrayList catchFish(Fish f){

  int caught = 0 + (int)(Math.random() * ((100 - 0) + 1));

  if(caught < catchProbability){

     catches.add(f);
     stringer.remove(f);

  }

  return catches;

}

public void printGrid(int[][] twoD){
  int i, j;        

  for ( i = 0 ; i < twoD.length ; i++ ){
     for ( j = 0 ; j < twoD[i].length ; j++ ){
        System.out.print( twoD[i][j] + "   " );
     }
     System.out.println();
  }
}

public void toGrid(String[] oneD){
  int cols = (int) Math.floor(Math.sqrt(oneD.length));
  int currentCol = 0;
  for(String element : oneD) {
    System.out.print(element + "\t");
    if(currentCol >= cols) {
        System.out.println("");
        currentCol = 0;
    }
    else {
        currentCol++;
    }
  }
}
}