JAVA经典例题四(8 examples)

  1. 定义一个抽象类Shape,他的属性有length和height,以及用于计算面积和周长的抽象方法area(),perimeter()。定义两个非抽象子类分别是长方形Rectangle和三角形Triangle。设计一个主类,分别测试Rectangle和Triangle的方法。(三角形面积公式为:s=(a+b+c)/2; area=Math.sqrt(s*(s-a)(s-b)(s-c)))
public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Shape s;//声明抽象类对象引用
		Rectangle r=new Rectangle(5, 6);
		s=r;//向上转型
		System.out.println("长方形的面积:"+s.area());
		System.out.println("长方形的周长:"+s.perimeter());
		Triangle t=new Triangle(3, 4, 5);
		s=t;
		System.out.println("三角形的面积:"+s.area());
		System.out.println("三角形的周长:"+s.perimeter());
	}
}
abstract class Shape{
	int length;
	int height;
	public Shape(int l,int h){
		length=l;
		height=h;
	}
	public int getLength(){
		return length;
	}
	public int getHeight(){
		return height;
	}
	public abstract double area();//抽象方法,计算面积
	public abstract int perimeter();//抽象方法,计算周长
}

class Rectangle extends Shape{
	
	public Rectangle(int l, int h) {
		super(l, h);
		// TODO Auto-generated constructor stub
	}


	@Override
	public double area() {
		// TODO Auto-generated method stub
		
		return this.getHeight()*this.getLength();
	}

	@Override
	public int perimeter() {
		// TODO Auto-generated method stub
		return (this.height+this.length)*2;
	}	
}
class Triangle extends Shape{
	private int c;//第三边
	public Triangle(int l,int h,int c) {
		super(h,l);
		this.c=c;
		// TODO Auto-generated constructor stub
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return (this.getHeight()+this.getLength()+c)/2;
	}

	@Override
	public int perimeter() {
		// TODO Auto-generated method stub
		return this.getHeight()+this.getLength()+c;
	}
	
}
  1. 定义一个包含计算面积方法area()和计算体积抽象方法volume()的几何图形接口Shape。然后再定义实现该接口的正方体、长方体、圆柱体的类。最后设计一个主程序,利用多态特性计算正方体、长方体、圆柱体的面积与体积
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Shape s;//接口类型的引用
		Cube cube=new Cube(3);
		Cuboid cuboid=new Cuboid(3, 4, 5);
		Cylinder cyl=new Cylinder(4, 5);
		s=cube;
		System.out.println("正方体的面积:"+s.area());
		System.out.println("正方体的体积:"+s.volume());
		s=cuboid;
		System.out.println("长方体的面积:"+s.area());
		System.out.println("长方体的体积:"+s.volume());
		s=cyl;
		System.out.println("圆柱体的面积:"+s.area());
		System.out.println("圆柱体的体积:"+s.volume());
		
	}

}
interface Shape{
	double area();
	double volume();
}
class Cube implements Shape{//正方体
	double a;//棱长
	public Cube(double x) {
		// TODO Auto-generated constructor stub
		a=x;
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return a*a*6;
	}
	@Override
	public double volume() {
		// TODO Auto-generated method stub
		return a*a*a;
	}
}
class Cuboid implements Shape{
	double a,b,c;
	public Cuboid(double x,double y,double z) {
		// TODO Auto-generated constructor stub
		a=x;
		b=y;
		c=z;
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return (a*b+a*c+b*c)*2;
	}

	@Override
	public double volume() {
		// TODO Auto-generated method stub
		return a*b*c;
	}//长方体
	
}
class Cylinder implements Shape{
	double r,h;
	public Cylinder(double x,double y) {
		// TODO Auto-generated constructor stub
		r=x;
		h=y;
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return Math.PI*r*r*2+Math.PI*2*r*h;
	}

	@Override
	public double volume() {
		// TODO Auto-generated method stub
		return Math.PI*r*r*h;
	}//圆柱体
	
}
  1. 定义一个Compute接口,由抽象方法add()、substract()、multiply()、divide()分别实现加减乘除四种运算功能。再定义一个类Computer,它有两个成员变量X(int)和Y(int),两个构造函数(无参数和有两个参数的),四个成员函数(分别获取和修改X,Y的值)。用Computer类实现Compute接口,分别用四个接口方法实现X和Y两个变量的加减乘除运算。最后定义一个主类TestComputer,测试Computer类以及集合的方法
public class TestComputer {
	public static void main(String[] args) {
		Computer c1=new Computer(40,5);
		Compute cc;//接口类型的引用
		cc=c1;//向上转型
		cc.add();//调用Computer中方法实现
		cc.substract();
		cc.multiply();
		cc.divide();
		System.out.println();
		Computer c2=new Computer();
		c2.setX(2);
		c2.setY(4);
		c2.add();
		c2.substract();
		c2.multiply();
		c2.divide();
		
	}
}
interface Compute{
	void add();
	void substract();
	void multiply();
	void divide();//加减乘除四种运算功能
}
class Computer implements Compute{
	int X;
	int Y;
	public Computer() {
		// TODO Auto-generated constructor stub
	}
	public Computer(int x,int y) {
		this.X=x;
		this.Y=y;
	}
	public int getX() {
		return X;
	}
	public void setX(int x) {
		X = x;
	}
	public int getY() {
		return Y;
	}
	public void setY(int y) {
		Y = y;
	}
	@Override
	public void add() {//实现接口中的方法
		// TODO Auto-generated method stub
		System.out.println("和为:"+(X+Y));
	}
	@Override
	public void substract() {
		// TODO Auto-generated method stub
		System.out.println("差为:"+(X-Y));
	}
	@Override
	public void multiply() {
		// TODO Auto-generated method stub
		System.out.println("积为:"+(X*Y));
	}
	@Override
	public void divide() {
		// TODO Auto-generated method stub
		System.out.println("商为:"+(X/Y));
	}
	
}
  1. 自定义学生类,每个学生对象包括学号,姓名,性别,年龄,联系方式和地址等属性。编写一个程序能够对学生对象进行插入,修改,浏览,统计人数等功能。要求利用相关集合类。(a.定义学生类:成员变量,类的方法—构造方法,设置和读取各数据成员的方法;b.定义管理学生对象的类:成员变量—用于存放全部学生对象的集合和学生人数;方法—构造方法,创建存储学生对象集合,完成学生对象的添加,删除,修改,浏览和统计人数五个方法;c.定义主类测试)
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.util.HashSet;
import java.util.Set;

public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main m=new Main();
		m.stuAdd();
		m.stuBrowse();
		m.stuRemove();
		m.stuModify();
	}
	public List<Student> stu;
	public Main() {
		this.stu=new ArrayList<Student>();
	}
	public void stuAdd() {
		System.out.println("添加学生信息:");
		Student stu1=new Student("1201", "张", true, 18, "100000", "科技大学");
		stu.add(stu1);
		Student temp1=(Student)stu.get(0);
		System.out.println("添加了学生:"+temp1.sid+" "+temp1.name+" "+
		temp1.gender+" "+temp1.age+" "+temp1.contact+" "+temp1.address);
		
		Student stu2=new Student("1202", "王", false, 19, "100001", "哈佛大学");
		stu.add(1, stu2);
		Student temp2=(Student)stu.get(1);
		System.out.println("添加了学生:"+temp2.sid+" "+temp2.name+" "+
		temp2.gender+" "+temp2.age+" "+temp2.contact+" "+temp2.address);
		
		Student stu3=new Student("1203", "赵", true, 20, "100003", "科技大学");
		stu.add(stu3);
		Student temp3=(Student)stu.get(2);
		System.out.println("添加了学生:"+temp3.sid+" "+temp3.name+" "+
		temp3.gender+" "+temp3.age+" "+temp3.contact+" "+temp3.address);	
	}
	
	public void stuBrowse() {
		System.out.println("所有学生信息如下:");
		Iterator<Student> it=stu.iterator();
		int i=0;
		while(it.hasNext()) {
			Student s=(Student)it.next();
			System.out.println("学生:"+s.sid+" "+s.name+" "+
			s.gender+" "+s.age+" "+s.contact+" "+s.address);
			i++;
		}
		System.out.println("共有"+i+"个学生!");
		
	}
	
	public void stuRemove() {
		System.out.println("即将删除1位置的学生信息;");
		stu.remove(1);
		System.out.println("已被删除;");
		stuBrowse();
		
	}
	
	public void stuModify() {
		System.out.println("修改学生信息为:");
		stu.set(0, new Student("1219", "武", true, 20, "100000", "科技大学"));
		stuBrowse();
	}

}
class Student{
	String sid;
	String name;
	boolean gender;
	int age;
	String contact;
	String address;
	public Student(String sid,String name,boolean gender,
			int age,String contact,String address) {
		this.sid=sid;
		this.name=name;
		this.gender=gender;
		this.age=age;
		this.contact=contact;
		this.address=address;
	}
}
class Manage{
	int stuNum;
	public  Set students;
	public Manage(int stuNum) {
		this.stuNum=stuNum;
		this.students=new HashSet();
	}
}
  1. 利用Scanner类从键盘读入一行字符串,实现下列功能:a.将字符串中的字符按字母顺序排序后输出;b.统计每个字符出现的次数和位置。
import java.util.Arrays;
import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner get=new Scanner(System.in);
		String str=get.nextLine();
		char c[]=new char[str.length()];
		char temp;
		for(int i=0;i<str.length();i++) {
			c[i]=str.charAt(i);	
		}
		
		for(int j=0;j<str.length();j++) {
			System.out.println(Arrays.toString(count(str,c[j])));	
		}
		
		
		for(int i=0;i<c.length;i++) {
			for(int j=i+1;j<c.length;j++) {
				if(c[i]>c[j]) {
					temp=c[i];
					c[i]=c[j];
					c[j]=temp;
				}
			}
			System.out.print(c[i]);
		}
		get.close();
	}
	public static int[] count(String s,char k) {
		int num0=0;
		int[] count= {};
		for(int i=0;i<s.length();i++) {
			char ch=s.charAt(i);
			if(ch==k) {
				count=Arrays.copyOf(count, count.length+1);
				count[count.length-1]=i;
				num0++;
			}
		}
		System.out.println(k+"出现的次数为:"+num0+" ");
		System.out.print(k+"出现的位置是:");
		return count;
	}

}
  1. 编写一个机动车驾驶证管理程序,实现驾驶证的查询,添加,浏览等功能。其中身份证作为键,驾驶证包括驾驶类型,颁发日期,年检日期等信息作为键所对应的值。(利用Map相关类)
import java.util.HashMap;
import java.util.Map;


import java.util.Scanner;
import java.util.Set;

public class ManageLicense {

	public static void main(String[] args) {
		
		ManageLicense m=new ManageLicense();
		m.testPut();
		m.testVisit();
		m.testSeek();
	}
	//用来承装驾驶证类型对象
	public Map<String,License> licenses;
	//在构造器中初始化students属性
	public ManageLicense(){
		this.licenses=new HashMap<String,License>();
	}
	public void testPut() {
		Scanner console=new Scanner(System.in);
		int i=0;
		while(i<3) {
			System.out.println("请输入身份证号:");
			String ID=console.nextLine();
			License li=licenses.get(ID);
			//判断ID是否被占用
			if(li==null) {
				System.out.println("请输入驾驶证信息:");
				String type=console.nextLine();
				String data=console.nextLine();
				String inspectData=console.nextLine();
				License newLicense=new License(ID,type, data, inspectData);
				licenses.put(ID, newLicense);
				System.out.println("成功添加驾驶证信息:"+licenses.get(ID).type
					+" "+licenses.get(ID).data+" "+licenses.get(ID).inspectData);
				i++;
			}else {
				System.out.println("此ID已被占用!");
				continue;
			}
		}
	}
	
	public void testVisit() {
		//通过ketSet方法,返回Map中的所有“键”的Set集合
		Set<String> keySet=licenses.keySet();
		//取得students的容量
		System.out.println("总共有:"+licenses.size()+"个驾驶证!");
				
		//遍历keySet,取得每一个键,get方法取得每个键对应的value
		for(String licenseid:keySet) {
			License li=licenses.get(licenseid);
			if(li!=null) {
				System.out.println("驾驶证: 类型为:"+li.type+" 颁发日期为:"+li.data+" 年检日期为:"+li.inspectData);
			}
		}	
	}
	
	public void testSeek() {
		System.out.println("请输入要查询的驾驶证ID:");
		Scanner console=new Scanner(System.in);
		while(true) {
			String ID=console.nextLine();
			License li=licenses.get(ID);
			if(li==null) {
				System.out.println("此ID不存在!");
				continue;
			}
			licenses.get(ID);
			System.out.println("成功查询到驾驶证::"+"类型为:"+li.type+" 颁发日期为:"+li.data+" 年检日期为:"+li.inspectData);
			break;
		}
	}

}
class License{
	String ID;
	String type;
	String data;
	String inspectData;
	public License(String ID,String type,String data,String inspectData) {
		this.ID=ID;
		this.type=type;
		this.data=data;
		this.inspectData=inspectData;
	}
}
  1. 用Scanner类实现从命令行读取任意数据类型的数据,并实现随时可终止读取
import java.util.Scanner;
public class WYJ {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner get=new Scanner(System.in);
		System.out.println("请输入一个数据:");
		while(true) {//为了达到一直循环的效果
			if(get.hasNextInt() ){
				int a=get.nextInt();
				System.out.println("输入的数据类型为整数:"+a);
			}else if(get.hasNextDouble()) {
				double b=get.nextDouble();
				System.out.println("输入的数据类型为双精度浮点型:"+b);
			}else if(get.hasNextFloat()) {
				float c=get.nextFloat();
				System.out.println("输入的数据类型为单精度浮点型:"+c);
			}else if(get.hasNextLine()) {
				String d=get.nextLine();
				System.out.println("输入的数据类型为字符串类型:"+d);
				String str="quit";
				if(d.equals(str)) {
					System.out.println("终止数据!");
					break;
				}
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/WU2629409421perfect/article/details/86537590