MyBlog1 : 利用数组和for循环写一个控制台小程序

发布时间 2023-03-23 11:53:24作者: 幸幸

利用数组和for循环写一个控制台小程序

import java.util.Scanner;

/**
 * @Author: 幸幸
 * @Date: 2023/03/23/7:18
 * @Description:利用数组和for循环写一个控制台小程序
 */
public class Myblog1 {
    private static final String[] listOfGoods = {"1,巧克力豆面包:4.5元\t", "2,青团子:1.5元\t", "3,奶粉:36元\t", "4,薯片:1.5元\t", "5,小笼包:1.5元\t", "6,葱油拌面:2.2元\t", "7,宅の快乐水:2.5元\t"};
    private static final int[] numbersOfgoods = new int[listOfGoods.length];
    private static final double[] priceOfgoods = new double[listOfGoods.length];

    static {
        splitPrice(listOfGoods);
    }
    public static void main(String[] args) {
        welcome(numbersOfgoods);
    }
    public static void printListOfGoods(String[] listOfGoods) { //打印商品列表
        for (int i = 0; i < listOfGoods.length; i++) {
            System.out.print(listOfGoods[i] + " ");
        }
    }

    public static void welcome(int[] numbersOfgoods) {
        System.out.println("欢迎来到幸幸的小店,本店今日上新:");
        printListOfGoods(listOfGoods);
        System.out.print("\n输入  商品序号:数量  就可以采购了\n");
        Scanner sc = new Scanner(System.in);
        String input = "";
        boolean n = true;
        while (n) {
            System.out.println("按'k'继续购物\t如果要退出please输入'n'");
            String continueShopping = sc.next();
            if (continueShopping.equals("n") || continueShopping.equals("N")) {
                n = false;
                printAccount();
            } else {
                System.out.println("输入格式  商品序号:数量 例如 1:6 代表1号商品购买6份");
                sc.nextLine(); //嘿嘿,因为nextLine()它会吃掉回车,这样回车的时候默认把回车当作下一行的首字符了,所以这用两次吃掉一次回车
                input = sc.nextLine();
                recordNumbersOfGoods(input, numbersOfgoods);
            }
        }
    }
    private static void printAccount() {
        double bill = 0;
        for (int i = 0; i < listOfGoods.length; i++) {
            bill += numbersOfgoods[i] * priceOfgoods[i];
            if (numbersOfgoods[i] > 0) {
                System.out.println(listOfGoods[i] + "* " + numbersOfgoods[i]);
            }
        }
        System.out.println("您在本店一共消费 " + bill + "元!\n" + "祝您天天好心情!欢迎下次光临!");
    }
    private static void recordNumbersOfGoods(String input, int[] numbersOfgoods) {
        String[] split = input.split(" "); //一行输入根据空格分成若干份保存在split数组中
        String serialNumber = "";  // 用来记录用户输入的商品序号
        for (int i = 0; i < split.length; i++) {
            String[] temp = split[i].split(":"); //再按照":"将字符串分成2部分,第一部分为商品序号,第二部分为数量,所以temp[1]是数量
            serialNumber = temp[0];
            int trueIndex = Integer.parseInt(serialNumber) - 1; //数组内对应的索引+1 才是商品序号
            int number = Integer.parseInt(temp[1]);//temp[1]是数量
            if (numbersOfgoods[trueIndex] + number < 0) numbersOfgoods[trueIndex] = 0; //用户输入负数代表减少商品数量,但也不能最终订购数量是负数
            else numbersOfgoods[trueIndex] += number;
        }
    }
    private static void splitPrice(String[] listOfGoods) {  //从商品列表中分离价格
        for (int i = 0; i < listOfGoods.length; i++) {
            String[] split1 = listOfGoods[i].split(":");
            String[] split2 = split1[split1.length - 1].split("元");
            String price = split2[0];
            priceOfgoods[i] = Double.parseDouble(price);
        }
    }
}

Tips:代码并未捕获用户输入可能引起的异常哦!