题目要求:使用面向对象的概念表示出下面的生活场景:小明去超市买东西,所有买到的东西都放在购物车之中,最后到收银台一起结账。(开放题目,功能可自定义)
实现效果视频:【JAVA】类与对象(实验)_哔哩哔哩_bilibili
思路构建:创建字符串数组存储所有商品名称及编号,然后再创建对应的价格浮点型数组,利用while(true)循环让小明输入想要加入购物车的商品编号,当输入-1时结束,最后通过计算机类算出购物车商品总价并输出。
商品类代码如下:
package trolley;
public class thing {
public static String[] thg = {"1.番茄","2.火腿肠","3.伞","4.西瓜","5.豆腐"};
public static double[] price = {2,1.5,15,20,1};
public static int car = 0;
public static double[][] detailcar = {{0,0},{0,0},{0,0},{0,0},{0,0}};
public static int lenth1 = thg.length;
}
其中商品个数可以随需要更改,由于二维数组用起来太麻烦,所以这里采用了两个一维数组,上面thg商品一维数组对应着下方price一维数组的价格,在取用时可以同时取数组相同位置的元素。
接着将购物车内的初始商品数量设置为0,购物车二维数组给一个初始化的值,这里选的为0.二维数组的每行存放购物车商品的数量和单价。
购物车结算(计算器)类代码如下:
package trolley;
public class caculate {
public static double sum=0;
public static void endbuy() {
int i;
if(thing.car==0)
{
System.out.println("当前购物车没有物品。");
}
else {
for (i = 0; i < thing.car; i++) {
sum += thing.detailcar[i][0]*thing.detailcar[i][1];
}
}
}
}
这里设置了一个endbuy()方法,决定了小明购买完成的信号,当使用此方法时,代表添加商品阶段结束,开始计算购物车内所有商品的价格。
并且在商品类中定义了购物车内商品的数量car,这时候就可以遍历此数量内的购物车数组,分别将每行的商品数量乘单价,再累加得到购物车商品总价sum。
最后测试类代码如下:
package trolley;
import java.util.Scanner;
public class road {
public static void main(String[] args) {
int i;
System.out.println("商品如下:");
for (i=0;i<thing.lenth1;i++)
{
System.out.println(thing.thg[i]);
System.out.println("单价:"+thing.price[i]);
}
System.out.println("请输入需要加入购物车的商品编号:");
System.out.println("(输入-1结束购物并结账)");
Scanner want = new Scanner(System.in);
int things = want.nextInt();
while(true)
{
System.out.println("请输入购买的数量:");
double num = want.nextDouble();
thing.detailcar[thing.car][0] = num;
thing.detailcar[thing.car][1] = thing.price[things-1];
thing.car++;
System.out.println("请输入需要加入购物车的商品编号:");
things = want.nextInt();
if(things==-1)
{
break;
}
}
System.out.println("开始结算购物车商品价格");
caculate.endbuy();
System.out.println("结算完毕");
System.out.println("商品总价为:"+caculate.sum);
}
}
这里测试类先遍历thg商品,将所有商品的名称和单价打印出来,如果不想设置length1这个量,也可以调用thg.lenth来得到thg数组的长度。
接着用while(true)设置一个死循环,不断地向购物车内添加商品,直到输入-1代表购物结束,然后调用caculate.endbuy()来计算商品总价,最后输出商品总价。
运行结果:
可改进的部分:
如果会使用二维数组建议使用二维数组,这样可以将物品和单价和购物数量全对应在一起,方便代码的复用和可阅读性。
测试类中的while(true)循环向购物车添加商品,也可以改成Switch语句,比如1代表添加商品,2代表去掉商品,3代表结束购物这样。
可以额外添加一个购物车的物品名称数组,来存放加入购物车的商品名称,这样可以在结算时显示出购买了什么商品,数量是多少,单价是多少,总价是多少,类似于平常去超市买东西的小票。