Java练习案例

假设系统给定一个人的年龄(这个年龄是键盘输入的)
根据年龄来判断这个人处于生命的哪个阶段,年龄必须在[0 - 150]

[0 - 5] 幼儿
[6 - 10] 少儿
[11 - 18] 青少年
[19 - 35] 少年
[36 - 55] 中年
[56 - 150] 老年

 public class IfTest02{

	public static void main(String[] args){
		
		//int age = 19;
		java.util.Scanner s = new java.util.Scanner(System.in);
		System.out.print("请输入您的年龄:");//输出提示信息,不然用户根本不知道这里要干嘛
		int age = s.nextInt();//停下来等待用户的输入,输入之后自动接收,赋值给age变量
		

		//2.根据需求进行业务逻辑判断
		String str = "您处于生命周期的老年阶段";
		if(age < 0 || age > 150){
			str = "请重新输入年龄";
		}else if(age <= 5){
			str = "您处于生命周期的幼儿阶段";
		}else if(age <= 10){
			str = "您处于生命周期的青年阶段";
		}else if(age <= 18){
			str = "您处于生命周期的青少年阶段";
		}else if(age <= 35){
			str = "您处于生命周期的少年阶段";
		}else if(age <= 55){
			str ="您处于生命周期的中年阶段";
		}
		System.out.println(str);
	}
}
判断当前天气:
			当外面下雨的时候:
				带雨伞:
					判断性别:
						当性别为男时:带一把大黑伞
						当性别为女时:带一把小花伞

			当外边是晴天的时候:
				判断天气的温度:
					当天气温度30度以上时:
						男:戴墨镜
						女:擦防晒霜

		提示:
			1.一定会用到嵌套
			2.天气状况,温度,性别都需要从键盘输入
				天气状况:1表示下雨 0表示晴天
				温度直接使用数字即可
				性别:1表示男、0表示女
public class IfTest03{

	public static void main(String[] args){

		System.out.println("欢迎使用本系统,您通过本系统可以完成一些简单的判断");
		System.out.println("说明1:1表示下雨,0表示天晴");
		System.out.println("说明2: 1表示男,0表示女");
		System.out.println("说明3:温度为数字");
		//先获取键盘输入值
		java.util.Scanner s = new java.util.Scanner(System.in);
		System.out.print("请输入天气:");
		int Weather = s.nextInt();//天气
		System.out.print("请输入性别:");
		int Sex = s.nextInt();//性别
		
		//下雨时
		if(Weather == 1){
			//判断性别
			if(Sex == 1){
				System.out.println("带一把大黑伞");
			}else if(Sex == 0){
				System.out.println("带一把小花伞");
			}else{
				System.out.println("对不起,您的性别是怎么回事?");
			}
		}else if(Weather == 0){	//天晴时
			System.out.print("请输入温度:");
			int temp = s.nextInt();//温度
			if(temp > 30){	//温度高于30度男女要做的事情
				if(Sex == 1){	
					System.out.println("带墨镜");
				}else if(Sex == 0){
					System.out.println("擦防晒霜");
				}else{
				    System.out.println("对不起,您的性别是怎么回事?");
				 }
			
			}else{
				System.out.println("今天天气不错,可以直接出行!");
			 }
			
		 }else{
			System.out.println("您输入的天气不存在");
		  }	
	}
}

for循环

public class ForTest02
{
	public static void main(String[] args){
		
		//输出1-10之间的所有奇数
		for(int i=1;i<=10;i+=2){
			System.out.println("------->" + i);
		}

		//输出1-10之间所有的偶数
		for(int i=2;i<=10;i+=2){
			System.out.println("-------------->>>" + i);
		}

		//倒数10 - 0
		for(int i=10;i>=0;i--){
			System.out.println(i);
		}

		//倒数奇数
		for(int i=9;i>=1;i-=2){
			System.out.println("--------------->" + i);
		}

		//倒数偶数
		for(int i=10;i>=0;i-=2){
			System.out.println("----------->>>>" + i);
		}

	}
}
---------------------------------------------------------------------------
/*
	在前一个程序的基础上,计算1-100所有奇数的和
*/

public class  ForTest04
{
	public static void main(String[] args){
		int sum = 0;
		for(int i=1;i<=100;i+=2){
			sum += i;
			
		}
		System.out.println(sum);
		
	}
}

for循环实现九九乘法表

public class ForTest06
{
	public static void main(String[] args){
		int sum;
		for(int i=1;i<=9;i++){
			System.out.println(" ");
			for(int j=1;j<=i;j++){
				sum = i * j;
				System.out.print(j + "*" + i + "="    +   sum  + " ");
			}
		}
	}
}
编写for循环找出1-100中所有的素数

	素数:又被称为质数,能够被1和自身整除,不能被其他数字整除的数字称为素数

	该题目主要掌握的知识点:
		* for循环的使用
		* for循环的嵌套
		* 标记
		* break
		* 统计
public class ForTest07
{
	public static void main(String[] args){
		for(int i=2;i<=100;i++){
			//做一个标记,默认i是一个素数
			boolean flag = true;
			for(int j=2;j<i;j++){
				//判断i是不是一个非素数
				if(i % j == 0){
					//是一个非素数
					flag = false;
					//已经确定i是一个非素数,跳出循环,效率较高。
					break;
				}
			}
			if(flag){
				System.out.print(i );
			}
			
		}
	}
}
/*
升级版:
		编写for循环找出1~10000中所有的素数
		要求每8个换一行
*/
public class ForTest07
{
	public static void main(String[] args){
		int count = 0;
		for(int i=2;i<=10000;i++){
			
			boolean flag = true;

			for(int j=2;j<i;j++){
				if(i % j == 0){
					flag = false;
					break;//确认不是素数,直接跳出
				}
			}
			if(flag){
				System.out.print(i + "  ");
				count++;
				if(count % 8 == 0){
					System.out.println();
				}
			}
		}
	}
}

switch语句

public class SwitchTest01
{
	public static void main(String[] args){
		/*
			较完整的switch语句
		*/	
		//接收用户输入:
		//1 表示星期一
		//2 星期二
		java.util.Scanner s = new java.util.Scanner(System.in);
		System.out.print("请输入数字1-7:");
		int userInput = s.nextInt();

		switch(userInput){
			case 1:
				System.out.println("星期一");
				break;
			case 2:
				System.out.println("星期二");
				break;
			case 3:
				System.out.println("星期三");
				break;
			case 4:
				System.out.println("星期四");
				break;
			case 5:
				System.out.println("星期五");
				break;
			case 6:
				System.out.println("星期六");
				break;
			case 7:
				System.out.println("星期七");
				break;
			default:
				System.out.println("您输入的数字错误,请重新输入!");
		}
	} 
}
实现计算器当中的
		+
		-
		*
		/
		%
	实现思路:
		1.选择所有数据从键盘输入
		2.使用switch语句进行判断
		3.需要从控制台输入三次:
			* 第一个数字
			* 运算符
			* 第二个数字
public class SwitchTest02
{
	public static void main(String[] args){
		java.util.Scanner s = new java.util.Scanner(System.in);
		System.out.println("欢迎使用简单计算器系统!");
		System.out.print("请输入第一个数字:");
		int first = s.nextInt();
		System.out.print("请输入运算符:");
		String operator = s.next();
		System.out.print("请输入第二个数字:");
		int second = s.nextInt();
		int result = 0;

		switch(operator){
			case "+":
				System.out.println(first + "+" + second + "=" + (first + second));
				break;
			case "-":
				System.out.println(first + "-" + second + "=" + (first - second));
				break;
			case "*":
				System.out.println(first + "*" + second + "=" + (first * second));
				break;
			case "/":
				System.out.println(first + "/" + second + "=" + (first / second));
				break;
			case "%":
				System.out.println(first + "%" + second + "=" + (first % second));
				break;
			default	:
				System.out.println("您输入的运算符不正确");
		}	
	}
}

递归案例

不使用递归,计算1 - N的求和
    注意,这里的N是指方法调用前未赋值的数,并不是无限
public class RecursionTest02
{
	public static void main(String[] args){


		//调用方法
		int a = sum(10);
		System.out.println(a);
		
	}
	
	//单独定义一个方法,这是一个独立的功能,完成1-N的求和
	public static int sum(int n){
		
		int result = 0;
		for(int i=0;i<=n;i++){
			
			result += i;
		}
		return result;
	}
}

//使用递归计算1-N的和
public class RecursionTest03
{
	public static void main(String[] args){
		
		int a = sum(4);
		System.out.println(a);
	}
	public static int sum(int n){
		if(n  == 1){
			return 1;
		}
		return n + sum(n-1);
	}
}
//执行过程:
//n + sum(n - 1)
//4 + sum(3)
//4 + 3 + sum(2)
//4 + 3 + 2 + sum(1)
//4 + 3 + 2 + 1  此时sum方法结束  将值返回到main方法中的a变量中

先不使用递归 计算5的阶乘5 * 4 * 3 * 2 * 1

public class RecursionTest04
{
	public static void main(String[] args){
		
		int a = method(5);
		System.out.println(a);
	}
	public static int method(int n){
		
		int mul = 1;
		for(int i=n;i>=1;i--){
			
			mul *= i;
			
		}
		return mul;
	}
}

//递归方式
//不懂递归就记住此程序,面试题出现概率过高

public class RecursionTest04
{
	public static void main(String[] args){
		
		int result = method(5);
		System.out.println(result);
	}

	public static int method(int n){
		
		if(n == 1){
			return 1;
		}
		return n * method(n - 1);
	}
}
定义一个计算机类【电脑/笔记本】
			* 品牌
			* 型号
			* 颜色

		定义一个学生类
			* 学号
			* 姓名
			* 学生有一台笔记本电脑
		
		请编写程序来表示以上的类,然后分别将类创建为对象,
		对象数量不限,然后让其中的一个学生去使用其中的一台笔记本电脑。


		编译并运行,将整个执行过程采用图形方式描述出来。
//计算机类

class Computer
{
	String brand;

	String type;

	String color;
}


//学生类

 class Student01
{
	//学号
	int no;

	//姓名
	String name;

	Computer have;
}


public class OOTest02
{
	public static void main(String[] args){

		//创建笔记本对象
		Computer com = new Computer();
		//不采用默认值
		com.brand = "HASEE战神";
		com.type = "c6001";
		com.color = "black";
		
		//创建学生对象
		Student01 stu = new Student01();
		//不采用默认值
		stu.name = "jack";
		stu.no = 123;
		stu.have = com; //使学生拥有电脑
	
	

		//获取jack笔记本的品牌
		System.out.println(stu.have.brand);

		//修改jack笔记本的品牌
		stu.have.brand = "华硕";
		System.out.println(stu.have.brand);
	}
}

小芳的妈妈每天给他2.5元钱,他都会存起来,但是,每当这一天是存钱的第五天或者是5的倍数的话,他都会花去6元钱,请问经过多少天小芳才可以存到100元钱。

public class Money {

	public static void main(String[] args) {
		
		int day = 0;//初始天数
		double money = 0.0;//初始金钱
		/*while(true){
			day += 1;//天数 + 1
			money += 2.5;//金钱 + 2.5
			if(day % 5 == 0){
				money -= 6;
			}
			if(money >= 100){
				break;
			}
		}
		System.out.println("小芳通过" + day + "天存了" + money + "元钱");
		*/
		while(money <= 100){
			day += 1;
			money += 2.5;
			if(day % 5 == 0){
				money -= 6;
			}
		}
		System.out.println("小芳通过" + day + "天存了" + money + "元钱");
	}
}

package com.studynode.javase.test005;
import java.util.Scanner;

public class Star {

	public static void main(String[] args) {
		
		Scanner s = new Scanner(System.in);
		System.out.print("请输入一个正整数:");
		int rows = s.nextInt();
		System.out.println(rows);
		
		for(int i=0; i<=rows;i++){
			//System.out.println(i);
			
			for(int j=0;j<rows-i;j++){
				System.out.print(" ");
			}
			
			for(int m=0;m < i*2-1;m++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
请通过代码封装,实现如下需求:
 		编写一个类Book,代表教材:
 		1.具体属性:名称(title)、页数(pageNum)
 		2.其中页数不能少于200页,否则输出错误信息,并赋予默认值200
 		3.为各属性提供赋值和取值方法
 		4.具有方法:detail,用来在控制台输出每本教材的名称和页数。
 		5.编写测试类BookTest进行测试:为Book对象的属性赋予初始值,并调用Book对象的detail
public class Homework {

	public static void main(String[] args) {
		//创建book对象
		Book b = new Book("哈利波特",355);
		//调用detail方法
		b.detail();
		//修改页数
		b.setPageNum(20);
		//再次调用detail方法
		b.detail();
		
		Book b2 = new Book();
		b2.detail();
		
	}
	
}


//书本类
class Book{
	//名称
	private String title;
	//页数
	private int pageNum;
	
	//无参数构造方法
	public Book(){
		
	}
	public Book(String t,int p){
		title = t;
		if(p < 200){
			pageNum = 200;
		}
		pageNum = p;
	}
	
	//标题的set、get方法
	public void setTitle(String t){
		title = t;
	}
	public String getTitle(){
		return title;
	}
	
	//页数的set、get方法
	public void setPageNum(int p){
		if(p < 200){
			System.out.println("输出信息错误");
			p = 200;
		}
		pageNum = p;
	}
	public int getPageNum(){
		return pageNum;
	}
	//向控制台输出
	public void detail(){
		System.out.println("教材名称:" + title + ",总页数为:" + pageNum);
	}
	
}
写一个名为Account的类模拟账户。
 	该类的属性和方法如下所示
 	该类的属性包括:账户id,余额balance,年利率annualInteresRate;
 	包含的方法:各属性的set、get方法。取款方法wirhdraw(),存款方式deposit()
 	
 	写一个测试程序
 		1.创建一个Customer,名字叫Jane Smith,他有一个账号为1000,余额为2000,年利率为1.23%
 		2.对jane Smith操作:
 		存入100元,再取出960元,再取出2000。
 		打印Jane Smith的基本信息
 		信息显示如下:
 			成功存入:100
 			成功取出:960
 			余额不足,取钱失败
package com.studynode.javase.test006;

//银行类
public class Account {
	//账号
	private String id;
	//余额
	private double balance;
	//年利率
	private double annualInteresRate;
	
	
	
	//无参数构造方法
	public Account(){
		
	}
	//有参数构造方法
	public Account(String id,double balance,double annualInteresRate){
		this.id = id;
		this.balance = balance;
		this.annualInteresRate = annualInteresRate;
		System.out.println("欢迎使用本银行系统");
		System.out.println("您可以在此处进行存款、取款等操作!");
		
	}
	
	//账号的set、get方法
	public void setId(String i){
		id = i;
	}
	public String getId(){
		return id;
	}
	//余额的set、get方法
	public void setBalance(double b){
		balance = b;
	}
	public double getBalance(){
		return balance;
	}
	//年利率的set、get方法
	public void setAnnualInteresRate(double a){
		annualInteresRate = a; 
	}
	public double getAnnualInteresRate(){
		return annualInteresRate;
	}
	
	
	
	//取款方法
	public void wirhdraw(double wir){
		if(balance > wir){		//如果当前账户余额大于取款数目
			balance  -= wir;
			System.out.println("成功取款:" + wir + "元");
			System.out.println("您当前账户余额为:" + balance + "元");
		}else{
			System.out.println("您的余额不足,取钱失败!");
		}
	}
	
	//存款方法
	public void deposit(double dep){
		balance += dep;
		System.out.println("成功存入:" + dep + "元");
		System.out.println("存款成功,您当前的账户余额为:" + balance + "元");
	}	
	
}

public class Homework02 {
	
	public static void main(String[] args) {
		
		 Account user = new Account("1000",2000,0.00123);//创建Account对象并调用有参数构造方法
		 Custemoer u = new Custemoer("Jane Smith",user); //创建一个顾客类对象
		
		System.out.println("欢迎" + u.getName() + "使用" + "," + "该系统将全方位保护您的信息安全!");
		System.out.println("如果遇到问题可及时咨询人工服务,也可向大厅柜台及时反应!");
		/*
		  	成功存入:100
 			成功取出:960
 			余额不足,取钱失败
		 */
		//顾客信息都是私有的,在外部不使用get方法无法访问
		u.getAct().deposit(100);
		u.getAct().wirhdraw(900);
		u.getAct().wirhdraw(2000);
	}

}
//创建一个顾客类
class Custemoer{
	
	private String name;//姓名
	private Account act;//说明用户手里有一个银行卡
	
	//无参数构造方法
	public Custemoer(){
		
	}
	//有参数构造方法
	public Custemoer(String name,Account act){
		this.name = name;
		this.act = act;
	}
	
	//name
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	
	//Account
	public void setAct(Account act){
		this.act = act;
	}
	public Account getAct(){
		return act;
	}
	
}
封装已知类Student 代码如下:
		class Student{
			String name;
			int age;
			String address;
			String zipCode;
			String mobile;
		}
	
	要求:
		1.把Student的属性都作为私有,并提供set/get方法以及适当的构造方法。
		2.为Student类添加一个getPostAddress方法,要求返回Student对象的地址和邮编。

public class Homework03 {

	public static void main(String[] args) {
			
		Student s = new Student();
		s.setAddress("湖南省永州市");
		s.setZipCode("4000001");
		s.getPostAddress();
	}

}
class Student{
	private String name;
	private int age;
	private String address;
	private String zipCode;
	private String mobile;
	
	//无参构造方法
	public Student(){
		
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getZipCode() {
		return zipCode;
	}
	public void setZipCode(String zipCode) {
		this.zipCode = zipCode;
	}
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	
	public void getPostAddress(){
		System.out.println("地址:" + address);
		System.out.println("邮编:" + zipCode);
	}
}
定义丈夫类Husband和妻子类Wife
 * 丈夫类属性包括:身份证号,姓名,出生日期,妻子。
 * 妻子类属性包括:身份证号,姓名,出生日期,丈夫。
 * 分别给这两个类提供构造方法(无参数构造方法和有参数构造方法都要提供)。
 * 编写测试程序,创建丈夫、妻子对象,丈夫和 妻子关联
 * 关联之后要求能够输出“丈夫对象” 妻子的名字,“妻子对象”能够输出 丈夫名字
public class Test {
	
	public static void main(String[] args){
		//创建丈夫对象
		Husband h = new Husband("1111","zhangsan","20010203",null);
		
		//创建妻子对象
		Wife w = new Wife("2222","lisi","20020302",null);
		//实现关联
		//将丈夫类的妻子定位到妻子类w上
		h.w = w;
		//将妻子类的丈夫定位到h上
		w.h = h;
		
		//当对象的值设置为空之后,在访问这个值,编译阶段就会显示空指针异常:java.lang.NullPointerException
		//w.h = null;
		//h.w = null;
		System.out.println(h.name + "的妻子是" + h.w.name);
		System.out.println(w.name + "的丈夫是" + w.h.name);
	}
}
//丈夫类
class Husband{
	//身份证号
	String id;
	//姓名
	String name;
	//出生日期
	String birth;
	//妻子
	Wife w;
	
	//无参数构造方法
	public Husband(){
		
	}
	//有参数构造方法
	public Husband(String id,String name,String birth,Wife wife){
		this.id = id;
		this.name = name;
		this.birth = birth;
		w = wife;
	}
}

//妻子类
class Wife{
	//身份证号
	String id;
	//姓名
	String name;
	//出生日期
	String birth;
	//妻子
	Husband h;
	//无参数构造方法
	public Wife(){
		
	}
	//有参数构造方法
	public Wife(String id,String name,String birth,Husband husband){
		this.id = id;
		this.name = name;
		this.birth = birth;
		h = husband;
	}
}

多态练习题

 此题不写实现方法,后续如果有需要可自行测试
 	编写程序模拟主人喂养宠物的场景:
 	提示1:
 		主人类:Master
 		宠物类:Pat
 		宠物类子类:Dog、Cat、YingWu
 	提示2:
 		主人应该有喂养的方法:feed()
 		宠物应该有吃的方法:eat()
 		只要主人喂宠物,宠物就吃。
 		
 	要求:主人类只提供一个feed()方法,要求达到可以喂养各种类型的宠物。
 	
 	编写测试程序:
 		创建主人对象
 		创建各种宠物对象
 		调用主人喂养方法feed(),喂养不同的宠物,观察执行结果。
 		
 通过该案例,理解多态在开发中的作用。
 思考:feed是否需要一个参数,参数又该选择这么类型
第二个题:
 	编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。
 	可以弹奏的乐器包括二胡、钢琴和琵琶
 		实现思路及关键代码:
 			1.定义乐器类Instrument,包括方法makeSound()
 			2.定义乐器类的子类:Erhu、piano和violin
 			3.定义乐手类Musician,可以弹奏各种乐器play(Instrument i)
 			4.定义测试类,给乐手不同的乐器让她弹奏
某公司的雇员分为以下若干类:
	Employee:这是所有员工的父类,
		属性:
			员工的姓名,员工的生日月份 
		方法:getSalary(intmonth)
			根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元

	SalarieEmployee:
		Employee 的子类,拿固定工资的员工
		属性:月薪
	
	HourlyEmployee:
		Employee 的子类,按小时拿工资的员工,每月工资超出160小时的部分按照1.5倍工资发放
		属性:每小时的工资,每月工资的小时数

	SalesEmployee:
		Employee 的子类,销售人员,工资按月销售额和提成率决定。
		属性:月销售额,提成率

	BasePlusSalesEmployee:
		Employee 的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。
		属性:底薪。

	根据要求创建对象,并计算某个月这些对象的工资

	注意:要求把每个类都做成完全封装,不允许非私有化属性
posted @ 2021-10-12 14:30  guided  阅读(349)  评论(0)    收藏  举报