//直接照抄书上的代码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
付款金额:
你是要解决什么实际问题呢, 还是说这个程序的行为和书上描述的不一样?