19.Java复习(二)

1-3.

编写程序,猴子吃桃求解,某天一只猴子摘了一堆桃子,每天吃掉其中的一半然后再对吃 一个,第二天则吃剩余的一半然后再多吃一个。。。直到第 10 天,猴子发现只有 1 个桃子。 问这只猴子在第一天摘了多少个桃子?

public class T3{
       public static void main(String [] args){
             int i;
             for(int t=1;t<10;t++)
             {
               i=(i+1)*2;
               }
           System.out.println("原来的桃子数目:"+i);
           }     
  }

1-4.

编写程序,单位采用电话传递数据,数据是四位的整数,在传递过程中数据加密,加密规 则如下:每位数字都加上 5,然后用所得结果除以 10 的余数代替该数字,再将第一位和第 四位数交换,第二位和第三位数交换。比如输入一个 4 位整数:1357,加密后的数字为 2086。

public class T4{
       public static void main(String [] args ){
             int number,enumber;
             int num1,num2,num3,num4;
             Scanner scanner=new Scanner(System.in);
             System.out.println("请输入四位数:")         
    number=scanner.nextInt();
    num1=number/1000;
    num2=(number%1000)/100;
    num3=(number%100)/10;
    num4=number%10;
    num1=(num1+5)%10;
    num2=(num2+5)%10;
	num3=(num3+5)%10;
	num4=(num4+5)%10;//加密
	num1=num1+num4;
	num4=num1-num4;
	num1=num1-num4;//14换位
	num2=num2+num3;
    num3=num2-num3;
	num2=num2-num3;//23换位
	enumber = num1*1000+num2*100+num3*10+num4;
		  System.out.println("原号码为:"+number);
		  System.out.println("加密号码为:"+enumber);
	}
		scanner.close();
	}
}
}
          

2-3.

编写程序,模拟银行账户功能。编写银行类 Account,该类具备以下属性和方法: 属性:账号、储户姓名、存款余额、最小余额。 方法:存款、取款、查询。 根据用户操作显示储户相关信息。如:存款操作后,显示储户原有余额、今日存款数额及最 终存款余额;取款时,若最后余额小于最小余额,拒绝取款,并显示“至少保留余额:XXX 元” 提示:
(1)可把最小余额定义成静态变量。
(2)要有 Account 类的构造方法。
主程序:

import java.util.Scanner;
public class Bank {
	private String id;		//卡号
	private String name;		//账户姓名
	private String address;		//开户地址
	private double money;		//账户余额
	private double min;		//最小余额
	//创建键盘录入对象
	Scanner sc = new Scanner(System.in);
	//构造方法,初始化基础信息
	public Bank(String id, String name, String address, double money, double min) {
		this.id = id;
		this.name = name;
		this.address = address;
		this.money = money;
		this.min = min;
	}
	//set() / get() 方法
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public double getMoney() {
		return money;
	}
	public void setMoney(double money) {
		this.money = money;
	}
	public double getMin() {
		return min;
	}
	public void setMin(double min) {
		this.min = min;
	}
	
	//查询方法
	public void find() {
		System.out.println("账户余额:"+getMoney());
	}
	
	//存款方法
	public void write() {
		System.out.println("请输入存放金额:");
		double write = sc.nextDouble();
		System.out.println("存款成功!");
		System.out.println("当前账户余额:"+getMoney());
		this.money = getMoney() + write;
		System.out.println("存入金额:"+ write);
		System.out.println("账户余额为:"+getMoney());
	}
	
	//取款方法
	public void read() {
		System.out.println("请输入取款金额:");
		double read = sc.nextDouble();
		if (getMoney() - read >= getMin()) {
			System.out.println("取款成功!");
			System.out.println("当前账户余额:"+getMoney());
			this.money = getMoney() - read;
			System.out.println("取出金额:"+read);
			System.out.println("账户余额为:"+getMoney());
		} else {
			System.out.println("取款失败!当前账户余额:"+getMoney()+",至少保留"+getMin()+"元!");
		}
	}
	
	//操作界面
	public void show() {
		System.out.println(getName()+"您好!请输入您要选择的操作:");
		System.out.println("1.查询");
		System.out.println("2.存款");
		System.out.println("3.取款");
		System.out.println("4.退卡");
	}
	
	//核心操作,主程序直接调用这里
	public void cell() {
		//循环操作
		while(true){
			show();
			System.out.println("--------------------");
			switch (sc.nextInt()) {
			case 1:
				System.out.println("--------------------");
				find();
				System.out.println("--------------------");
				break;
			case 2:
				System.out.println("--------------------");
				write();
				System.out.println("--------------------");
				break;
			case 3:
				System.out.println("--------------------");
				read();
				System.out.println("--------------------");
				break;
			case 4:
				System.out.println("--------------------");
				System.out.println("欢迎下次再来");
				return;
			default:
				System.out.println("--------------------");
				System.out.println("选择错误!请重新选择");
				System.out.println("--------------------");
				break;
			}
		}
	}
}

测试类:

public class Test3 { 
			public static void main(String[] args) {
				//创建账户类对象 帐号、账户姓名、开户地址、账户余额、最小余额
				Bank bd = new Bank("12345", "葛 军", "仙林中心", 3000, 100);
				//循环操作
				bd.cell();
			}
}

2-4.

4.创建银行账户类 SavingAccount,用静态变量存储年利率,用私有实例变量存储存款额。提 供计算年利息方法(即余额乘以年利率)和计算月利息方法(即年利息/12)。 编写一个测试程序测试该类,建立 SavingAccount 的对象 saver,存款额是 3000,设置年利 率是 3%,计算并显示 saver 的存款额、年利息和月利息。 要求:
(1)SavingAccount 类要有构造方法,用于对存款额赋初值。
(2)SavingAccount 类要有显示存款额的方法。

主程序:

public class SavingAcount {
	final float  annualRatte=0.03f;//年利率
	private float balance;
	public float getBalance() {
		return balance;//余
	}
	public void setBalance(float balance) {
		this.balance = balance;
	}
	public SavingAcount(float balance) {
		super();
		this.balance = balance;
	}
	public float annualInterest() {//年利息
		return balance*annualRatte;
		
	}
	public float monthlyInterest() {//月利息
		return balance*annualRatte/12;
	}
}

测试类:

public class TeatSavingAcount {
	public static void main(String[] args) {
	SavingAcount saver=new SavingAcount(8000);
	System.out.println("存款额为"+saver.getBalance());
	System.out.println("年利息为"+saver.annualInterest());
	System.out.println("月利息为"+saver.monthlyInterest());
}
}

(3)程序结果

存款额为8000.0
年利息为240.0
月利息为20.0

3-2.

2.建立一个抽象类 Shape 类,有 Circle(圆形)和 Rect(矩形)子类。Shape 类有 zhouchang() 和 area()两种抽象方法。Rect 有 cha()用于比较长宽的差,若长大于宽输出“长比宽大”,否则 输出“宽比长大”。 (正方形)Squ 为 Rect 子类,在 Squ 类中,重写 cha()方法,并输出“长等于宽” 要求:
(1)要提供 Circle 和 Rect 类要重写父类 Shape 的 zhouchang()和 area()方法 (2)Circle 类要有静态常量 PI
(3)为 Circle 类,Rect 类,Squ 类提供构造方法,为属性赋初值
(4)编写测试类,测试上述程序
Shape类:

public abstract class Shape {
	abstract float zhouchang();
    abstract float area();

}

Circle类:
package xiti32;

public class Circle extends Shape{
	final float PI=3.14f;
    float radius;
	public Circle(float radius) {
	super();
	this.radius = radius;
}
     float zhouchang() {
		return 2*PI*radius;
	}
float area() {
		return PI*radius*radius;
	}
}

Rect类:

public class Rect extends Shape{float length;
float width;

    public Rect(float length, float width) {
	super();
	this.length = length;
	this.width = width;
}
 float zhouchang() {
	
	return 2 * (length + width);
}
float area() {
	return length * width;
}
 public String cha() {
	if(length>width) {
		return "长比宽大";
	}
	else{
		return "长比宽小";
	}
}
}
Squ类:
package xiti32;
 public class Squ extends Rect{public Squ(float length, float width) {
	super(length, width);
}
    public String cha() {
	return "长等于宽";
}
}

Test类:

public class Test {    public static void main(String[] args) {
	Circle circle=new Circle(3.6f);
	System.out.println("圆的面积为"+circle.area());
	System.out.println("圆的周长为"+circle.zhouchang());
	Rect rect=new Rect(3.85f, 9.0f);
	System.out.println("矩形的面积为"+rect.area());
	System.out.println("矩形的周长为"+rect.zhouchang());
	System.out.println(rect.cha());
	Squ squ=new Squ(4.0f, 4.0f);
	System.out.println("正方形的周长为"+squ.zhouchang());
	System.out.println("正方形的面积为"+squ.area());
	System.out.println(squ.cha());
	
}
}
结果:
圆的面积为40.694397
圆的周长为22.608
矩形的面积为34.649998
矩形的周长为25.7
长比宽小
正方形的周长为16.0
正方形的面积为16.0
长等于宽

3.设计一个接口 Transport,声明三个接口常量,表示运输工具,声明一个计算费用的方法, 参数是重量和里程。 (1)一个运输公司从网上得到订单,订单上标有货物重量和运输里程,该公司可以使用三种 运输工具:卡车,火车,飞机。 (2)卡车,火车,飞机分别实现作业 1 的运输接口,计算运费的方法如下: a)卡车:运费=重量距离120。当距离大于 1000(km)或重量大于 60(t)的时候拒载,返 回-1 b)火车:当距离在 900(km)内(包含)时,运费=重量距离250,大于 900(km)运费= 重量距离300 c)飞机:当距离大于 500(km)时,运费=重量距离750,否则拒载,返回-1 提示:在接口中定义三个常量;分别定义三种不同实现类来实现计算运输费用的方法
(1)程序分析
在接口中分别定义三个常量代表三种不同的类来实现计算运输费用的方法。要学会接口的定义方式和调用(interface、implements);此外还要注意题目中给的范围来定义。
(2)程序代码
Transport接口:

public interface Transport {
	final String Truck="truck";
	  final String PLANE="plane";
	  final String TRAIN="train";
	    
	    	 float needtPay(float weight,float kilometer);
	}

Train类:

public interface Transport {
	final String Truck="truck";
	  final String PLANE="plane";
	  final String TRAIN="train";
	    
	    	 float needtPay(float weight,float kilometer);
	}

Plane类:

package xiti33;
public class Plane implements Transport{	
	public float needtPay(float weight, float kilometer) {
	if(kilometer<=500) {
		return -1;
	}else {
	return weight*kilometer*750f;
	}
}
}

Truck类:

package xiti33;
public class Truck implements Transport{
	public float needtPay(float weight, float kilometer) {
		
		if(kilometer>1000||weight>60) {
			return -1;
		}else {
		return weight*kilometer*120f;
		}
	}

}

Test类:

import java.util.Scanner;
public class Test {public static void main(String[] args) {
	Scanner scanner =new Scanner(System.in);
	while(true) {
		System.out.println("请输入重量");
		
		float weight=scanner.nextFloat();
		System.out.println("请输入距离");
		float distance=scanner.nextFloat();
		System.out.println("请选择运输方式:1.truck 2.train 3.plane");
		int way=scanner.nextInt();
	
		switch (way) {
		
		case 1:
			Transport truck=new Truck();
			System.out.println("car的费用是"+truck.needtPay(weight,distance));
			
			break;
        case 2:
		Transport train=new  Train();
		System.out.println("train的费用是"+train.needtPay(weight,distance));
			
			break;
        case 3:
		Transport plane=new Plane();
		System.out.println("plane的费用是"+plane.needtPay(weight,distance));
			 break;
default:
			System.out.println("输入出错,请检查后重输!");
			break;
		}
	}
}
}

(3)程序结果

请输入重量
10
请输入距离
10
请选择运输方式:1.truck 2.train 3.plane
1
car的费用是12000.0
请输入重量
20
请输入距离
20
请选择运输方式:1.truck 2.train 3.plane
2
train的费用是100000.0
请输入重量
1000
请输入距离
10
请选择运输方式:1.truck 2.train 3.plane
3
plane的费用是-1.0

2.编写程序,模拟微信抢红包:要求
1)从键盘输入红包总金额;
(2)从键盘请输入红包的个数;
(3)设置红包最小金额(0.01 元);
(4)计算每次红包可用最大金额=可分配金额-(红包个数-已发出红包个数)*红包最小金额 提示:可使用 Math 类的静态方法 random(),该方法返回一个[0,1)之间的小数;可使用 Random 类的 nextInt 方法,产生指定区间的随机数。
(1)程序分析
本题使用 Math 类的静态方法 random(),该方法返回一个[0,1)之间的小数;使用 Random 类的 nextInt 方法,产生指定区间的随机数。
(2)程序代码

import java.util.Random;
import java.util.Scanner;
import java.text.DecimalFormat;
 
public class RedPackage {


	    private static final float MINMONEY =0.01f;  
	    private static final float MAXMONEY =200f;
	    private static boolean isRight(float money)
	    {
	      if(money<MINMONEY){
	        return false;
	      }
	      else if(money>MAXMONEY)
	      {
	        return false;
	      }
	      return true;
	    }
		public static void main(String[] args) {
			System.out.println("请输入红包金额:");
			Scanner inmoney = new Scanner(System.in);  
		    float money = inmoney.nextFloat();  
		    System.out.println("请输入红包份数:");
			Scanner inpeople = new Scanner(System.in);  
			int people = inpeople.nextInt(); 
			if (isRight(money)){
				System.out.println("请等待••••••");
			float sum,CurrentMoney;
			double ans;	
			DecimalFormat a = new DecimalFormat("00.00");
			for(int i = 1; i <= people; i++) {		
			    if(i != people) {		    	
			    	do {
			    		CurrentMoney= money-(people-i)*MINMONEY;
			    		double avg=money/(people-1);
			    		Random random = new Random();
	                 ans = random.nextDouble();
				        sum = random.nextFloat()*(float)((ans/people)*10*CurrentMoney+avg)+MINMONEY;
			    	   }while(sum>=money);
			    		money -= sum;
			    	    String s = a.format(sum);
			    	    String m = a.format(money);
			    		System.out.println("第"+i+"个人抢到"+s+"元的红包,剩下"+m+"元");	
			    	}
			    	else {
			       String m = a.format(money);
			       System.out.println("第"+i+"个人抢到"+m+"元的红包, 红包已抢完!");
			    	}
			}
			}	
	        else{
		            System.out.println("输入错误");
		     }
		}
	}

(3)程序结果

请输入红包金额:
100
请输入红包份数:
30
请等待••••••
第1个人抢到17.58元的红包,剩下82.42元
第2个人抢到05.49元的红包,剩下76.93元
第3个人抢到12.21元的红包,剩下64.73元
第4个人抢到07.80元的红包,剩下56.92元
第5个人抢到07.29元的红包,剩下49.64元
第6个人抢到10.73元的红包,剩下38.90元
第7个人抢到02.13元的红包,剩下36.77元
第8个人抢到01.34元的红包,剩下35.43元
第9个人抢到03.57元的红包,剩下31.86元
第10个人抢到07.64元的红包,剩下24.22元
第11个人抢到02.40元的红包,剩下21.82元
第12个人抢到02.65元的红包,剩下19.17元
第13个人抢到03.64元的红包,剩下15.54元
第14个人抢到01.13元的红包,剩下14.40元
第15个人抢到00.58元的红包,剩下13.82元
第16个人抢到01.78元的红包,剩下12.04元
第17个人抢到00.43元的红包,剩下11.61元
第18个人抢到00.71元的红包,剩下10.90元
第19个人抢到00.29元的红包,剩下10.61元
第20个人抢到00.40元的红包,剩下10.21元
第21个人抢到00.99元的红包,剩下09.22元
第22个人抢到00.08元的红包,剩下09.14元
第23个人抢到01.49元的红包,剩下07.65元
第24个人抢到00.39元的红包,剩下07.26元
第25个人抢到00.57元的红包,剩下06.69元
第26个人抢到00.20元的红包,剩下06.50元
第27个人抢到00.24元的红包,剩下06.26元
第28个人抢到00.21元的红包,剩下06.04元
第29个人抢到00.06元的红包,剩下05.98元
第30个人抢到05.98元的红包, 红包已抢完!

3.编写一个 List 类型对象只能存储通讯录(存储用户的姓名和联系电话),并输出通讯录列 表到控制台。
(1)程序分析
本题需要运用List接口的ArrayList集合来添加通讯录储存的姓名和联系电话元素,最后将列表输出到控制台上。
(2)程序代码
Student类:

public class Student {
	private String name;
	private String phone;
	public Student(String name, String phone) {		
	    this.name = name;
        this.phone = phone;
	}
	public String toString() {
	return name+":"+phone;
	}
}

测试类:

import java.util.*;
public class Test {
	public static void main(String[] args) {
	Student st1=new Student("郭嘉庆","18816218689");
	Student st2=new Student("韩立","13512779832");
	Student st3=new Student("赵信","13723849123");
	Student st4=new Student("刘迎细","1351234324");
	Student st5=new Student("老四","13515544424");
	List list=new ArrayList();
	
	list.add(st1);
	list.add(st2);
	list.add(st3);
	list.add(st4);
	list.add(st5);
	for(int i=0;i<list.size();i++)
	System.out.println(list.get(i));
	}
}

(3)程序结果

郭嘉庆:18816218689
韩立:13512779832
赵信:13723849123
刘迎细:1351234324
老四:13515544424
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值