借助数组动态扩容实现简单超市结算功能

import java.util.Scanner;

public class PriceBiger {

/**
 * @param args
 * 自动扩容方法
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub

	Scanner scan=new Scanner(System.in);
	//商品名数组
	String[] n=new String[1];
	
	//商品单价数组
	float[] p=new float[1];
	
	//商品数量数组
	byte[] num=new byte[1];
	
	//首先输入一次结算
	String str;
	String s2;
	int i=0;
	do{
		/*
		 * 定义数组放置商品名,商品价格,商品数量,商品小计信息
		 * 数组扩容,首先在外层定义一个容量为1的数组
		 */
		System.out.println("请输入商品名");
		String name=scan.next();
		n[i]=name;
		String [] n1=new String[n.length+1];
		for(int i1=0;i1<n.length;i1++){
			//将数组n中存储的值赋给n1
			n1[i1]=n[i];
		}
		//将扩容后的数组引用给原来的数组
		n=n1;
		
		/*此处是对数组动态扩容的注解
		 *
		 * 首先输入名字a,存放在数组n[0]中,n[0]=a; String [] n={a};
		 * 定义一个新数组,比数组n长度多1
		 * 将数组n里的值取出,放在数组n1中,此时  n1[0]=a;n1[1]=0;  String [] n1={a,0};
		 * 将数组n1覆盖掉数组n,此时  n[0]=a;n[1]=0;  String []n={a,0};
		 * 
		 * 
		 * 下一次输入名字b,存放在数组n[1]中,n[0]=a;n[1]=b;  String[] n={a,b}
		 * 定义一个新数组,比数组n长度多1
		 * 将数组n里的值取出,放在数组n1中,此时 String [] n1={a,b,0};
		 * 将数组n1覆盖掉数组n,此时 String []n={a,b,o};
		 */
		
		System.out.println("请输入单价");
		float price=scan.nextFloat();
		p[i]=price;
		float[] p1=new float[p.length+1];
		for(int i1=0;i1<p.length;i1++){
			p1[i1]=p[i1];
		}
		p=p1;
		
		System.out.println("请输入数量");
		byte number=scan.nextByte();
		num[i]=number;
		byte []num1=new byte[num.length+1];
		for(int i1=0;i1<num.length;i1++){
			num1[i1]=num[i1];
		}
		num=num1;
		
		i++;
		
		System.out.println("请问是否还要继续输入?Y/N?");
		
		str=scan.next();
		s2="Y";
		
	}while(str.equals(s2));
	//定义小计数组的长度
	//这里需要用到小计数组,而小计数组在商品信息录入结束之前无法确定数组长度,所以在此处用n.length动态获取小计数组的长度
		float [] sum=new float[n.length];
		
	//小计求和
	for(int c=0;c<n.length;c++){
		sum[c]=p[c]*num[c];
	}
	
	//输入折扣
	System.out.println("请输入折扣:");
	float discount=scan.nextFloat();
	
	//输入付款值
	System.out.println("请输入付款值:");
	 float pay=scan.nextFloat();
	 
	//输出结算信息
	System.out.println("******消费清单******");
	System.out.println("物品名称"+"\t"+"单价"+"\t"+"数量"+"\t"+"小计");
	for(int i3=0;i3<n.length-1;i3++){
		System.out.println(n[i3]+"\t"+p[i3]+"\t"+num[i3]+"\t"+sum[i3]);
	}
	
	//初始化一个单精度类型sum1,供后续计算输出商品总价信息
	float sum1=0f;
	
	//sum数组中的每个值相加,求原来的总价
	for(int i4=0;i4<sum.length;i4++){
		sum1=(float) (sum1+sum[i4]);
	}
	System.out.println("折扣:"+discount);
	System.out.println("原总价:"+sum1);
	System.out.println("实际付款:"+sum1*discount/10);
	System.out.println("付款:"+pay);
	System.out.println("找零:"+(pay-sum1*discount/10));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值