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++;
}
}
}
}