为什么编译不通过?谢谢帮助!
import java.lang.System;
import java.lang.Math;
@SuppressWarnings("unused")
public class Visitor//顾客类和主函数
{
public static void main(String[] args){
final int GOODNUM=20;//设置商品数量为20个
Goods[] goods=new Goods[GOODNUM];
String firstName="a";
String goodName;
float goodPrice;
int colorNum;
int sizeNum;
for(int i=0;i[i].getGoodName(firstName+i);
goodPrice=goods[i].getGoodPrice((float)(1000*Math.random()));
colorNum=goods[i].getGoodColorNum((int) ((int) goods[i].colors.length*Math.random()));
sizeNum=goods[i].getGoodSizeNum((int)((int)goods[i].sizes.length*Math.random()));
goods[i]=new Goods(goodName,goodPrice,colorNum,sizeNum);//商品构造器
}
for(int i=0;iSystem.out.println("商品名称: "+goods[i].getGoodName(firstName+i)+" 商品价格: "+goods[i].getGoodPrice((float)(1000*Math.random()))+" 商品颜色: "+goods[i].getGoodColorNum((int) ((int) goods[i].colors.length*Math.random()))+" 商品尺寸: "+goods[i].getGoodSizeNum((int)((int)goods[i].sizes.length*Math.random())));
}
}
private String visitorName;//顾客姓名
private int visitorAge;//顾客年龄
private float visitorHeight;//顾客身高
private float visitorWeight;//顾客体重
private int visitorPay;//顾客给的钱
public void visitorEnter(String name){
System.out.println("Hello! "+visitorName+" Would you buy something?" );
}
public void visitorExit(String name){
System.out.println("Thanks for your coming!");
}
public Visitor(String name,int age,float height,float weight)
{
if(name!=null&&age>0&&age<100&&height>0&&height<220&&weight>0&&weight<150){
visitorName=name;
visitorAge=age;
visitorHeight=height;
visitorWeight=weight;
}
else{
visitorName="Unknown";
visitorAge=-1;
visitorHeight=-1;
visitorWeight=-1;
}
}
}
@SuppressWarnings("unused")
class Goods//商品类
{
private String goodName;//商品名称
private float goodPrice;//商品价格
private String goodColor;//商品颜色
private int colorNum;//颜色序列
private String goodSize;//商品尺码
private int sizeNum;//尺码序列
final String colors[]={"Red","Orange","Yellow","Green","Cyan","Blue","PurPle","White","Black","Gray"};//商品颜色池
final String sizes[]={"S","M","L","XL","XXL","XXXL"};//商品尺码池
public Goods(String name,float price,int acolorNum,int asizeNum){
goodName=name;
goodPrice=price;
if(acolorNum=0){
goodColor=colors[acolorNum];
}
else System.out.println("There is no such color for this good!");
if(asizeNum=0){
goodSize=sizes[asizeNum];
}
else System.out.println("There is no such size for this good!");
}
public String getGoodName(String name){
return name;
}
public float getGoodPrice(float price){
return price;
}
public int getGoodColorNum(int colornum){
return colornum;
}
public int getGoodSizeNum(int sizenum){
return sizenum;
}
}
Windows PowerShell
尝试新的跨平台 PowerShell https://aka.ms/pscore6
oject\Library\bin' 'Visitor'
Exception in thread "main" java.lang.NullPointerException: Cannot assign field "goodName" because "goods[i]" is null oject\Library\bin
at Visitor.main(Visitor.java:13)
PS E:\Code\Java\Project\Library> e:; cd 'e:\Code\Java\Project\Library'; & 'C:\Program Files\Java\jdk-17.0.4\bin\java.exe' '-XX:+ShowCodeDetailsInExceptionMessages' '-cp' 'E:\Code\Java\Project\Library\bin' 'Visitor'
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Goods.getGoodName(String)" because "goods[i]" is null ceptionMessages'
at Visitor.main(Visitor.java:17)
PS E:\Code\Java\Project\Library> e:; cd 'e:\Code\Java\Project\Library'; & 'C:\Program Files\Java\jdk-17.0.4\bin\java.exe' '-XX:+ShowCodeDetailsInExceptionMessages' '-cp' 'E:\Code\Java\Project\Library\bin' 'Visitor'
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Goods.getGoodName(String)" because "goods[i]" is null
at Visitor.main(Visitor.java:17)
PS E:\Code\Java\Project\Library> e:; cd 'e:\Code\Java\Project\Library'; & 'C:\Program Files\Java\jdk-17.0.4\bin\java.exe' '-XX:+ShowCodeDetailsInExceptionMessages' '-cp' 'E:\Code\Java\Project\Library\bin' 'Visitor'
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Goods.getGoodName(String)" because "goods[i]" is null
at Visitor.main(Visitor.java:17)
PS E:\Code\Java\Project\Library>
Goods[] goods=new Goods[GOODNUM];
这个地方有问题,goods 一直null,没有内容,所以循坏 报错了,
出现问题,可以进行debug 进行查看代码问题。
应该是因为创建了Goods数组后,然后没有给每个Goods数组元素用一个Goods对象赋值,就直接调用这个Goods元素而导致了空指针异常导致,修改如下:
import java.lang.System;
import java.util.Arrays;
import java.util.Random;
import java.lang.Math;
@SuppressWarnings("unused")
public class Visitor//顾客类和主函数
{
public static void main(String[] args){
final int GOODNUM=20;//设置商品数量为20个
Goods[] goods=new Goods[GOODNUM];
Goods g = new Goods();
Random rand = new Random();
String firstName="a";
String goodName;
float goodPrice;
int colorNum;
int sizeNum;
for(int i=0;i<GOODNUM;i++){
goodName=firstName+i;
goodPrice=(float)(1000*Math.random());
colorNum=rand.nextInt(g.colors.length);
sizeNum= rand.nextInt(g.sizes.length);
goods[i]=new Goods(goodName,goodPrice,colorNum,sizeNum);//商品构造器
}
for(int i=0;i<GOODNUM;i++){
System.out.println(goods[i]);
}
}
private String visitorName;//顾客姓名
private int visitorAge;//顾客年龄
private float visitorHeight;//顾客身高
private float visitorWeight;//顾客体重
private int visitorPay;//顾客给的钱
public void visitorEnter(String name){
System.out.println("Hello! "+visitorName+" Would you buy something?" );
}
public void visitorExit(String name){
System.out.println("Thanks for your coming!");
}
public Visitor(String name,int age,float height,float weight)
{
if(name!=null&&age>0&&age<100&&height>0&&height<220&&weight>0&&weight<150){
visitorName=name;
visitorAge=age;
visitorHeight=height;
visitorWeight=weight;
}
else{
visitorName="Unknown";
visitorAge=-1;
visitorHeight=-1;
visitorWeight=-1;
}
}
}
@SuppressWarnings("unused")
class Goods//商品类
{
private String goodName;//商品名称
private float goodPrice;//商品价格
private String goodColor;//商品颜色
private int colorNum;//颜色序列
private String goodSize;//商品尺码
private int sizeNum;//尺码序列
final String colors[]={"Red","Orange","Yellow","Green","Cyan","Blue","PurPle","White","Black","Gray"};//商品颜色池
final String sizes[]={"S","M","L","XL","XXL","XXXL"};//商品尺码池
public Goods(String name,float price,int acolorNum,int asizeNum){
goodName=name;
goodPrice=price;
if(acolorNum<colors.length&&acolorNum>=0){
goodColor=colors[acolorNum];
}
else System.out.println("There is no such color for this good!");
if(asizeNum<sizes.length&&acolorNum>=0){
goodSize=sizes[asizeNum];
}
else System.out.println("There is no such size for this good!");
}
public Goods() {
}
public String getGoodName(String name){
return name;
}
public float getGoodPrice(float price){
return price;
}
public int getGoodColorNum(int colornum){
return colornum;
}
public int getGoodSizeNum(int sizenum){
return sizenum;
}
@Override
public String toString() {
return "Goods [商品名称:" + goodName + ", 商品价格:" + goodPrice + ", 商品颜色:" + goodColor + ", 商品尺寸:" + goodSize +"]";
}
}