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());
}
}
这篇博客探讨了Java编程中面向对象的概念,包括类的定义、对象的使用、图形绘制、图书管理、形状继承和构造函数的应用。通过一系列编程题目,详细解释了如何设计矩形类、学生类、图书类以及实现图形接口。此外,还涉及了静态变量的使用、形状的面积和周长计算、以及年龄计算等实际操作。
2998

被折叠的 条评论
为什么被折叠?



