米老虎383 2023-01-02 23:32 采纳率: 90%
浏览 26
已结题

java购物车系统遇到的问题

问题:代码只能执行一次"add"命令,然后就报错,找好久不知道问题在哪,望解答
报错图片:

img

代码如下

//商品类
public class Commodity {
    int id;
    String name;
    double price;
    int buynum;
    
}
//测试类
package shoppingCar;
import java.util.Scanner;

public class ShopcarTest {
    public static void main(String[] args)
    {
        
        Commodity[] shopCar=new Commodity[100];
        
        //操作架构
        while(true)
        {
            System.out.println("请选择如下命令进行操作");
            System.out.println("添加商品到购物车:add");
            System.out.println("查询商品到购物车: query");
            System.out.println("修改购买数量:update");
            System.out.println("结算商品:pay");
            
            System.out.println("输入指令:");
            Scanner input=new Scanner(System.in);
            String command=input.next();
            
            switch(command) {
            case "add":
            {
                addGoods(shopCar);
                for(int i=0;i<shopCar.length;i++)
                {
                    if(shopCar[i]!=null)
                    {
                        System.out.println(shopCar[i].id+"\t\t"+shopCar[i].name+"\t\t"+shopCar[i].price+"\t\t"+shopCar[i].buynum);
                    }
                    else
                    {
                        System.out.println("1");
                    }
                    break;
                }
            }
                
                break;
            case "query":
                queryGoods(shopCar);
                break;
            case "update":
                updateGoods(shopCar);
                break;
            case "pay":
                payGoods(shopCar);
                break;
                default:
                    break;
            
            }
            
        }
        
    }
//计算总价
    public static void payGoods(Commodity[] shopCar)
    {
        double pricesum=0;
        for(int i=0;i<shopCar.length;i++)
        {
            pricesum+=shopCar[i].price;
        }
        System.out.println("总金额:"+pricesum);
    }
//更改购买数量
    public static void updateGoods(Commodity[] shopCar)
    {
        Scanner input=new Scanner(System.in);
        int chagenum;
        int i;
        
        System.out.println("输入你要修改商品的名称");
        while(true)
        {
            int sig;
                String upname=input.next();
            for( i=0;i<shopCar.length;i++)
            {
                if(upname.equals(shopCar[i].name))
                {
                    chagenum=i;
                    System.out.println("输入修改数量");
                    int num1=input.nextInt();
                    shopCar[i].buynum=num1;
                    break;
                }
            }
            if(i==shopCar.length)
            {
                System.out.println("无该商品重新输入");
            }
        }
        
        
    }
    //查询商品
    public static void queryGoods(Commodity[] shopCar)
    {
        System.out.println("商品id\t\t商品姓名\t\t商品价格\t\t购买数量\t\t");
        for(int i=0;i<shopCar.length;i++)
        {
            if(shopCar[i]!=null)
            {
                System.out.println(shopCar[i].id+"\t\t"+shopCar[i].name+"\t\t"+shopCar[i].price+"\t\t"+shopCar[i].buynum);
            }
            else
            break;
        }
    }
    //添加商品
    public static void addGoods(Commodity[] shopCar)
    {
        Scanner input=new Scanner(System.in);
        System.out.println("请输入商品的编号");
        
        
        int num;
        //检查编号是否重复
        while(true)
        {
             num=input.nextInt();
                int i;
            
                for( i=0;i<shopCar.length;i++)
                {
                    if(shopCar[i]!=null)
                    {
                        if(num==shopCar[i].id)
                        {
                            System.out.println("编号重复");
                            break;
                        }
                    }
                    
                }
                if(i==shopCar.length)
                    break;
            
        }
            
        
        System.out.println("输入商品的名称:");
        String name1=input.next();
        
        System.out.println("输入商品的价格");
        double price1=input.nextDouble();
        
        System.out.println("输入商品购买数量");
        int num1=input.nextInt();
        
        input.close();
        
        Commodity g=new Commodity();
        g.id=num;
        g.buynum=num1;
        g.name=name1;
        g.price=price1;
        
        
        
        for(int j=0;j<shopCar.length;j++)
        {
            if(shopCar[j]==null)
            {
                shopCar[j]=g;
                break;
            }
        }
        System.out.println("添加成功");
        
    }

}



  • 写回答

2条回答 默认 最新

  • pzzhao 2023-01-02 23:59
    关注

    你的 addGoods 方法里面执行了input.close,这个方法执行的时候会讲传入的System.in也给关闭了,所以在你再次new Scanner,也无法打开System.in,所以获取输入的时候就获取不到值了。
    建议:
    input 改成成员变量,全局使用这一个,也不用专门去关闭这个Scanner了,因为程序结束流会自动回收的。

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

报告相同问题?

问题事件

  • 系统已结题 1月11日
  • 已采纳回答 1月3日
  • 创建了问题 1月2日

悬赏问题

  • ¥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之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改