Java程序设计__Chap3 面对对象__编程题

6-1 设计一个矩形类Rectangle (10分)

设计一个名为Rectangle的类表示矩形。这个类包括: 两个名为width和height的double型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1. 一个无参构造方法。 一个为width和height指定值的矩形构造方法。 一个名为getArea()的方法返回这个矩形的面积。 一个名为getPerimeter()的方法返回这个矩形的周长。

类名为:

Rectangle

裁判测试程序样例:

import java.util.Scanner;
/* 你的代码将被嵌入到这里 */

public class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    double w = input.nextDouble();
    double h = input.nextDouble();
    Rectangle myRectangle = new Rectangle(w, h);
    System.out.println(myRectangle.getArea());
    System.out.println(myRectangle.getPerimeter());

    input.close();
  }
}

输入样例:

3.14  2.78

输出样例:

8.7292
11.84

程序

class Rectangle
{
	private double width;
	private double height;
	public Rectangle(){}
	public Rectangle(double w,double h)
	{
		width=w;
		height=h;
	 }
	double getArea()
	{
		return width*height;
	 }
	double getPerimeter()
	{
		return (width+height)*2;
	 }
 }

7-1 类的定义与对象使用 (10分)

请定义一个学生类(Student),包含学号、姓名、年龄(7-60岁)三个私有成员。从键盘输入学生的成员值后生成对象,并按要求输出相应的结果。

输入格式:

第一行一个整数k,代表后面要生成的学生人数。 从第二行开始的连续k行,每行3个数据,分别表示一个学生的学号、姓名和年龄。

输出格式:

输出每个学生的基本情况。如果数据不符合要求则输出"bad"

输入样例:

3
20174042001 zhangsan 20
20174042030 lisi 2
20174042050 wangwu 17

输出样例:

zhangsan 20174042001 20
bad
wangwu 20174042050 17

程序

import java.util.*;
class Student
{
	private String sno;
	private String name;
	private int age;
	public Student(String s1,String n,int a)
	{
		sno=s1;
		name=n;
		age=a;
	 }
	public String toString()
	{
		return name+" "+sno+" "+age;
	 }
	
 }
public class Main
{
	public static void main(String[] args)
	{
		int k;
		Scanner s=new Scanner(System.in);
		k=s.nextInt();
		Student stu[]=new Student[k];
		for(int i=0;i<k;i++)
		{
			String sno1=s.next();
			String name1=s.next();
			int age1=s.nextInt();
			if(age1<7||age1>60) System.out.println("bad");
			else
			{
				stu[i]=new Student(sno1,name1,age1);
				System.out.println(stu[i]);
			 }
		 }
 	}
 }

7-2 好玩的图形 (20分)

给定图形接口定义如下:

interface Shape{
float getArea();//求面积
float getPerimeter();//求周长
}

请实现以上接口,定义圆形类(用数字1表示)、矩形类(用数字2表示)。
从键盘输入图形类别(1代表圆,2代表矩形)和相应的参数,计算并输出相应图形的面积和周长,结果保留小数点后2位数据。

输入格式:

输入数据包含多行,第一行一个整数n,表示接下来共有n个图形对象需要生成。
每个图形数据占2行,第一行为数字1或2,表示图形类别,第二行为生成图形的参数。

输出格式:

每个图形对应的面积和周长。

输入样例:

2
1
1.0
2
1.0 2.0

输出样例:

3.14 6.28
2.00 6.00

程序

import java.util.*;
interface Shape
{
	public float getArea();
	public float getPerimeter();
 }
class Round implements Shape
{
	private float radius;
	
	public Round(float r)
	{
		radius=r;
	 }
	
	public float getArea()
	{
		return (float)(Math.PI*radius*radius);
	 }
	public float getPerimeter()
	{
		return (float)(2*Math.PI*radius);
	 }
 }
class Rect implements Shape
{
	private float length;
	private float width;
	public Rect(float l,float w)
	{
		length=l;width=w;
	 }
	public float getArea()
	{
		return (float)(length*width);
	 }
	public float getPerimeter()
	{
		return (float)(2*(length+width));
	 }
 }
public class Main
{
	public static void main(String[] args)
	{
		Scanner ss=new Scanner(System.in);
		int n=ss.nextInt();
		for(int i=1;i<=n;i++)
		{
			int m=ss.nextInt();
			if(m==1)
			{
				float r=ss.nextFloat();
				Round r1=new Round(r);
				System.out.println(String.format("%.2f",r1.getArea())+" "+String.format("%.2f",r1.getPerimeter()));
			 }
			else if(m==2)
			{
				float l=ss.nextFloat();
				float w=ss.nextFloat();
				Rect r2=new Rect(l,w);
				System.out.println(String.format("%.2f",r2.getArea())+" "+String.format("%.2f",r2.getPerimeter()));
			 }
		 }
	 }
 }

7-3 声明图书类,记录图书总册数,利用静态变量赋值。 (10分)

声明一个图书类,其数据成员为书名、编号(利用静态变量实现自动编号)、书价,并拥有静态数据成员册数,记录图书的总册数;在构造方法中,利用静态变量为对象的编号赋值,在主方法中定义对象数组,并求出总册数。

输出格式:

请输出每本图书对应的书名,书号,书价以及总图书数。

输出样例:

书名:Java程序设计, 书号:1, 书价:34.5
书名:数据结构, 书号:2, 书价:44.8
书名:C++程序设计, 书号:3, 书价:35.0
图书总册数为:3

程序

class Book
{
	private String title;
	private double price;
	public static String sno;
	public static int num=0;
	public Book(String t,double p)
	{
		num++;
		title=t;
		price=p;
		sno=Integer.toString(Integer.parseInt("0")+num);	
	 }
	public String toString()
	{
		return "书名:"+title+", 书号:"+sno+", 书价:"+price;
	 }
	public static int getNum()
	{
		return num;
	 }
 }
public class Main
{
     public static void main(String[] args){
	Book a=new Book("Java程序设计",34.5);
	System.out.println(a);
	Book b=new Book("数据结构",44.8);
	System.out.println(b);
	Book c=new Book("C++程序设计",35.0);
	System.out.println(c);
	System.out.println("图书总册数为:"+Book.getNum());
   }
 }

7-4 jmu-Java-03面向对象基础-04-形状-继承 (15分)

前言
前面题目形状中我们看到,为了输出所有形状的周长与面积,需要建立多个数组进行多次循环。这次试验使用继承与多态来改进我们的设计。

本题描述:

1、定义抽象类Shape 属性:不可变静态常量double PI,值为3.14, 抽象方法:public double
getPerimeter(),public double getArea() 2、Rectangle与Circle类均继承自Shape类。
Rectangle类(属性:int width,length)、Circle类(属性:int radius)。
带参构造函数为Rectangle(int width,int length),Circle(int radius)。
toString方法(Eclipse自动生成) 3、编写double sumAllArea方法计算并返回传入的形状数组中所有对象的面积和与
double sumAllPerimeter方法计算并返回传入的形状数组中所有对象的周长和。 4、main方法
4.1 输入整型值n,然后建立n个不同的形状。如果输入rect,则依次输入宽、长。如果输入cir,则输入半径。
4.2 然后输出所有的形状的周长之和,面积之和。并将所有的形状信息以样例的格式输出。 提示:使用Arrays.toString。
4.3 最后输出每个形状的类型与父类型.使用类似shape.getClass() //获得类型, shape.getClass().getSuperclass() //获得父类型;
注意:处理输入的时候使用混合使用nextInt与nextLine需注意行尾回车换行问题。

思考

你觉得sumAllArea和sumAllPerimeter方法放在哪个类中更合适? 是否应该声明为static?

输入样例:

4
rect
3 1
rect
1 5
cir
1
cir
2

输出样例:

38.84
23.700000000000003
[Rectangle [width=3, length=1], Rectangle [width=1, length=5], Circle [radius=1], Circle [radius=2]]
class Rectangle,class Shape
class Rectangle,class Shape
class Circle,class Shape
class Circle,class Shape

程序

import java.util.*;
abstract class Shape
{
	static final double  PI=3.14;
	public abstract double getPerimeter();
	public abstract double getArea();
 }
class Rectangle extends Shape
{
	private int width;
	private int length;
	public Rectangle(int width,int length)
	{
		this.width=width;
		this.length=length;
	 }
	public double getPerimeter()
	{
		return 2*(width+length);
	 }
	public double getArea()
	{
		return length*width;
	 }
	public String toString()
	{
		return "Rectangle [width="+width+", length="+length+"]";
	 }
 }
class Circle extends Shape
{
	private int radius;
	public Circle(int radius)
	{
		this.radius=radius;
	 }
	public double getPerimeter()
	{
		return 2*PI*radius;
	 }
	public double getArea()
	{
		return PI*radius*radius;
	 }
	public String toString()
	{
		return "Circle [radius="+radius+"]";
	 }
 }
public class Main
{
	public static void main(String[] args)
	{
		double sumAllArea=0,sumAllPerimeter=0;
		Scanner ss=new Scanner(System.in);
		int n=ss.nextInt();
		Shape sha[]=new Shape[n];
		for(int i=0;i<n;i++)
		{
			String s1=ss.next();
			if(s1.equals("rect"))
			{
				int w=ss.nextInt();
				int l=ss.nextInt();
				sha[i]=new Rectangle(w,l);
				sumAllArea+=sha[i].getArea();
				sumAllPerimeter+=sha[i].getPerimeter();
			 }
			else if(s1.equals("cir"))
			{
				int r=ss.nextInt();
				sha[i]=new Circle(r);
				sumAllArea+=sha[i].getArea();
				sumAllPerimeter+=sha[i].getPerimeter();
			 }
		 }
		System.out.println(sumAllPerimeter);
		System.out.println(sumAllArea);
		System.out.print("[");
		for(int i=0;i<n;i++)
		{
			if(i!=0) System.out.print(", ");
			System.out.print(sha[i]);
		 }
		System.out.println("]");
		for(int i=0;i<n;i++)
		{
			if(sha[i] instanceof Rectangle) System.out.println("class Rectangle,class Shape");
			else if(sha[i] instanceof Circle) System.out.println("class Circle,class Shape");
		 }
	 }
 }

7-5 学生类-构造函数 (10分)

定义一个有关学生的Student类,内含类成员变量: String name、String sex、int age,所有的变量必须为私有(private)。

1.编写有参构造函数: 能对name,sex,age赋值。

2.覆盖toString函数: 按照格式:类名 [name=, sex=, age=]输出。使用idea自动生成,然后在修改成该输出格式

3.对每个属性生成setter/getter方法
4.main方法中 •输入1行name age sex , 调用上面的有参构造函数新建对象。

输入样例:

tom 15 male

输出样例:

Student [name='tom', sex='male', age=15]

程序

import java.util.*;
class Student
{
	private String name;
	private String sex;
	private int age;
	public Student(String n,String s,int a)
	{
		name=n;
		sex=s;
		age=a;
	 }
	public String toString()
	{
		return "Student [name='"+name+"', sex='"+sex+"', age="+age+"]";
	 }
 }
public class Main
{
	public static void main(String[] args)
	{
		Scanner ss=new Scanner(System.in);
		String name=ss.next();
		int age=ss.nextInt();
		String sex=ss.next();
		Student s=new Student(name,sex,age);
		System.out.println(s);
	 }
 }

7-6 计算年龄 (10分)

定义一个Birthday类,其成员变量有3个整形变量(出生的年月日):year,month,day;提供构造方法对这3个成员变量进行初始化;提供成员变量的get、set方法;成员函数有getAge(),功能是实现计算到2017年12月25日时该Birthday对象的年龄。编写程序测试这个类。

输入格式:

输入出生的年、月、日(注:输入的年月日以换行隔开)

输出格式:

计算得到年龄

输入样例:
在这里给出一组输入。例如:

1995
12
23

输出样例:
在这里给出相应的输出。例如:

age=22

程序

import java.util.*;
class Birthday
{
	private int year;
	private int month;
	private int day;
	public Birthday(int y,int m,int d)
	{
		year=y;month=m;day=d;
	 }
	public void setYear(int y1)
	{
		year=y1;
	 }
	public void setMonth(int m1)
	{
		month=m1;
	 }
	public void setDay(int d1)
	{
		day=d1;
	 }
	public int getYear()
	{
		return year;
	 }
	public int getMonth()
	{
		return month;
	 }
	public int getday()
	{
		return day;
	 }
	public int getAge()
	{
		if(day<=25)return 2017-year;
		else return 2016-year;
	 }
 }

public class Main
{
	public static void main(String[] args)
	{
		Scanner ss=new Scanner(System.in);
		int y=ss.nextInt();
		int m=ss.nextInt();
		int d=ss.nextInt();
		Birthday b=new Birthday(y,m,d);
		System.out.println("age="+b.getAge());
	 }
 }
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页