目录
一、引言
最近复习大一的JAVA基础语法知识if判断语句、循环语句和switch选择语句等等。偶然的一次练习中,发现一道题目很有意思,它对JAVA基础语法的综合性很强,接下来让我慢慢说明。
二、问题描述
- 问题标题:小型购物系统
- 问题要求:用户可以选择物品并输入购买的件数,并且每次选完一件物品都要询问是否继续 购买,如果继续购买输入"y",不继续购买输入"n",物品打8折优惠,输出应付金 额。
- 需求说明:循环输入商品编号,输出对应的商品价格; T恤:245; 网球鞋:570; 网球拍:300
- 最终效果样图:
三、问题分析
问题一: 如何做到循环输入商品编号?
分析:循环体内使用switch;
问题二: 如何判断是否继续购买并执行?
分析:用if语句判断是否继续购买;
if用户输入y,则if语句体将while的条件判断语句重复为true,继续购买;
if用户输入n,则if语句体将while的条件判断语句改为false,否继续购买;
if用户输入其他字符、符号或数字,则执行else语句,输出”请输入正确的指令“,并 默认继续购买;
问题三: 如何判断用户输入的是"y"或者"n"?
分析:谈到这个问题,一些Java初学者的同学就会想当然的说,判断条件不就 是"scanner=="y"或者是"scanner=="n" " "吗?
其实在这里还有一个小的知识点,要判断string类型的输入是否等于某个字符时, 需要用equals关键字,比如:scanner.equals("y");
四、代码与运行结果展示
代码展示:
package day_1;
import java.util.Scanner;
public class Dome8 {
public static void main(String[] args) {
//键盘录入,创建对象
Scanner nub = new Scanner(System.in);
//打印输出菜单
System.out.println("************************");
System.out.println("请选择购买商品的编号:");
System.out.println("1、T恤 " +
"2、网球鞋 " +
"3、网球拍");
System.out.println("************************");
//定义while的条件判断语句的值flag
boolean flag = true;
//定义合计
int sun=0;
//循环输入商品编号和数量
while (flag) {
System.out.println("请输入商品编号:");
//接收商品编号
int nub1 = nub.nextInt();
System.out.println("请输入购买数量:");
//接收购买数量
int nub2 = nub.nextInt();
//switch选择购买商品的编号
switch (nub1) {
case 1:
sun+=245 * nub2;
System.out.println("T恤:245 " + "数量:" + nub2 + " 合计:" + sun);
break;
case 2:
sun+=570 * nub2;
System.out.println("网球鞋:570 " + "数量:" + nub2 + " 合计:" + sun);
break;
case 3:
sun+=300 * nub2;
System.out.println("网球拍:300 " + "数量:" + nub2 + " 合计:" + sun);
break;
default:
System.out.println("请输入正确的序号");
break;
}
System.out.println("是否继续购买:(y/n)");
//接收y/n
String str = nub.next();
//判断是否继续购买商品
if (str.equals("y")) {
//输入为y,继续购买商品,条件判断语句继续为true
flag = true;
} else if(str.equals("n")){
//输入为n,否继续购买商品,条件判断语句改为false
//计算打折后的价钱,并且将打折后的价钱存储在price变量中
double price = sun * 0.8;
System.out.println("折扣:0.8");
//打印输出应付金额
System.out.println("应付金额:" + price);
flag = false;
}else {
System.out.println("请输入正确的指令!");
}
}
}
}
运行结果如图:
五、功能复查及优化
在生活中,超市结账,饭店结账都是系统自动计算应该给顾客找零多少钱,或者还差多少钱,而在该系统中却没有体现该功能,放在实际生活中,增加了不少的人力劳动,以及成本;
所以,该购物系统再次增加一个功能,通过用户实际支付的金额,计算要给用户找零多少,或者,还差多少钱,并输出;
代码展示:
package day_1;
import java.util.Scanner;
public class Dome8 {
public static void main(String[] args) {
//键盘录入,创建对象
Scanner nub = new Scanner(System.in);
//打印输出菜单
System.out.println("************************");
System.out.println("请选择购买商品的编号:");
System.out.println("1、T恤 " +
"2、网球鞋 " +
"3、网球拍");
System.out.println("************************");
//定义while的条件判断语句的值flag
boolean flag = true;
//定义合计
int sun=0;
//循环输入商品编号和数量
while (flag) {
System.out.println("请输入商品编号:");
//接收商品编号
int nub1 = nub.nextInt();
System.out.println("请输入购买数量:");
//接收购买数量
int nub2 = nub.nextInt();
//switch选择购买商品的编号
switch (nub1) {
case 1:
sun+=245 * nub2;
System.out.println("T恤:245 " + "数量:" + nub2 + " 合计:" + sun);
break;
case 2:
sun+=570 * nub2;
System.out.println("网球鞋:570 " + "数量:" + nub2 + " 合计:" + sun);
break;
case 3:
sun+=300 * nub2;
System.out.println("网球拍:300 " + "数量:" + nub2 + " 合计:" + sun);
break;
default:
System.out.println("请输入正确的序号");
break;
}
System.out.println("是否继续购买:(y/n)");
//接收y/n
String str = nub.next();
//判断是否继续购买商品
if (str.equals("y")) {
//输入为y,继续购买商品,条件判断语句继续为true
flag = true;
} else if(str.equals("n")){
//输入为n,否继续购买商品,条件判断语句改为false
//计算打折后的价钱,并且将打折后的价钱存储在price变量中
double price = sun * 0.8;
System.out.println("折扣:0.8");
//打印输出应付金额
System.out.println("应付金额:" + price);
System.out.print("实付金额:");
//获取实付金额
int nub4 = nub.nextInt();
//判断实付金额是否大于应付金额
if (nub4 >= price) {
//实付金额大于应付金额
//计算找零多少,并存储在sfu变量里面
double sfu = nub4 - price;
System.out.println("找零:" + sfu);
System.out.println("欢迎下次光临(^_^)");
} else {
//实付金额小于应付金额
//计算还差多少,并存储在sfu变量里面
double sfu = price-nub4;
System.out.println("还差:" + sfu);
System.out.println("欢迎下次光临(^_^)");
}
flag = false;
}else {
System.out.println("请输入正确的指令!");
}
}
}
}
效果展示:
六、结论
- 本系统对对于Java基础语法的综合性很强,其中包括了很重要的,循环语句,判断语句和选择语句,非常建议新手同学拿来练手用;
- 编写完本系统后,我又对编程又了新的认识,编程不是死板按照需求编写,应该结合实际情况与甲方进行商讨,从而优化代码,进而节约时间,节约成本,节约人力;此外,有一个好的编程习惯也很重要。代码的排版;标识符的命名要遵守见名思意的原则,方便后期对代码的优化;还有就是要有注释的习惯。
- 感谢大家阅读我的博客,对于Java的学习有什么好的建议和问题可以留在评论区大家一起讨论。