黑马程序员技术交流社区

标题: 一直报错 ,找不到原因 ,帮忙看下 [打印本页]

作者: 19960812    时间: 2016-3-22 23:42
标题: 一直报错 ,找不到原因 ,帮忙看下
import java.util.ArrayList;
import java.util.Scanner;

public class superStarTest{
        public static void main(String[] args){
                //创建集合
                ArrayList<superStar> list = new ArrayList<superStar>();
       
                init(list);
                //定义死循环while的switch,case调用方法
                while(true){
                //调用方法
                int x = fan();
                        switch(x){
                                case 1:
                                                spqd(list);
                                        break;
                                case 2:
                                                 xiugai(list);
                                        break;
                                case 3:
                                                exit();
                                        break;
                                default:
                                        System.out.println("你的输入有误,请重新输入");
                       
                        }
               
                }
       
        }
        //初始化商品属性
        public static void init(ArrayList<superStar>list){
                //创建superStar对象
                superStar s1 = new superStar();
                s1.id = "( 090115 )";
                s1.name = "少林寺酥饼核桃";
                s1.qj = 15.50;
                s1.number = 0;

                //然光Q移属性
                superStar s2 = new superStar();
                s2.id = ("( 090028 )");
                s2.name = ("然光Q移");
                s2.qj = 16.00;
                s2.number = 0;
                        //北京尚康杂粮牡丹饼属性
                superStar s3 = new superStar();
                s3.id = ("( 090027 )");
                s3.name = ("北京尚康杂粮牡丹饼");
                s3.qj =14.50;
                s3.number = 0;
                //向集合添加元素
                list.add(s1);
                list.add(s2);
                list.add(s3);
        }
        //定义查看商品库存清单的方法
        public static void spqd(ArrayList<superStar>list){
                //打印票头
       
                System.out.println("                欢     迎     光     临                        ");
                System.out.println("   商品编号      名称              单价   计价单位1/ge");
                int totalNumber = 0;
                double totalMoney = 0.0;
                //遍历集合,总价总数量循环累计
                for(int i = 0;i < list.size();i++){
                                superStar s = list.get(i);
                                totalNumber += s.number;
                                totalMoney += s.qj* s.number;
               
        }        //打印票体
                System.out.println(s.id+"        "+s.name+"                "+s.qj+"        "+s.number);
       
                //票脚
                System.out.println("商品的总数量:"+totalNumber);
                System.out.println("商品的总价格:"+totalMoney);
               
        }
        //定义商品库存修改的方法
        public static void xiugai(ArrayList<superStar>list){
                //创建键盘录入对象,遍历集合
                Scanner sc = new Scanner(System.in);       
               
                for(int i = 0;i < list.size();i++){
                        superStar s = list.get(i);       
               
                        System.out.println("请修改商品:"+s.name+"的数量");
                        s.number = sc.nextInt();
                        System.out.println("修改商品数量成功:");


                }
        }
        //定义退出方法
        public static void exit(){
                System.out.println("   退出成功   ");
                System.exit(0);
        }
        //定义接收多个方法的 , 方法
        public static int fan(){
                System.out.println("--------请输入你要选择的功能--------");
                System.out.println("-------库存管理---------");
                System.out.println("-------1.查看库存商品清单-");
                System.out.println("-------2.修改商品库存的数量--------");
                System.out.println("-------3.退出-------");
               
                Scanner sc = new Scanner(System.in);
                int x = sc.nextInt();

                return x;
        }
       
}

public class superStar{
        String id;
        String name;
        double qj;
        int number;
}

作者: ameanboy    时间: 2016-3-22 23:51
这部分错了
  1. public static void spqd(ArrayList<SuperStar> list) {
  2.         // 打印票头

  3.         System.out.println("                欢     迎     光     临                        ");
  4.         System.out.println("   商品编号      名称              单价   计价单位1/ge");
  5.         int totalNumber = 0;
  6.         double totalMoney = 0.0;
  7.         // 遍历集合,总价总数量循环累计
  8.         for (int i = 0; i < list.size(); i++) {
  9.             SuperStar s = list.get(i);
  10.             totalNumber += s.number;
  11.             totalMoney += s.qj * s.number;

  12.         } // 打印票体
  13.         System.out.println(s.id + "        " + s.name + "                " + s.qj + "        " + s.number);

  14.         // 票脚
  15.         System.out.println("商品的总数量:" + totalNumber);
  16.         System.out.println("商品的总价格:" + totalMoney);

  17.     }
复制代码


s的作用范围只在循环里。

改成
  1. public static void spqd(ArrayList<SuperStar> list) {
  2.         // 打印票头

  3.         System.out.println("                欢     迎     光     临                        ");
  4.         System.out.println("   商品编号      名称              单价   计价单位1/ge");
  5.         int totalNumber = 0;
  6.         double totalMoney = 0.0;
  7.         // 遍历集合,总价总数量循环累计
  8.         SuperStar s = null;
  9.         for (int i = 0; i < list.size(); i++) {
  10.             s = list.get(i);
  11.             totalNumber += s.number;
  12.             totalMoney += s.qj * s.number;

  13.         } // 打印票体
  14.         System.out.println(s.id + "        " + s.name + "                " + s.qj + "        " + s.number);

  15.         // 票脚
  16.         System.out.println("商品的总数量:" + totalNumber);
  17.         System.out.println("商品的总价格:" + totalMoney);

  18.     }
复制代码


然而这么做是有nullPointerException风险的,建议try catch,或者使用字符串的concat功能来实现
作者: 19960812    时间: 2016-3-23 23:46
ameanboy 发表于 2016-3-22 23:51
这部分错了

虽然昨晚已经解决了,还是要多谢你,费心了,刚刚学java基础一个星期 , 别的办法还没有学




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2