双鱼座本座 2022-03-17 00:26 采纳率: 75%
浏览 23
已结题

Java 面向对象 添加两种不同商品 为什么查询结果是有两种商品 但是两种商品全都一样

//定义商品类
package shoppingcart;

public class Goods {
    int id;//编号
    String name;
    double price;
    int buyNum;


}
package shoppingcart;

import java.util.Scanner;

public class ShoppingCartTest {
    public static void main(String[] args) {
        Goods[] shopCar = new Goods[100];
        while (true) {
            System.out.println("请输入以下命令");
            System.out.println("添加商品到购物车:add");
            System.out.println("查询购物车商品展示:check");
            /*System.out.println("修改商品数量:update");
            System.out.println("结算购买商品:pay");*/
            Scanner sc = new Scanner(System.in);
            System.out.println("请您输入命令");
            String command = sc.next();
            switch (command) {
                case "add":
                    //添加商品
                    addGoods(shopCar);
                    break;
                case "check":
                    //查询展示商品
                    checkGoods(shopCar);
                    break;
                /*case "update":
                    //修改商品数量
                    updateGoods(shopCar);
                    break;
                case "pay":
                    //结算
                    payGoods(shopCar);
                    break;*/
                default:
                    System.out.println("您输入的命令有误");
            }
        }

    }

    /*private static void payGoods(Goods[] shopCar) {
        double sum = 0.0;
        Goods g = new Goods();
        for (int i = 0; i < shopCar.length; i++) {
             g = shopCar[i];
            if (shopCar[i] != null) {
                sum = sum + g.price * g.buyNum;
            } else {
                break;
            }

        }
        System.out.println("您应该支付" + sum + "元");
    }

    private static void updateGoods(Goods[] shopCar) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要更改的商品种类数量");
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            System.out.println("请输入您要更改的商品编号");
            int id = sc.nextInt();
            System.out.println("请输入您更改后的数量");
            int num = sc.nextInt();
            if
        }


        System.out.println("您的商品数量更改完成");

    }*/

    private static void checkGoods(Goods[] shopCar) {
        System.out.println("查询购物车信息如下");
        for (int i = 0; i < shopCar.length; i++) {
            Goods g = shopCar[i];
            if (shopCar[i] != null) {
                System.out.println(g.id + "\t\t" + g.name + "\t\t" + g.price + "\t\t" + g.buyNum);
            } else {
                break;
            }

        }
    }

    private static void addGoods(Goods[] shopCar) {
        System.out.println("请输入您要添加商品的种类数");
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        Goods g = new Goods();
        for (int i = 0; i < num; i++) {
            System.out.println("请输入商品编号");
            int id = sc.nextInt();
            g.id = id;
            System.out.println("请输入商品名称");
            String name = sc.next();
            g.name = name;
            System.out.println("请输入商品的价格");
            double price = sc.nextDouble();
            g.price = price;
            System.out.println("请输入商品数量");
            int n = sc.nextInt();
            g.buyNum = n;
            for (int j = 0; j < shopCar.length; j++) {
                if (shopCar[j] == null) {
                    shopCar[j] = g;
                    break;
                }
            }
        }

        System.out.println("恭喜您添加商品成功");
    }



}

//输出结果截图
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/351588744746118.png "#left")




  • 写回答

2条回答 默认 最新

  • 知虚 2022-03-17 15:13
    关注

    上午没仔细研究代码,因为Goods g = new Goods();g是一个对象,所以他是引用数据类型,引用数据类型作为变量使用中途会修改数据本身的值,所以 执行shopCar[j] = g;这个语句时,把已经存进去的第一个数据值同时修改了,所以需要把Goods g = new Goods();写到第一个循环里面,做初始化。可以debug看看执行过程,便于理解。
    添加完第一个元素,可以看到数组里的值为:

    img


    当我开始添加第二个元素,输入商品编码之后,可以看到此时数组里的值和g的值:

    img


    可以看出后面的数据覆盖了第一条数据的值。
    当执行结束后,显示如图

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 修改了问题 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效