杜老师基础java练习题

这篇博客包含了多个Java基础编程练习题,涉及回文数判断、猴子吃桃问题、阶乘计算、数学逻辑及递归问题。此外,还讨论了面向对象设计,如多态、接口的应用,并给出了酒店管理系统和军队管理的模拟实现。最后,提到了用户注册功能的编程实践,要求遵循特定的输入规则。
摘要由CSDN通过智能技术生成

题1:
//一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同
//十位与千位相同

//一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同
//十位与千位相同
public class HomeWork01{
	public static void main(String[] args){
		java.util.Scanner s = new java.util.Scanner(System.in);
		System.out.print("请输入一个5位数:");
		int num = s.nextInt();
		int wan = num/10000;
		//System.out.print("w="+wan);
		int qian = (num-wan*10000)/1000;
		int bai = (num-(wan*10000+qian*1000))/100;
		int shi = (num-(wan*10000+qian*1000+bai*100))/10;
		int ge = (num-(wan*10000+qian*1000+bai*100+shi*10));
		boolean b = false;
		if(wan == ge & qian == shi){
			b = true;
		}
		System.out.print(num + (b ? "是" : "不是") + "回文数");
	}
}

习题2
//猴子吃桃问题,猴子第一天摘下若干桃子。当即吃了一半,还不过瘾,又多吃了一个
//第二天早上又将剩下的桃子吃掉一半,由多吃一个,以后每天早上都吃前一天剩下
//的一半零一个,到第十天早上再吃时,只剩下一个了,求第一天摘了多少桃子?

//猴子吃桃问题,猴子第一天摘下若干桃子。当即吃了一半,还不过瘾,又多吃了一个
//第二天早上又将剩下的桃子吃掉一半,由多吃一个,以后每天早上都吃前一天剩下
//的一半零一个,到第十天早上再吃时,只剩下一个了,求第一天摘了多少桃子?

public class HomeWork02{
	public static void main(String[] args){
		int num = 1;//最后一只桃子逆推
		//第10天吃的时候就一个意思是第9天吃完就剩一个了
		int day = 9;//吃了9天
		while(day > 0){
			day--;
			num = (num + 1) * 2;
			//System.out.println(num);
		}
		System.out.println("第一天摘了" + num + "桃子");//1534
		//PS:猴子真会吃。。。
	}
}

习题3
//计算1! + 2! + 3! + … + 10!
//注意 4!= 432*1

//计算1! + 2! + 3! +  .... + 10!
//注意 4!= 4*3*2*1
public class HomeWork03{
	public static void main(String[] args){
		int sum = 0;//定义和
		//定义外侧循环从1到10
		for(int i = 1; i <= 10; i++){
			int jcs = 1;//定义阶乘数
			for(int j = i ; j > 0; j--){//定义内圈阶乘
				jcs *= j;
			}
			sum += jcs;
		}
		System.out.println("和为:" + sum);//4037931
	}
}

习题4
//一球从100m高度落下,每次落地后反复跳回原高度的一半再落下,求它在
//第10次落地时,共经过多少米

//一球从100m高度落下,每次落地后反复跳回原高度的一半再落下,求它在
//第10次落地时,共经过多少米
public class HomeWork04{
	public static void main(String[] args){
		double sum  = 100;//第一次下落先给定,后面下落9次。
		double high = 100;//初始高
		for(int count = 1; count < 10; count++){
		    //假设从0点弹起,每次弹起高度为先前的一半
			high /= 2;//弹起一次共9次
			sum += 2*high;//弹起上升和下落
		}	
		System.out.println(sum);//299.609375
	}	
}

习题5
//一个四位数,恰好等于去掉它的首位数字之后所剩的三位数的3倍,这个数是多少?

//一个四位数,恰好等于去掉它的首位数字之后所剩的三位数的3倍,这个数是多少?
public class HomeWork05{
	public static void main(String[] args){
		for(int num = 1000; num <= 9999; num++){
			int qian = num/1000;
			if(num == (num-qian*1000)*3){
				System.out.println("该数为:" + num);//1500
			}
		}
	}
}

又来做数学题了
6.23关于方法的一道练习题。
//给一个正整数n求大于n的最小质数

//给一个正整数n求大于n的最小质数
public class HomeWork01{
	public static void main(String[] args){
		minZhiShu(100);
	}
	public static void minZhiShu(int n){
		for(int i = n+1; ; ){
			for(int j = 2; j < i; j++){
				if(i % j == 0){
					i++;
				}
				System.out.println("大于n的最小质数:" + i);
				return;
			}
		}
	}
}

7月5日
写一个Account类的模拟账户
该类的属性:账户id ,余额 balance 年利率 1.23%
方法:各属性的set和get方法,取款方法withraw(),存款方法deposit()

/*写一个Account类的模拟账户
该类的属性:账户id ,余额 balance 年利率 1.23%
方法:各属性的set和get方法,取款方法withraw(),存款方法deposit()
*/
public class Account{
	private int id;
	double balance;
	String annualInterestRate;

	public Account(){
	
	}
	public Account(int i, double b, String a){
		id = i;
		balance = b;
		annualInterestRate = a;
	}
	public int getId(){
		return id;
	}
	public void setId(int i){
		id = i;
	}
	public double getBalance(){
		return balance;
	}
	public void setBalance(double b){
		balance = b;
	}
	public String getAnnualInterestRate(){
		return annualInterestRate;
	}
	public void setAnnualInterestRate(String a){
		annualInterestRate = a;
	}
	//取款
	public void withraw(double m){
		if(balance > m){
			balance -= m;
			System.out.println("成功取出:" + m);
		}else{
			System.out.println("余额不足,取钱失败!");
		}
	}

	public void deposit(double m){
		balance += m;
		System.out.println("成功存入:" + m);
	}
}

/*写一个测试程序
1.创建customer,名字叫Jane Smith
.......不打了太累了。
*/
public class Customer{
	String name;
	Account account;
	public static void main(String[] args){
		Customer c = new Customer();
		Account a = new Account();
		c.name = "Jane Smith";
		a.setId(1000);
		a.setBalance(2000.0);
		a.setAnnualInterestRate("1.23%");
		c.account = a;
		c.account.deposit(100.0);
		c.account.withraw(960.0);
		c.account.withraw(2000.0);
		System.out.println("Customer["+c.name+"] has a acount:id:"+c.account.getId()+" balance:"+c.account.getBalance()+" annualInterestRate:"+c.account.getAnnualInterestRate());
	}
	public Customer(){

	}
	public Customer(String n, Account a){
		name = n;
		account = a;
	}
}

7月8日
2.1.多态练习题
编写程序模拟"主人"喂养"宠物"的场景:
提示1:
主人类: Master
宠物类: Pet
宠物类子类: Dog、 Cat、YingWu
提示2:
主人应该有喂养的方法: feed ()宠物应该有吃的方法: eat()
只要主人喂宠物,宠物就吃。
要求:主人类中只提供–个喂养方法feed(),要求达到可以喂养各种类型的宠物.
编写测试程序:
创建主人对象
创建各种宠物对象
调用主人的喂养方法feed(),喂养不同的宠物,观察执行结果.
通过该案例,理解多态在开发中的作用。
重要提示: feed方法 是否需要-一个参数,参数选什么类型! ! !

public class Test{
	public static void main(String[] args){
		Master m = new Master();
		Pet p = new Pet();
		Pet d = new Dog();
		Pet c = new Cat();
		Pet y = new YingWu();
		//喂养宠物
		m.feed(d);
		m.feed(c);
		m.feed(y);
		m.feed(p);
		//各个子类的特有方法
		m.test(c);
		m.test(y);
		m.test(d);
		m.test(p);
	}
}
public class Master{
	public void feed(Pet p){
		p.eat();
	}
	
	public void test(Pet p){
		if(p instanceof Dog){
			Dog d = (Dog)p;//向下转型
			d.sleep();
		}else if(p instanceof Cat){
			Cat c = (Cat)p;
			c.zhuaLaoShu();
		}else if(p instanceof YingWu){
			YingWu y = (YingWu)p;
			y.speak();
		}
	}
}
public class Pet{
	public void eat(){
		System.out.println("宠物在吃饭。。。");
	}
}

class Dog extends Pet{
	public void eat(){
		System.out.println("Dog在吃饭。。。");
	}

	public void sleep(){
		System.out.println("狗狗正在睡觉。。。");
	}
}

class Cat extends Pet{
	public void eat(){
		System.out.println("猫正在吃饭。。。");
	}

	public void zhuaLaoShu(){
		System.out.println("猫在抓老鼠。。。");
	}
}

class YingWu extends Pet{
	public void eat(){
		System.out.println("鹦鹉在吃饭。。。");
	}

	public void speak(){
		System.out.println("鹦鹉在说话。。。");
	}
}

在这里插入图片描述

7月12号
接口在开发中作用。
举个栗子:中午你去饭馆吃饭,饭馆有不同的厨师,
你自己身为顾客是不需要关心厨师是谁谁谁,厨师也不要关心做给谁吃,所以这个时候,菜单就出现了,顾客手里拿着菜单(has a foodmenu)点菜,厨师负责实现菜单(like foodmenu)里的菜。
所以菜单在顾客那里叫属性在厨师那里叫实现。
接口:

public interface FoodMenu {
    //蛋炒饭
    void riceEgg();
    //鱼香肉丝
    void fishRousi();
}

厨师

//厨师负责实现这个菜单接口

public class ChinaCooker implements FoodMenu {
    @Override
    public void riceEgg() {
        System.out.println("中餐厨师做的蛋炒饭。。。真香");
    }

    @Override
    public void fishRousi() {
        System.out.println("中餐厨师做的鱼香肉丝,很香。。。");
    }
}

public class Westercooker implements FoodMenu{

    @Override
    public void riceEgg() {
        System.out.println("西方厨师做的蛋炒饭");
    }

    @Override
    public void fishRousi() {
        System.out.println("西方厨师做的鱼香肉丝");
    }
}

customer

//菜单是接口顾客负责调用这个接口,为顾客的属性

public class Customer {
    //customer has a foodmenu.表示有这个属性,属性都要封装。
    private FoodMenu foodMenu;

    //无参数构造
    public Customer() {
    }

    //有参构造
    public Customer(FoodMenu foodMenu) {
        this.foodMenu = foodMenu;
    }

    //getter and setter 方法

    public FoodMenu getFoodMenu() {
        return foodMenu;
    }

    public void setFoodMenu(FoodMenu foodMenu) {
        this.foodMenu = foodMenu;
    }

    //提供点菜方法
    public void order(){
        //调用菜单中的菜方法
        this.getFoodMenu().riceEgg();
        this.getFoodMenu().fishRousi();
    }
}

test

public class FoodTest {
    public static void main(String[] args) {
        //多态,父类型引用指向子类型对象
        FoodMenu foodMenu = new ChinaCooker();

        FoodMenu foodMenu1 = new Westercooker();
        Customer customer = new Customer(foodMenu);
        customer.order();
    }

}


7月19号
酒店管理系统部分功能实现
为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能.

1、该系统的用户是:酒店前台。
酒店使用一个二维数组来模拟。“Room[][] rooms;” .
酒店中的每一个房间应该是一个java对象: Room
每一个房间Room应该有房间编号、房间类型、房间是否空闲.
5、系统应该对外提供的功能:
可以预定房间:用户输入房间编号,订房。
可以退房:用户输入房间编号,退房。
可以查看所有房间的状态:用户输入某个指令应该可以查看所有房间状态.

package org.single.jdxt;
import java.util.Scanner;

public class HotelMgtSystem {
    public static void main(String[] args) {
        Hotel hotel = new Hotel();
        while (true) {
            System.out.print("===========欢迎来到酒店管理系统===========\n" +
                    "\t\t\t请输入序号:\n" + "\t\t\t1 订房\n" + "\t\t\t2 退房\n" + "\t\t\t3 打印\n" +"\t\t\t4 退出\n"+ "请输入:");
            Scanner s = new Scanner(System.in);
            int choice = s.nextInt();
            if (choice == 1) {
                System.out.print("请输入房间编号:");
                int roomNo = s.nextInt();
                hotel.order(roomNo);
                System.out.print("你还想继续吗,请输入0或1(0 表退出 1 表示继续):");
                int choice1 = s.nextInt();
                if (choice1 == 0){
                    break;
                }
            } else if (choice == 2) {
                System.out.print("请输入房间编号:");
                int roomNo = s.nextInt();
                hotel.exit(roomNo);
                System.out.print("你还想继续吗,请输入0(0 表退出):");
                int choice1 = s.nextInt();
                if (choice1 == 0){
                    break;
                }
            } else if (choice == 3) {
                hotel.print();
                System.out.print("你还想继续吗,请输入0(0 表退出):");
                int choice1 = s.nextInt();
                if (choice1 == 0){
                    break;
                }
            } else if(choice == 4){
                break;
            }else {
                System.out.println("你的输入有误!");
            }
        }
    }
}
package org.single.jdxt;


public class Hotel {
    /**
     * 酒店类。假设有三层楼,每层10个房间.
     * 房间编号为
     */
    private Room[][] rooms;

    /**
    * 构造方法A,默认创建
     * */
    public Hotel() {
        //创建房间数组对象,总共3楼每楼10间
        rooms = new Room[3][10];
        //创建房间对象
        //i表示下标,i+1表示层数
        for (int i = 0; i < rooms.length; i++) {
            //j表示下表 j+1表示房间数
            for (int j = 0; j < rooms[i].length; j++){
                if(i == 0) {
                    rooms[i][j] = new Room((i + 1) * 100 + j + 1, "单人间", true);
                }else if(i == 1) {
                    rooms[i][j] = new Room((i + 1) * 100 + j + 1, "标准间", true);
                }else {
                    rooms[i][j] = new Room((i + 1) * 100 + j + 1, "豪华间", true);
                }
            }
        }

    }

    public void order(int roomNo){
        //输入房间编号,no / 100 为层数减1 为下标,  no % 100 为房间号
        if(this.rooms[(roomNo / 100) - 1][(roomNo % 100) - 1].isStatus()){
            this.rooms[(roomNo / 100) - 1][(roomNo % 100) - 1].setStatus(false);
            System.out.println("预定房间编号为:"+ roomNo +"的房间,预定成功!");
            return;
        }
        System.out.println("订房失败,该房间已经被占用!!!");
 
package org.doloop.HotelMgtSys;

/*
* no:代表房间编号
* type:表示房间类型,有单人间,标准间,豪华间
* status:表示状态,true为空闲,false表示占用
*/
public class Room {
    private int no;
    private String type;
    private boolean status;

    public Room() {
    }

    public Room(int no, String type, boolean status) {
        this.no = no;
        this.type = type;
        this.status = status;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean getStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    @Override
    public String toString() {
        //System.out.println("["+no+","+type+","+(status ? "空闲":"占用")+"]");
        return "[" + no + "," + type + "," + (status ? "空闲" : "占用") + "]";
    }

    @Override
    public boolean equals(Object obj) {
        if(obj == null || !(obj instanceof Room)) return false;
        if(this == obj) return true;
        Room room = (Room)obj;
        return this.no == room.no && this.type == room.type;
    }
}

===============================================
8月18 computer坏了一段时间,学习进度落下了。挺久没写代码了,感觉逻辑没有那么好了。太菜了
// 开放型题目,随意发挥:
写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队所拥有的所有武器),
该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,
并用这一大小来初始化数组w。
该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。
在这个类中还定义两个方法attackAll()让w数组中的所有武器攻击;
以及moveAll()让w数组中的所有可移动的武器移动。
写一个主方法去测试以上程序。
提示:
Weapon是一个父类。应该有很多子武器。
这些子武器应该有一些是可移动的,有一些
是可攻击的。

package org.doloop.ArrayTest.Army;

/**
 * @author doloop
 * @classname null.java
 * @DATE 2020/8/15 22:13
 */
public class ArmyTest {
    public static void main(String[] args) {
        Army a = new Army(3);
        Rifle r = new Rifle();
        Tanks t = new Tanks();
        Tanks t1 = new Tanks();
        Tanks t2 = new Tanks();
        Plane p = new Plane();
        a.addWeapon(r);
        a.addWeapon(t);
        a.addWeapon(p);
        a.addWeapon(t2);
        a.moveAll();
        a.allAttack();
    }
}
/**
 * @author doloop
 * @classname null.java
 * @DATE 2020/8/15 22:01
 */
public class Rifle extends Weapon{
    @Override
    public void attack() {
        System.out.println("步枪正在射击。");
    }
}

class Tanks extends Weapon{
    @Override
    public void attack() {
        System.out.println("坦克在射击");
    }

    @Override
    public void move() {
        System.out.println("坦克在移动");
    }
}

class Plane extends Weapon{
    @Override
    public void move() {
        System.out.println("飞机在移动。");
    }
}
package org.doloop.ArrayTest.Army;

import java.util.Arrays;

/**
 * @author doloop
 * @classname Army
 * @DATE 2020/8/15 21:44
 */
public class Army {
    private Weapon[] w;//武器容器用来存放武器
    private int num = 0;//用来添加武器的索引

    public Army(Weapon[] w) {
        this.w = w;
    }

    public Army(int i) {
        this.w = new Weapon[i];
    }

    public Weapon[] getW() {
        return w;
    }

    public void setW(Weapon[] w) {
        this.w = w;
    }

    public void addWeapon(Weapon wa){
        if(num < w.length){
        w[num++] = wa;
        System.out.println("武器添加成功");
        return;
        }
        System.out.println("武器添加失败。超过容量");
    }

    public void moveAll(){
        for(int i = 0; i < this.num; i++){
            if(!(this.w[i] instanceof Rifle)){
                this.w[i].move();
                //System.out.println(w[i]);
            }
        }
    }

    public void allAttack(){
        for(int i = 0; i < this.num; i++){
            this.w[i].attack();
        }
    }
}

package org.doloop.ArrayTest.Army;

/**
 * @author doloop
 * @classname null.java
 * @DATE 2020/8/15 21:46
 */
public class Weapon{


    public void attack(){
        System.out.println("武器在攻击");
    }
    public void move(){
        System.out.println("武器在移动");
    }
}

========================
9.19

编写程序模拟用户注册:
1、程序开始执行时,提示用户输入“用户名”和“密码”信息。
2、输入信息之后,后台java程序模拟用户注册。
3、注册时用户名要求长度在[6-14]之间,小于或者大于都表示异常。

注意:
完成注册的方法放到一个单独的类中。
异常类自定义即可。

class UserService {
	public void register(String username,String password){
		//这个方法中完成注册!
	}
}

编写main方法,在main方法中接收用户输入的信息,在main方法
中调用UserService
public class UserService {

    public void register(String username,String password) throws RegisterException {
        //这个方法中完成注册!
        if (null == username || username.length() < 6 || username.length() > 14){
            throw new RegisterException("用户名长度不符合规范【6-14】位,请重新输入。");
        }
        System.out.println("恭喜" + username + ",你已经完成注册!");
    }
}

public class RegisterException extends Exception{
    public RegisterException(){

    }

    public RegisterException(String s){
        super(s);
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println("欢迎注册,清输入用户名和密码。");
        Scanner s= new Scanner(System.in);
        System.out.print("清输入用户名:");
        String user= s.next();
        System.out.print("清输入密码:");
        String passwd = s.next();
        UserService u = new UserService();
        try {
            u.register(user,passwd);
        } catch (RegisterException e) {
            System.out.println(e.getMessage());
        }
    }
}
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值