问答详情
源自:12-1 综合练习

大家帮忙看看,为什么变量light赋值失败,输出结果为null?

//这是父类货车的代码
public class Truck {
 
 static Float cargoCa;     //创建货车的载货量
 
 static int capacity=4;    //创建货车的载客量
 
 static int rent;     //创建货车的日租金
 
 int smallType;     //用来接收局部变量smalltype的值
 
 Scanner input=new Scanner(System.in);
 
 void getType() {
 
  System.out.println("请输入您要选择的货车类型:");
 
     System.out.println("1、轻型货车(可核载5吨)          2、重型货车(可核载20吨)");
 
     int smalltype=input.nextInt();
 
     smallType=smalltype;
 
     while(smalltype*0==0) {
 
       if(smalltype==1) {   //这部分重型货车的继承代码没有贴上
 
        Heavy heavy=new Heavy();
 
        heavy.getBrand();
 
        break;
 
       }else if(smalltype==2) {
 
        Light light=new Light();
 
        light.getBrand();
 
        break;
 
       }else {
 
        System.out.println("您的输入有误!请输入您要选择的货车类型:");
 
        System.out.println("1、轻型货车(可核载5吨)          2、重型货车(可核载20吨)");
 
        smalltype=input.nextInt();
 
       }
 
     }
 
 }
  
//show()方法调用两个轻货和重货子类的showFinal()方法展示租车清单
 void show() {     
 
  if(smallType==1) {
 
      Light light=new Light();
 
      light.showFinal();
 
  }else if(smallType==2) {
 
   Heavy heavy=new Heavy();
 
   heavy.showFinal();
 
  }
 
 }
 
}
 
   
 
  //这是子类Light继承父类Truck的代码
 
  public class Light extends Truck {
 
 static String name="轻型货车";
  
 //【注意,创建light字符串,用来接收局部变量中的品牌名称】
 static String light;
 
 Scanner input=new Scanner(System.in);
 
 void getBrand() {
 
  String light1="日产";
 
  String light2="雪铁龙";
 
  String light3="标致";
 
  Light.cargoCa=5f;
 
  System.out.println("请输入您要选择的轻型货车品牌:");
 
     System.out.println("1、"+light1+"(1200元/天)          "+"2、"+light2+"(1500元/天)          "+"3、"+light3+"(1800元/天)");
 
     int lBrand=input.nextInt();
 
     while(lBrand*0==0) {
 
      if(lBrand==1) {
 
       Light.rent=1200;
 
       light=light1;
 
       break;
 
      }else if(lBrand==2) {
 
       Sedan.rent=1500;
 
       light=light2;
 
       break;
 
      }else if(lBrand==3) {
 
       Sedan.rent=1800;
 
       light=light3;
 
       break;
 
      }else {
 
       System.out.println("您的输入有误!请输入您要选择的轻型货车品牌:");
 
       System.out.println(light1+"(1200元/天)          "+light2+"(1500元/天)          "+light3+"(1800元/天)");
 
       lBrand=input.nextInt();
 
      }
 
     }
 
 }
  
//子类Light用来展示租车清单的showFinal()方法
 void showFinal() {
 
  System.out.println("请输入您要租车的数量:");
 
     int amt=input.nextInt();
 
  System.out.println("请输入您要租车的天数:");
 
     int days=input.nextInt();
 
     int price=Light.rent*amt*days;
      
     //【注意,就是这里的变量light,在InitialCRS类里面的最后输出结果为null】
     System.out.println("车型:"+light+name);
 
     System.out.println("总载人量:"+Truck.capacity*amt+"          总载货量:"+Light.cargoCa*amt+"吨");
 
     System.out.println("总计:"+price+"元");
 
 }
 
}
 
 
 
 //这是执行类InitialCRS的代码        
 public class InitialCRS {
 
 public static void main(String[] args) {
 
  // TODO Auto-generated method stub
 
  Scanner input=new Scanner(System.in);
 
  System.out.println("请问您是否要租车?");
 
  System.out.println("1、是          2、否");
 
  int confirm=input.nextInt();
 
  while(confirm*0==0) {
 
      if(confirm==2) {
 
       System.out.println("答答租车系统已退出,感谢您的使用!");
 
       break;
 
      }else if(confirm==1) {
 
    System.out.println("请选择您要租赁的车辆类型:");
 
       System.out.println("1、汽车          2、货车          3、皮卡");
 
       int type=input.nextInt();
 
       while(type*0==0) {
 
            if(type==1) {   //Car父类部分的代码没有贴出
 
            Car car=new Car();
 
            car.getType();
 
            car.show();
 
            break;
 
            }else if(type==2) {   //本次问题中的Truck类的方法调用
 
       Truck truck=new Truck();
 
       truck.getType();
 
       truck.show();
 
       break;
 
             }else if(type==3) {   //pickup部分的代码没有贴出
 
        Pickup pickup=new Pickup();
 
        pickup.getBrand();
 
        pickup.show();
 
        break;
 
              }else {
 
            System.out.println("您的输入有误!请选择您要租赁的车辆类型:");
 
            System.out.println("1、汽车          2、货车          3、皮卡");
 
            type=input.nextInt();
 
            }
 
       }
 
       break;
 
      }else {
 
       System.out.println("您的输入有误!请问您是否要租车?");
 
       System.out.println("1、是          2、否");
 
       confirm=input.nextInt();
 
       }
 
     }
 
  input.close();
 
 }
 
}
//在这里多说一句,我在其它子类里边,以一模一样的方式创建了类似于light的用来接收品牌的字符串,其最后的输出结果都是正常的,只有这个字符串light不知道怎么回事输出结果竟然是null

 

提问者:qq_宫湦_03802224 2017-12-29 10:38

个回答

  • soory_昵称已占用
    2018-01-08 20:10:40

    好恐怖  那么长的一串代码

  • Yellow_dada
    2017-12-29 14:52:51

    。。。

  • qq_宫湦_03802224
    2017-12-29 12:07:26

    找到问题了,是Truck类中的Heavy与Light实例化的位置调换了。

  • qq_宫湦_03802224
    2017-12-29 10:58:43

    其运行结果如右图,light的输出值为nullhttp://img1.mukewang.com/5a45af5e0001fe0603920394.jpg