几个简单的Java面向对象程序设计练习题

记录本人在Java面向对象程序设计课程中遇到的编程练习题,方便需要时查阅。

设计Cirlce类

【问题描述】设计如下Cirlce类
在这里插入图片描述
【输入形式】输入一个半径值(整数)
【输出形式】输出圆的周长和面积
【样例输入】1
【样例输出】
3.141592653589793
6.283185307179586

import java.util.Scanner;
//-----以下为需填片段-------
class Circle{
	   int r;
	   public Circle(){
		   
	   }
	   public Circle(int r){
		   this.r=r;
	   }
	   public double area(){
		   return Math.PI*this.r*this.r;
	   }
	   public double perimeter(){
		   return Math.PI*this.r*2;
	   }
}
//--------------------------
public class CircleApp {
	public static void main(String[] args) {
		int r;
		Scanner in=new Scanner(System.in);
		r=in.nextInt();
		Circle c1=new Circle(r);
		System.out.println(c1.area());
		System.out.println(c1.perimeter());
		in.close();
	}
}

设计Book类

【问题描述】根据下列类图,设计Book类:
在这里插入图片描述
【输入形式】1-4的整数
【输出形式】
输入1,输出Compile pass!
输入2,输出params constructor pass!
输入3,输出ligang,java,101.8
输入4,输出(default, noname, 50.0)
输入5,输出(c++, tanhaoqiang, 80.0)

import  java.util.Scanner;
//-----begin------
class  Book{
    String title;
    String author;
    double price;
    public Book() {
        this("default","noname",50.0);
    }
    public Book(String title, String author, double price) {
        this.title = title;
        this.author = author;
        this.price = price;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getTitle() {
        return title;
    }
    public String getAuthor() {
        return author;
    }
    public double getPrice() {
        return price;
    }
    @Override
    public String toString() {
        return "("+title+", "+author+", "+price+")";
    }
}
//-----end------
public  class  BookApp  {
    public  static  void  main(String[]  args)  {
        Book  book;
        Scanner  scan=new  Scanner(System.in);
        int  sel;
        sel=scan.nextInt();
        switch(sel){
            case  1:
                book=new  Book();
                book.setAuthor("ligang");
                book.setTitle("java");
                book.setPrice(101.8);
                System.out.println("Compile  pass!");
                break;
            case  2:
                book=new  Book("java",  "lixinghua",  89.9);
                System.out.println("params  constructor  pass!");
                break;
            case  3:
                book=new  Book();
                book.setAuthor("ligang");
                book.setTitle("java");
                book.setPrice(101.8);
                System.out.println(book.getAuthor()+","+book.getTitle()+","+book.getPrice());
                break;
            case  4:
                book=new  Book();
                System.out.println(book);
                break;
            case  5:
                book=new  Book("c++",  "tanhaoqiang",  80);
                System.out.println(book);
        }
        scan.close();
    }
}

设计Address类和Student类

【问题描述】根据输出要求,设计Address类和Student类。类图如下:
在这里插入图片描述
【输入形式】输入1或2或3或4或5
【输出形式】
当输入1时,输出结果为:HuBei,wuhan
当输入2时,输出结果为:HuNan,ChangSha
当输入3时,输出结果为:hubei,YiChang
当输入4时,输出结果为:zhangsan:Hubei,wuhan
当输入5时,输出结果为:zhangsan:hubei,wuhan

import java.util.Scanner;
//-----以下为需填片段-------
class Address{  
		String province;
		String city;
		public Address() {
			this.setProvince("hubei");
			this.setCity("wuhan");
		}
		public Address(String province, String city) {
			this.setProvince(province);
			this.setCity(city);
		}
		public String getProvince() {
			return this.province;
		}
		public void setProvince(String province) {
			this.province = province;
		}
		public String getCity() {
			return this.city;
		}
		public void setCity(String city) {
			this.city = city;
		}
		@Override
		public String toString() {
			return this.getProvince() + "," + this.getCity();
		}
}
class Student{
	String name;
		Address address;
		public Student() {
		}
		public Student(String name, Address address) {
			this.setName(name);
			this.setAddress(address);
		}
		public String getName() {
			return this.name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public Address getAddress() {
			return this.address;
		}
		public void setAddress(Address address) {
			this.address = address;
		}
		@Override
		public String toString() {
			return this.getName() + ":" + address.toString();
		}
}
//--------------------------
public class Main {
	public static void main(String[] args) {
		int selected;
		Scanner scan=new Scanner(System.in);
		selected=scan.nextInt();
		Address address=new Address();
		Student student=new Student("zhangsan",address);
		switch(selected){
		case 1:
			address.setProvince("HuBei");
			System.out.println(address);
			break;
		case 2:
			address=new Address("HuNan","ChangSha");
			System.out.println(address);
			break;
		case 3:
			address.setCity("YiChang");
			System.out.println(address);
			break;
		case 4:
			address.setProvince("HuBei");
			System.out.println(student);
			break;
		case 5:
			System.out.println(student);
		}
		scan.close();
	}
}

设计复数类

【问题描述】根据下列类图和Main类中的main方法,设计复数类
在这里插入图片描述
【输入形式】1-10的整数
【输出形式】复数计算后的结果。针对不同实部和虚部,复数的输出格式为:0、2i、-2i、1+2i、1-2i
【样例输出】
输入1,输出0
输入2,输出1.0i
输入3,输出1.0-1.0i
输入4,输出1.0+1.0i
输入5,输出-2.0i
输入6,输出1.0i
输入7,输出-1.0i
输入8,输出no param constructor pass!
输入9,输出params constructor pass!
输入10,compile pass

import java.util.Scanner;
//-----begin------
class Complex{
    private double realPart;
    private double imagPart;
    public Complex() {
    }
    public Complex(double realPart, double imagPart) {
        this.realPart = realPart;
        this.imagPart = imagPart;
    }
    public void setImagPart(double imagPart) {
        this.imagPart = imagPart;
    }
    public double getImagPart() {
        return imagPart;
    }
    public double getRealPart() {
        return realPart;
    }
    public void setRealPart(double realPart) {
        this.realPart = realPart;
    }
    Complex add(Complex c){
        return new Complex(this.realPart+c.realPart,this.imagPart+c.imagPart);
    }
    Complex sub(Complex c){
        return new Complex(this.realPart-c.realPart,this.imagPart-c.imagPart);
    }
    static Complex add(Complex c1,Complex c2){
        return c1.add(c2);
    }
    static Complex sub(Complex c1,Complex c2){
        return c1.sub(c2);
    }
    public String toString() {
        if (realPart==0&imagPart==0) return 0+"";
        if(realPart==0) return imagPart+"i";
        if(imagPart==0) return realPart+"";
        if(imagPart<0) return ""+realPart+imagPart+"i";
        return realPart+"+"+imagPart+"i";
    }
}
//-----end------
public class cmpApp {
	public static void main(String[] args) {
		Complex c1 ;
		Complex c2;
		int selected;
		Scanner in = new Scanner(System.in);
		selected = in.nextInt();
		switch (selected) {
		case 1:
			c1 = new Complex();
			System.out.println(c1);
			break;
		case 2:
			c2 = new Complex(0, 1);
			System.out.println(c2);
			break;
		case 3:
			c1 = new Complex();
			c1.setRealPart(1);
			c1.setImagPart(-1);
			System.out.println(c1);
			break;
		case 4:
			c1 = new Complex();
			c2 = new Complex(0, 1);
			c1.setRealPart(1);
			System.out.println(c1.add(c2));
			break;
		case 5:
			c1 = new Complex();
			c1.setImagPart(-1);
			c2 = new Complex(0, 1);
			System.out.println(c1.sub(c2));
			break;
		case 6:
			c1 = new Complex();
			c2 = new Complex(0, 1);
			System.out.println(Complex.add(c1, c2));
			break;
		case 7:
			c1 = new Complex();
			c2 = new Complex(0, 1);
			System.out.println(Complex.sub(c1, c2));
			break;
		case 8:
			c1 = new Complex();
			System.out.println("no param constructor pass!");
			break;
		case 9:
			c2 = new Complex(0, 1);
			System.out.println("params constructor pass!");
			break;
                case 10:
			System.out.println("compile pass!");
		}
		in.close();
	}
}

设计日期类

【问题描述】借助Calendar类,设计一个日期类MyDate,能根据多种输入数据创建日期对象,可对日期进行计算,并以不同的模式输出日期。类图如下:
在这里插入图片描述
【输入形式】1-8的整数
【输出形式】输入1,则输出2010-10-10

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
//-----以下为需填片段-------
class MyDate {
	Calendar c = Calendar.getInstance();
	String pattern = "yyyy-MM-dd";

	public MyDate() {
	}

	public MyDate(int y, int m, int d) {
		c.set(y, m - 1, d);
	}

	public MyDate(String source) {
		SimpleDateFormat sf = new SimpleDateFormat(pattern);
		Date d = new Date();
		try {
			d = sf.parse(source);
			c.setTime(d);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	public MyDate(String source, String pattern) {
		SimpleDateFormat sf = new SimpleDateFormat(pattern);
		setPattern(pattern);
		Date d = new Date();
		try {
			d = sf.parse(source);
			c.setTime(d);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	public MyDate after(int n) {
		c.add(Calendar.DATE, n);
		return new MyDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DATE));
	}

	public MyDate before(int n) {
		c.add(Calendar.DATE, -n);
		return new MyDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DATE));
	}

	public Date getDate() {
		return c.getTime();
	}

	public Calendar getCalendar() {
		return c;
	}

	public long getLong() {
		return c.getTimeInMillis();
	}

	public void setPattern(String pattern) {
		this.pattern = pattern;
	}

	public String toString() {
		SimpleDateFormat sf = new SimpleDateFormat(pattern);
		return sf.format(c.getTime());
	}
}
//--------------------------
public class Main {
	public static void main(String[] args) {
		int selected;
		Scanner in=new Scanner(System.in);
		selected=in.nextInt();
		MyDate md=new MyDate(2000,10,10);
		switch(selected){
		case 1:
			System.out.println(md);
			break;
		case 2:
			md=new MyDate("2010-10-10");
			System.out.println(md);
			break;
		case 3:
			md=new MyDate("2010/10/10","yyyy/MM/dd");
			System.out.println(md);
			break;
		case 4:
			System.out.println(md.after(8));
			break;
		case 5:
			System.out.println(md.before(20));
			break;
		case 6:
			System.out.println(md.getCalendar().get(Calendar.YEAR));
			break;
		case 7:
			md.setPattern("yyyy/MM/dd");
			System.out.println(md);
		}
		in.close();
	}
}

设计接口求图形的周长和面积

【问题描述】设计接口图形Shape、及其实现类Circle和Rectangle、工具类Show中提供两个方法showArea和showPerimeter,分别用于显示图形的周长和面积。App类中main方法中给出测试代码。Circle类中无参构造方法将半径赋值为1,Rectangle类中无参构造方法中width和length都赋值为1。如下图:
在这里插入图片描述
【输入形式】1-10的整数,分别执行不同的代码块,得到不同结果。
【输出形式】
输入1,输出3.141592653589793
输入2,输出12.566370614359172
输入3,输出1.0
输入4,输出14.0
输入5,输出3.141592653589793
输入6,输出
12.566370614359172
12.566370614359172
输入7,输出
1.0
12.0
16.0
输入8,输出
12.0
16.0
输入9,输出
1.0
4.0
输入10,输出compile pass!

import  java.util.Scanner;
//-----begin------
interface Shape{
    double area();
    double perimeter();
}
class Circle implements Shape{
    int radius;
    public Circle() {
        radius=1;
    }
    public Circle(int radius) {
        this.radius = radius;
    }
    @Override
    public double area() {
        return Math.PI*radius*radius;
    }
    @Override
    public double perimeter() {
        return 2*Math.PI*radius;
    }
}
class Rectangle implements Shape{
    int width;
    int length;
    public Rectangle() {
        width=length=1;
    }
    public Rectangle(int width, int length) {
        this.width = width;
        this.length = length;
    }
    @Override
    public double area() {
        return width*length;
    }
    @Override
    public double perimeter() {
        return (width+length)*2;
    }
}
//-----end------
class  Show  {
	//-----begin------
    static void showArea(Shape s){
        System.out.println(s.area());
    }
    static void showPerimeter(Shape s){
        System.out.println(s.perimeter());
    }
    //-----end------
}
public  class  App  {
    public  static  void  main(String[]  args)  {
        int  n;
        Scanner  scan=new  Scanner(System.in);
        n=scan.nextInt();
        Shape  s;
        switch(n){
            case  1:
                System.out.println(new  Circle().area());
                break;
            case  2:
                System.out.println(new  Circle(2).perimeter());
                break;
            case  3:
                System.out.println(new  Rectangle().area());
                break;
            case  4:
                System.out.println(new  Rectangle(3,4).perimeter());
                break;
            case  5:
                s=new  Circle();
                System.out.println(s.area());
                break;
            case  6:
                s=new  Circle(2);
                Show.showArea(s);
                Show.showPerimeter(s);
                break;
            case  7:
                s=new  Rectangle();
                System.out.println(s.area());
            case  8:
                s=new  Rectangle(2,  6);
                Show.showArea(s);
                Show.showPerimeter(s);
                break;
            case  9:
                s=new  Rectangle();
                Show.showArea(s);
                Show.showPerimeter(s);
                break;
            case  10:
                System.out.println("compile  pass!");
        }
        scan.close();
    }
}

带异常处理的person类

【问题描述】定义一个Person类,属性包含姓名、年龄。方法:无参构造方法、有参构造方法、getter和setter方法、toString方法。其中:setter方法在设置年龄的时候,要求对年龄进行参数的正确性检测,年龄有效范围在1-100之间,否则抛出IllegalArgumentException异常
【输入形式】1-4的整数
【输出形式】
输入1,结果为(zhangsan,50),
输入:2,结果为:
IllegalArgumentException
null
输入3,结果为:
IllegalArgumentException
(zhangsan,0)

import java.util.Scanner;
//-----以下为需填片段-------
class Person {
	String name;
	int age;
	public Person(){
		
	}
	public Person(String name){
		this.name = name;
	}
	public Person(String name, int age) throws Exception{
		this(name);
		setAge(age);
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age)throws Exception{
		if(age>1 && age <100)
			this.age = age;
		else 
			throw new Exception();
	}
	@Override
	public String toString() {
		return '('+name+','+age+')';
	}
}
//--------------------------
public class App {
	public static void main(String[] args) {
		int i;
		Scanner in=new Scanner(System.in);
		i=in.nextInt();
		Person p=null;
		switch(i){
		case 1:
			try{
				p=new Person("zhangsan");
			        p.setAge(50);
			}catch(Exception e){
				System.out.println("IllegalArgumentException");
			}

			break;
		case 2:
			try{
				p=new Person("zhangsan",101);
			}catch(Exception e){
				System.out.println("IllegalArgumentException");
			}
			break;
		case 3:		
			try{
                                p=new Person("zhangsan");
				p.setAge(-1);
			}catch(Exception e){
				System.out.println("IllegalArgumentException");
			}
			break;
		default:
			try{
				p=new Person("zhangsan",20);
			}catch(Exception e){
				System.out.println("IllegalArgumentException");
			}
			
		}
		in.close();
		System.out.println(p);
	}
}

多线程火车票问题

【问题描述】设计一个多线程程序:火车售票模拟程序。假如火车站有10张火车票要卖,现在有5个销售点同时售票,用5个线程模拟这5个售票点的售票情况。
【输出形式】
sale:10
sale:9
sale:8
sale:7
sale:6
sale:5
sale:4
sale:3
sale:2
sale:1

import java.util.Scanner;
//-----begin------
class SaleThread extends Thread{
    int ticket;
    public SaleThread(int ticket){
        this.ticket=ticket;
    }
    public synchronized void run() {
		while(ticket>0) 
			System.out.println("sale:"+ticket--);
	}
}
//-----end------
public class thick {
    public static void main(String[] args){
        SaleThread st=new SaleThread(10);
        Scanner in=new Scanner(System.in);
        int selected=in.nextInt();
        switch (selected){
            case 2:
                new Thread(st).start();
                new Thread(st).start();
                new Thread(st).start();
                new Thread(st).start();
                new Thread(st).start();
        }
        in.close();
    }
}
  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值