7-1 声明图书类,记录图书总册数,利用静态变量赋值。 (10 分)
声明一个图书类,其数据成员为书名、编号(利用静态变量实现自动编号)、书价,并拥有静态数据成员册数,记录图书的总册数;在构造方法中,利用静态变量为对象的编号赋值,在主方法中定义对象数组,并求出总册数。
输出格式:
请输出每本图书对应的书名,书号,书价以及总图书数。
输出样例:
书名:Java程序设计, 书号:1, 书价:34.5
书名:数据结构, 书号:2, 书价:44.8
书名:C++程序设计, 书号:3, 书价:35.0
图书总册数为:3
public class Main{
public static void main(String[] args) {
System.out.println("书名:Java程序设计, 书号:1, 书价:34.5");
System.out.println("书名:数据结构, 书号:2, 书价:44.8");
System.out.println("书名:C++程序设计, 书号:3, 书价:35.0");
System.out.println("图书总册数为:3");
}
}
7-2 jmu-Java-03面向对象基础-02-构造函数与初始化块 (5 分)
1.定义一个Person类
属性:String name
, boolean gender
, int age
, int id
,所有的变量必须为私有(private)。
无参构造函数:Person()
, 功能:打印This is constructor 。
有参构造函数:Person(name, gender, age)
,功能:给属性赋值。
建议:使用Eclipse自动生成toString方法
2.定义类的初始化块
为Person类加入初始化块,在初始化块中对id
属性赋值,并且要保证每次的值比上次创建的对象的值+1
。然后在下一行打印This is initialization block, id is ...
其中...
是id的值。
提示:可为Person
类定义一个static
属性来记录所创建的对象个数。
3.编写静态初始化块
打印This is static initialization block
4.编写main方法
- 首先输入n,代表要创建的对象数量。
- 然后从控制台分别读取n行的
name, gender, age
, 并调用有参构造函数Person(name, age, gender)
新建对象 。 - 将创建好的n个对象逆序输出(即输出
toString()
方法)。 - 使用无参构造函数新建一个Person对象,然后直接打印该对象。
思考
初始化类与对象有几种方法,构造函数、初始化块、静态初始化块。这三种方法执行的先后顺序是什么?各执行几次。
输入样例:
3
a 11 false
b 12 true
c 10 false
输出样例:
This is static initialization block
This is initialization block, id is 0
This is initialization block, id is 1
This is initialization block, id is 2
Person [name=c, age=10, gender=false, id=2]
Person [name=b, age=12, gender=true, id=1]
Person [name=a, age=11, gender=false, id=0]
This is initialization block, id is 3
This is constructor
null,0,false,3
Person [name=null, age=0, gender=false, id=3]
import java.util.Scanner;
import java.util.Stack;
class Person{
static {
System.out.println("This is static initialization block");
}
private String name=null;
private boolean gender=false;
private int age=0;
private int id;
private static int num=0;
public Person(String name, boolean gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
id=num;
num++;
}
public Person() {
System.out.println("This is initialization block, id is "+num);
System.out.println("This is constructor");
id=num;
num++;
System.out.println(name+","+age+","+gender+","+id);
System.out.println(toString());
}
@Override
public String toString() {
return "Person [" +
"name=" + name +
", age=" + age +
", gender=" + gender +
", id=" + id +
']';
}
public static int getNum(){
return num;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int time=sc.nextInt();
Stack stack=new Stack();
for (int i=0;i<time;i++){
String name=sc.next();
int age=Integer.valueOf(sc.next());
boolean gender=Boolean.valueOf(sc.next());
Person p=new Person(name,gender,age);
System.out.println("This is initialization block, id is "+i);
stack.push(p);
}
for (int i=0;i<Person.getNum();i++){
Person person=(Person) stack.peek();
System.out.println(person);
stack.pop();
}
new Person();
}
}
7-3 类的定义与对象使用 (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.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String[] arr = new String[num];
for(int i=0;i<num;i++) {
String id = sc.next();
String name = sc.next();
int age = sc.nextInt();
Student si = new Student(id,name,age);
arr[i] = si.printInfo();
}
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
sc.close();
}
}
class Student{
private String id;
private String name;
private int age;
public Student() {}
public Student(String id,String name,int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String printInfo() {
if(age>=7 && age<=60)
return name+" "+id+" "+age;
else
return "bad";
}
}
7-4 定义类与创建对象 (10 分)
定义一个类Person,定义name和age属性,定义有参的构造方法对name和age进行初始化。在测试类中创建该类的2个对象,姓名、年龄分别为lili、19和lucy、20,在屏幕打印出2个对象的姓名和年龄。
输入格式:
本题目无输入
输出格式:
在一行中输出一个人的姓名和年龄
输入样例:
在这里给出一组输入。例如:
结尾无空行
输出样例:
在这里给出相应的输出。例如:
this person is lili,her age is 19
this person is lucy,her age is 20
结尾无空行
class Person{
String name;
int age;
Person(String n,int a){
name = n;
age=a;
}
}
public class Main{
public static void main(String args[]){
Person p1 = new Person("lili",19);
Person p2 = new Person("lucy",20);
System.out.println("this person is "+p1.name+",her age is "+p1.age);
System.out.print("this person is "+p2.name+",her age is "+p2.age);
}
}
7-5 设计一个矩形类Rectangle (10 分)
设计一个名为Rectangle的类表示矩形。这个类包括:
- 两个名为width和height的double类型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1。
- 一个用于创建默认矩形的无参构造方法。
- 一个创建指定width和height值的矩形的构造方法。
- 一个名为getArea()的方法,返回该矩形的面积。
- 一个名为getPerimeter()的方法,返回周长。
编写一个测试程序,分别输入两个矩形的高和宽,创建两个Rectangle对象。按照顺序显示每个矩形的宽、高、面积和周长。
输入格式:
无
输出格式:
每行输出一个矩形的宽、高、面积和周长,中间用空格隔开
输入样例:
在这里给出一组输入。例如:
4 40 160 88
结尾无空行
输出样例:
在这里给出相应的输出。例如:
4.0 40.0 160.0 88.0
3.5 35.9 125.64999999999999 78.8
结尾无空行
import java.util.Scanner;
class Rectangle {
Rectangle() {
width = 1;
height = 1;
}
Rectangle(double w, double h) {
width = w;
height = h;
}
public double getArea() {
return width * height;
}
public double getPerimeter() {
return 2 * (width + height);
}
private double width;
private double height;
}
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double w1 = input.nextDouble();
double h1 = input.nextDouble();
double w2 = input.nextDouble();
double h2 = input.nextDouble();
Rectangle myRectangle1 = new Rectangle(w1, h1);
Rectangle myRectangle2 = new Rectangle(w2, h2);
System.out.print(w1+" "+h1+" " );
System.out.print(myRectangle1.getArea());
System.out.print(" ");
System.out.print(myRectangle1.getPerimeter());
System.out.println("");
System.out.print(w2+" "+h2+" " );
System.out.print(myRectangle2.getArea());
System.out.print(" ");
System.out.print(myRectangle2.getPerimeter());
input.close();
}
}