初学Java。问题已经在代码段里注释了!求大佬援助!!

//直接照抄书上的代码25页
import java.util.Scanner;//21年三月十三号的添加a 今日总计需要解决的问题是读取数据,商品顺序的任意输入以及累加,输出语句的改进而不是一条一条的敲 a
public class copy_from_page25 
{
	public static void main (String[]args) 
	{
		System.out.println("输入商品数量:(目前只有三种商品而且顺序固定)");//但是这样的话商品清单的输出是固定的。a
		Scanner scan=new Scanner(System.in);
		double pen = 28.0;//钢笔的单价,数据类型双精度浮点型。此处的钢笔已经被赋值为1.
		int penNo = scan.nextInt();//钢笔的数量,数据类型整型
		double diary = 15.0;
		int diaryNo = scan.nextInt();//目前的问题三种产品,顺序固定,模拟生活场景这个还不如你拿计算机敲。a
		double Mp3 = 128.0;//要实现的是商品顺序是打乱的,实现商品数量的累加,最后计算总值。同时商品数量是很大的,不可能有一千种商品你就敲一千行代码。a
		int Mp3No = scan.nextInt();//预测所有商品的数量都是一样的,那怎么实现同时输入多个达成依次使用呢?(解决)a
		double discount = 0.9;//事实证明是自己想多了,显然这个更加人性化。  商品的种类单价是可以通过编号制表储存在表格文件中。需要用的时候读取a
		System.out.println("*********消费清单*********");
		System.out.println("商品\t" + "单价\t" + "数量\t"+"金额");//\t制表排版
		System.out.println("钢笔\t" + pen + "\t" + penNo + "\t" + pen * penNo);//因此此时的不带引号的pen输出为1.
		System.out.println("笔记本\t" + diary + "\t" + diaryNo + "\t" + diary * diaryNo);
		System.out.println("Mp3\t" + Mp3 + "\t" + Mp3No + "\t" + Mp3 * Mp3No);
		System.out.println("会员享受折扣 :	0.9");//无须改进
		double All = (pen * penNo + diary * diaryNo + Mp3 * Mp3No) * discount;//待改进
		System.out.println("总计金额\t\t" + "¥" + All);//总金额的算术表达或说是逻辑运算
		System.out.print("付款金额:");
		Scanner pay=new Scanner(System.in);
		int Pay = pay.nextInt();//付款金额是在已经计算完商品总价之后.总感觉怪怪的。a
		//int Pay = 200;
		System.out.println("付款金额\t\t" + "¥" + Pay);
		double change = Pay - All;
		System.out.println("找零\t\t" + "¥" + String.format("%.2f",change));//这里是实现输出的数据保留小数数量String.format是四舍五入的函数a
		int integral = (int)All / 10;//
		System.out.println("所获积分\t\t" + integral);
	}//其实这个代码都没有实现就是动态输入输出的过程,考虑到学了c的缘故,可以尝试添加输入语句实现这个代码的动态使用。
}//商品有限,超市扫码,静态的是价格,动态的是数量,因此商品输出语句只有一条商品名和单价数量都是自动添加(赋值)a

 

哈哈,我看了一下,这样写应该更容易理解。思路都一样,就是先选择商品,再选择数量,一直循环。输入0就结束。这样写是不是容易理解很多?

public class Test {
    public static void main(String[] args) {
        System.out.println("商品编号\t\t商品名称\r\n1\t\t\t钢笔\n2\t\t\t笔记本\n3\t\t\tMP3");
        Scanner scan = new Scanner(System.in);
        int number = -1;//接收所有的输入记录
        int penNo = 0;//统计所有的铅笔数量
        int diaryNo = 0;//统计所有的笔记本数量
        int Mp3No = 0;//统计所有的Mp3数量
        int currentGoods = 0;
        while (true) {
            //选择商品
            System.out.println("请选择要购买的商品编号:\t(如需结账,请输入0)");
            currentGoods = scan.nextInt();
            if (currentGoods == 0) {//输入0结账
                System.out.println("结账中......");
                break;
            }
            switch (currentGoods) {
                case 1:
                    System.out.println("请输入要购买的钢笔数量");
                    break;
                case 2:
                    System.out.println("请输入要购买的笔记本数量");
                    break;
                case 3:
                    System.out.println("请输入要购买的Mp3数量");
                    break;
            }
            //选择数量
            number = scan.nextInt();
            if (number == 0) {//输入0结账
                System.out.println("结账中......");
                break;
            }
            switch (currentGoods) {//根据输入的商品编号,计算总的商品数
                case 1:
                    penNo += number;
                    break;
                case 2:
                    diaryNo += number;
                    break;
                case 3:
                    Mp3No += number;
                    break;
            }
            String msg = "";
            if (penNo != 0 || diaryNo != 0 || Mp3No != 0) {
                msg += (penNo != 0) ? "钢笔:" + penNo + "支;" : "";
                msg += (diaryNo != 0) ? "笔记本:" + diaryNo + "台;" : "";
                msg += (Mp3No != 0) ? "Mp3:" + Mp3No + "个;" : "";
                System.out.println("已加入购物车的商品:" + msg);
            }
        }
        double pen = 28.0;//钢笔的单价,数据类型双精度浮点型。此处的钢笔已经被赋值为1.
        double diary = 15.0;
        double Mp3 = 128.0;//要实现的是商品顺序是打乱的,实现商品数量的累加,最后计算总值。同时商品数量是很大的,不可能有一千种商品你就敲一千行代码。a
        double discount = 0.9;//事实证明是自己想多了,显然这个更加人性化。  商品的种类单价是可以通过编号制表储存在表格文件中。需要用的时候读取a
        System.out.println("*********消费清单*********");
        System.out.println("商品\t" + "单价\t" + "数量\t" + "金额");//\t制表排版
        System.out.println("钢笔\t" + pen + "\t" + penNo + "\t" + pen * penNo);//因此此时的不带引号的pen输出为1.
        System.out.println("笔记本\t" + diary + "\t" + diaryNo + "\t" + diary * diaryNo);
        System.out.println("Mp3\t" + Mp3 + "\t" + Mp3No + "\t" + Mp3 * Mp3No);
        System.out.println("会员享受折扣 :	0.9");//无须改进
        double All = (pen * penNo + diary * diaryNo + Mp3 * Mp3No) * discount;//待改进
        System.out.println("总计金额\t\t" + "¥" + All);//总金额的算术表达或说是逻辑运算
        System.out.print("付款金额:");
        Scanner pay = new Scanner(System.in);
        int Pay = pay.nextInt();//付款金额是在已经计算完商品总价之后.总感觉怪怪的。a
        //int Pay = 200;
        System.out.println("付款金额\t\t" + "¥" + Pay);
        double change = Pay - All;
        System.out.println("找零\t\t" + "¥" + String.format("%.2f", change));//这里是实现输出的数据保留小数数量String.format是四舍五入的函数a
        int integral = (int) All / 10;//
        System.out.println("所获积分\t\t" + integral);
    }
}

 

public class Test {
    public static void main(String[] args) {
        System.out.println("商品编号\t\t商品名称\r\n1\t\t\t钢笔\n2\t\t\t笔记本\n3\t\t\tMP3");
        Scanner scan = new Scanner(System.in);
        int number = -1;//接收所有的输入记录
        int penNo = 0;//统计所有的铅笔数量
        int diaryNo = 0;//统计所有的笔记本数量
        int Mp3No = 0;//统计所有的Mp3数量
        boolean goods = true;//当前是在输入商品编号还是商品数量?true表示正在选择商品
        int currentGoods = 0;//记录当前选中的商品
        while (true) {
            if (number == 0) {//输入0,则进行结算,退出循环
                System.out.println("结账中......");
                break;
            }
            if (goods) {//当前正在选择商品
                switch (currentGoods) {//根据输入的商品编号,计算总的商品数
                    case 1:
                        penNo += number;
                        break;
                    case 2:
                        diaryNo += number;
                        break;
                    case 3:
                        Mp3No += number;
                        break;
                }
                String msg = "";
                if (penNo != 0 || diaryNo != 0 || Mp3No != 0) {
                    msg += (penNo != 0) ? "钢笔:" + penNo + "支;" : "";
                    msg += (diaryNo != 0) ? "笔记本:" + diaryNo + "台;" : "";
                    msg += (Mp3No != 0) ? "Mp3:" + Mp3No + "个;" : "";
                    System.out.println("已加入购物车的商品:" + msg);
                }
                System.out.println("请选择要购买的商品编号:\t(如需结账,请输入0)");
            } else {//当前正在输入商品数量
                currentGoods = number;//输入商品数量前,先把之前输入的商品编号赋值给currentGoods
                switch (currentGoods) {
                    case 1:
                        System.out.println("请输入要购买的钢笔数量");
                        break;
                    case 2:
                        System.out.println("请输入要购买的笔记本数量");
                        break;
                    case 3:
                        System.out.println("请输入要购买的Mp3数量");
                        break;
                }
            }
            number = scan.nextInt();
            goods = !goods;//输入类型切换(商品还是数量)
        }
        double pen = 28.0;//钢笔的单价,数据类型双精度浮点型。此处的钢笔已经被赋值为1.
        double diary = 15.0;
        double Mp3 = 128.0;//要实现的是商品顺序是打乱的,实现商品数量的累加,最后计算总值。同时商品数量是很大的,不可能有一千种商品你就敲一千行代码。a
        double discount = 0.9;//事实证明是自己想多了,显然这个更加人性化。  商品的种类单价是可以通过编号制表储存在表格文件中。需要用的时候读取a
        System.out.println("*********消费清单*********");
        System.out.println("商品\t" + "单价\t" + "数量\t" + "金额");//\t制表排版
        System.out.println("钢笔\t" + pen + "\t" + penNo + "\t" + pen * penNo);//因此此时的不带引号的pen输出为1.
        System.out.println("笔记本\t" + diary + "\t" + diaryNo + "\t" + diary * diaryNo);
        System.out.println("Mp3\t" + Mp3 + "\t" + Mp3No + "\t" + Mp3 * Mp3No);
        System.out.println("会员享受折扣 :	0.9");//无须改进
        double All = (pen * penNo + diary * diaryNo + Mp3 * Mp3No) * discount;//待改进
        System.out.println("总计金额\t\t" + "¥" + All);//总金额的算术表达或说是逻辑运算
        System.out.print("付款金额:");
        Scanner pay = new Scanner(System.in);
        int Pay = pay.nextInt();//付款金额是在已经计算完商品总价之后.总感觉怪怪的。a
        //int Pay = 200;
        System.out.println("付款金额\t\t" + "¥" + Pay);
        double change = Pay - All;
        System.out.println("找零\t\t" + "¥" + String.format("%.2f", change));//这里是实现输出的数据保留小数数量String.format是四舍五入的函数a
        int integral = (int) All / 10;//
        System.out.println("所获积分\t\t" + integral);
    }
}

效果如下。对输入数据的正确与否我没写判断,你自己加吧。。。

商品编号		商品名称
1			钢笔
2			笔记本
3			MP3
请选择要购买的商品编号:	(如需结账,请输入0)
1
请输入要购买的钢笔数量
10
已加入购物车的商品:钢笔:10支;
请选择要购买的商品编号:	(如需结账,请输入0)
2
请输入要购买的笔记本数量
15
已加入购物车的商品:钢笔:10支;笔记本:15台;
请选择要购买的商品编号:	(如需结账,请输入0)
1
请输入要购买的钢笔数量
3
已加入购物车的商品:钢笔:13支;笔记本:15台;
请选择要购买的商品编号:	(如需结账,请输入0)
0
结账中......
*********消费清单*********
商品	单价	数量	金额
钢笔	28.0	13	364.0
笔记本	15.0	15	225.0
Mp3	128.0	0	0.0
会员享受折扣 :	0.9
总计金额		¥530.1
付款金额:

 

 

你是要解决什么实际问题呢, 还是说这个程序的行为和书上描述的不一样?